@shd101wyy/yo 0.1.7 → 0.1.8

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.
@@ -189,14 +189,14 @@ This typically happens when a struct/enum/array/tuple contains fields with confl
189
189
  - Compile-time only fields (e.g., comptime_int, Type, Module)
190
190
  - Runtime only fields (e.g., *(T), [T], void, C-compatible types)
191
191
 
192
- Consider restructuring the type to avoid mixing incompatible field types.`})}var h_,qt=Z(()=>{mt();De();rn();bi();Ne();Zr();at();Fe();to();h_=new Set});function Rs(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 We(e){return(e==null?void 0:e.tag)==="unit"}function hn(e){return(e==null?void 0:e.tag)==="comptime_int"}function Mn(e){return(e==null?void 0:e.tag)==="comptime_float"}function fn(e){return(e==null?void 0:e.tag)==="comptime_string"}function Un(e){return(e==null?void 0:e.tag)==="ComptimeList"}function ga(e){return Un(e)&&On(e.childType)}function Nr(e){return(e==null?void 0:e.tag)==="bool"}function Us(e){return(e==null?void 0:e.tag)==="usize"}function Bs(e){return(e==null?void 0:e.tag)==="isize"}function xi(e){return(e==null?void 0:e.tag)==="u8"}function Gs(e){return(e==null?void 0:e.tag)==="i8"}function Ws(e){return(e==null?void 0:e.tag)==="u16"}function Ys(e){return(e==null?void 0:e.tag)==="i16"}function qs(e){return(e==null?void 0:e.tag)==="u32"}function Hs(e){return(e==null?void 0:e.tag)==="i32"}function js(e){return(e==null?void 0:e.tag)==="u64"}function Ks(e){return(e==null?void 0:e.tag)==="i64"}function Xs(e){return(e==null?void 0:e.tag)==="f32"}function Qs(e){return(e==null?void 0:e.tag)==="f64"}function On(e){return(e==null?void 0:e.tag)==="Expr"}function ut(e){return(e==null?void 0:e.tag)==="Array"}function Vt(e){return(e==null?void 0:e.tag)==="Slice"}function gt(e){return(e==null?void 0:e.tag)==="Tuple"}function Kt(e){return(e==null?void 0:e.tag)==="Union"}function Ze(e){return(e==null?void 0:e.tag)==="Enum"}function Ue(e){return(e==null?void 0:e.tag)==="Struct"}function pn(e){return(e==null?void 0:e.tag)==="Struct"&&e.isReferenceSemantics}function Gr(e){return(e==null?void 0:e.tag)==="Struct"&&e.isNewtype}function it(e){return(e==null?void 0:e.tag)==="Module"}function $t(e){return(e==null?void 0:e.tag)==="Trait"}function xn(e){return $t(e)&&e.isFn!==void 0}function ne(e){return(e==null?void 0:e.tag)==="Function"}function fl(e){return(e==null?void 0:e.tag)==="Function"&&e.return.isCompileTimeOnly}function Pt(e){return(e==null?void 0:e.tag)==="Type"}function ud(e){return Pt(e)&&e.tag==="Type"&&e.level===0}function B(e){return(e==null?void 0:e.tag)==="SomeType"}function ot(e){return(e==null?void 0:e.tag)==="Ptr"}function Vn(e){return(e==null?void 0:e.tag)==="Iso"}function Nn(e){return(e==null?void 0:e.tag)==="Arc"}function dt(e){return(e==null?void 0:e.tag)==="Dyn"}function go(e){return(e==null?void 0:e.tag)==="TypeApplication"}function br(e){if(B(e)){let t=e;if(ft(t))return!0;if(t.resolvedConcreteType)return br(t.resolvedConcreteType)}return pn(e)||dt(e)||Vn(e)||Nn(e)}function Ki(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 Xi(e){return(e==null?void 0:e.tag)==="f32"||(e==null?void 0:e.tag)==="f64"}function vd(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 Xa(e){return(e==null?void 0:e.tag)==="char"}function uo(e){return(e==null?void 0:e.tag)==="void"}function ar(e){return $t(e)&&e.isFuture!==void 0}function Qu(e){return $t(e)&&e.isConcrete!==void 0}function Vi(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 ki(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&&B(i.type)&&!ft(i.type));return t||n}function no(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&&B(i.type)&&!ft(i.type));return t||n}function T_(e){var n;let t=e.type;return t?ki(t)&&(((n=e.specializedFunctionCaches)==null?void 0:n.length)??0)>0:!1}function Yr(e){var t;return pn(e)?e.fields.length===1&&e.fields[0].label==="*"&&!!((t=e.typeName)!=null&&t.startsWith("Box(")):!1}function nn(e){return(e==null?void 0:e.tag)==="EffectsRow"}var Ne=Z(()=>{qt();Zr()});function vo(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 ai(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 ha=Z(()=>{});var va,Td,pl=Z(()=>{Te();Zr();va=[...F.__yo_op_add,...F.__yo_op_sub,...F.__yo_op_mul,...F.__yo_op_div,...F.__yo_op_mod,...F.__yo_op_neg,...F.__yo_op_eq,...F.__yo_op_neq,...F.__yo_op_lt,...F.__yo_op_lte,...F.__yo_op_gt,...F.__yo_op_gte,...F.__yo_op_not,...F.__yo_op_bit_and,...F.__yo_op_bit_or,...F.__yo_op_bit_xor,...F.__yo_op_bit_complement,...F.__yo_op_bit_left_shift,...F.__yo_op_bit_right_shift,...F.__yo_ptr_add,...F.__yo_ptr_sub,...F.__yo_ptr_diff,...F.__yo_ptr_eq,...F.__yo_ptr_neq,...F.__yo_ptr_lt,...F.__yo_ptr_lte,...F.__yo_ptr_gt,...F.__yo_ptr_gte,...F.__yo_slice_len,...F.__yo_slice_new,...F.__yo_slice_ptr,...F.__yo_as,...F.__yo_getrandom,...F.__yo_arc4random_buf,...F.__yo_bcrypt_gen_random,...F.__yo_getentropy,...F.__yo_maybe_uninit_new,...F.__yo_maybe_uninit_as_ptr,...F.__yo_maybe_uninit_assume_init,...F.__yo_array_index,...F.__yo_slice_index,...F.__yo_array_index_range,...F.__yo_array_index_range_inclusive,...F.__yo_slice_index_range,...F.__yo_slice_index_range_inclusive,...F.__yo_noop,...F.__yo_return_self,...F.__yo_ms_sleep],Td=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 Ae(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":for(let u of Object.values(t.types))if(Gr(u.type)&&u.type.fields.length===1&&Vt(u.type.fields[0].type))return u.cName;return"uint8_t*";case"char":return"char";case"short":return"short";case"ushort":return"unsigned short";case"int":return"int";case"uint":return"unsigned int";case"long":return"long";case"ulong":return"unsigned long";case"longlong":return"long long";case"ulonglong":return"unsigned long long";case"longdouble":return"long double";case"Tuple":case"Struct":case"Union":case"Enum":{if(e.tag==="Enum"){let _=rr(e);if(_)return H(_,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} ${M(e)}`);return(e.tag==="Struct"||e.tag==="Enum")&&Ue(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 ${M(e)}`);return u}case"Array":{let u=e,c=u.childType,_=u.length;if(Rt(_)){let f=H(c,t),p=`Array_${Ae(f)}_${_.value}`;return t.arrayStructTypes.has(p)||t.arrayStructTypes.set(p,{childType:f,length:typeof _.value=="bigint"?Number(_.value):_.value}),p}break}case"Slice":{let u=e,_=`Slice_${Ae(H(u.childType,t))}`;return t.sliceStructTypes.has(_)||t.sliceStructTypes.set(_,{childType:H(u.childType,t)}),_}case"SomeType":{let u=e;if(ft(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&&B(u.resolvedConcreteType)&&ft(u.resolvedConcreteType)){let f=u.resolvedConcreteType,p=(a=t.types[f.id])==null?void 0:a.cName;if(p)return`${p}*`}if(u.resolvedConcreteType&&Ue(u.resolvedConcreteType)){let f=u.resolvedConcreteType.id;for(let[p,d]of Object.entries(t.types))if(B(d.type)&&ft(d.type)&&d.type.resolvedConcreteType&&Ue(d.type.resolvedConcreteType)&&d.type.resolvedConcreteType.id===f)return`${d.cName}*`}let _=Wn(u);if(_){let f=(s=t.types[_.id])==null?void 0:s.cName;if(f)return`${f}*`}throw new Error(`Impl(Future) type has no registered concrete type. SomeType ID: ${u.id}, FutureModule: ${(_==null?void 0:_.id)??"none"}. Ensure async blocks are properly analyzed and their state machine types are registered.
192
+ Consider restructuring the type to avoid mixing incompatible field types.`})}var h_,qt=Z(()=>{mt();De();rn();bi();Ne();Zr();at();Fe();to();h_=new Set});function Rs(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 We(e){return(e==null?void 0:e.tag)==="unit"}function hn(e){return(e==null?void 0:e.tag)==="comptime_int"}function Mn(e){return(e==null?void 0:e.tag)==="comptime_float"}function fn(e){return(e==null?void 0:e.tag)==="comptime_string"}function Un(e){return(e==null?void 0:e.tag)==="ComptimeList"}function ga(e){return Un(e)&&On(e.childType)}function Nr(e){return(e==null?void 0:e.tag)==="bool"}function Us(e){return(e==null?void 0:e.tag)==="usize"}function Bs(e){return(e==null?void 0:e.tag)==="isize"}function xi(e){return(e==null?void 0:e.tag)==="u8"}function Gs(e){return(e==null?void 0:e.tag)==="i8"}function Ws(e){return(e==null?void 0:e.tag)==="u16"}function Ys(e){return(e==null?void 0:e.tag)==="i16"}function qs(e){return(e==null?void 0:e.tag)==="u32"}function Hs(e){return(e==null?void 0:e.tag)==="i32"}function js(e){return(e==null?void 0:e.tag)==="u64"}function Ks(e){return(e==null?void 0:e.tag)==="i64"}function Xs(e){return(e==null?void 0:e.tag)==="f32"}function Qs(e){return(e==null?void 0:e.tag)==="f64"}function On(e){return(e==null?void 0:e.tag)==="Expr"}function ut(e){return(e==null?void 0:e.tag)==="Array"}function Vt(e){return(e==null?void 0:e.tag)==="Slice"}function gt(e){return(e==null?void 0:e.tag)==="Tuple"}function Kt(e){return(e==null?void 0:e.tag)==="Union"}function Ze(e){return(e==null?void 0:e.tag)==="Enum"}function Ue(e){return(e==null?void 0:e.tag)==="Struct"}function pn(e){return(e==null?void 0:e.tag)==="Struct"&&e.isReferenceSemantics}function Gr(e){return(e==null?void 0:e.tag)==="Struct"&&e.isNewtype}function it(e){return(e==null?void 0:e.tag)==="Module"}function $t(e){return(e==null?void 0:e.tag)==="Trait"}function xn(e){return $t(e)&&e.isFn!==void 0}function ne(e){return(e==null?void 0:e.tag)==="Function"}function fl(e){return(e==null?void 0:e.tag)==="Function"&&e.return.isCompileTimeOnly}function Pt(e){return(e==null?void 0:e.tag)==="Type"}function ud(e){return Pt(e)&&e.tag==="Type"&&e.level===0}function B(e){return(e==null?void 0:e.tag)==="SomeType"}function ot(e){return(e==null?void 0:e.tag)==="Ptr"}function Vn(e){return(e==null?void 0:e.tag)==="Iso"}function Nn(e){return(e==null?void 0:e.tag)==="Arc"}function dt(e){return(e==null?void 0:e.tag)==="Dyn"}function go(e){return(e==null?void 0:e.tag)==="TypeApplication"}function br(e){if(B(e)){let t=e;if(ft(t))return!0;if(t.resolvedConcreteType)return br(t.resolvedConcreteType)}return pn(e)||dt(e)||Vn(e)||Nn(e)}function Ki(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 Xi(e){return(e==null?void 0:e.tag)==="f32"||(e==null?void 0:e.tag)==="f64"}function vd(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 Xa(e){return(e==null?void 0:e.tag)==="char"}function uo(e){return(e==null?void 0:e.tag)==="void"}function ar(e){return $t(e)&&e.isFuture!==void 0}function Qu(e){return $t(e)&&e.isConcrete!==void 0}function Vi(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 ki(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&&B(i.type)&&!ft(i.type));return t||n}function no(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&&B(i.type)&&!ft(i.type));return t||n}function T_(e){var n;let t=e.type;return t?ki(t)&&(((n=e.specializedFunctionCaches)==null?void 0:n.length)??0)>0:!1}function Yr(e){var t;return pn(e)?e.fields.length===1&&e.fields[0].label==="*"&&!!((t=e.typeName)!=null&&t.startsWith("Box(")):!1}function nn(e){return(e==null?void 0:e.tag)==="EffectsRow"}var Ne=Z(()=>{qt();Zr()});function vo(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 ai(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 ha=Z(()=>{});var va,Td,pl=Z(()=>{Te();Zr();va=[...F.__yo_op_add,...F.__yo_op_sub,...F.__yo_op_mul,...F.__yo_op_div,...F.__yo_op_mod,...F.__yo_op_neg,...F.__yo_op_eq,...F.__yo_op_neq,...F.__yo_op_lt,...F.__yo_op_lte,...F.__yo_op_gt,...F.__yo_op_gte,...F.__yo_op_not,...F.__yo_op_bit_and,...F.__yo_op_bit_or,...F.__yo_op_bit_xor,...F.__yo_op_bit_complement,...F.__yo_op_bit_left_shift,...F.__yo_op_bit_right_shift,...F.__yo_ptr_add,...F.__yo_ptr_sub,...F.__yo_ptr_diff,...F.__yo_ptr_eq,...F.__yo_ptr_neq,...F.__yo_ptr_lt,...F.__yo_ptr_lte,...F.__yo_ptr_gt,...F.__yo_ptr_gte,...F.__yo_slice_len,...F.__yo_slice_new,...F.__yo_slice_ptr,...F.__yo_as,...F.__yo_getrandom,...F.__yo_arc4random_buf,...F.__yo_bcrypt_gen_random,...F.__yo_getentropy,...F.__yo_maybe_uninit_new,...F.__yo_maybe_uninit_as_ptr,...F.__yo_maybe_uninit_assume_init,...F.__yo_array_index,...F.__yo_slice_index,...F.__yo_array_index_range,...F.__yo_array_index_range_inclusive,...F.__yo_slice_index_range,...F.__yo_slice_index_range_inclusive,...F.__yo_noop,...F.__yo_return_self,...F.__yo_ms_sleep],Td=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 Le(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":for(let u of Object.values(t.types))if(Gr(u.type)&&u.type.fields.length===1&&Vt(u.type.fields[0].type))return u.cName;return"uint8_t*";case"char":return"char";case"short":return"short";case"ushort":return"unsigned short";case"int":return"int";case"uint":return"unsigned int";case"long":return"long";case"ulong":return"unsigned long";case"longlong":return"long long";case"ulonglong":return"unsigned long long";case"longdouble":return"long double";case"Tuple":case"Struct":case"Union":case"Enum":{if(e.tag==="Enum"){let _=rr(e);if(_)return H(_,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} ${M(e)}`);return(e.tag==="Struct"||e.tag==="Enum")&&Ue(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 ${M(e)}`);return u}case"Array":{let u=e,c=u.childType,_=u.length;if(Rt(_)){let f=H(c,t),p=`Array_${Le(f)}_${_.value}`;return t.arrayStructTypes.has(p)||t.arrayStructTypes.set(p,{childType:f,length:typeof _.value=="bigint"?Number(_.value):_.value}),p}break}case"Slice":{let u=e,_=`Slice_${Le(H(u.childType,t))}`;return t.sliceStructTypes.has(_)||t.sliceStructTypes.set(_,{childType:H(u.childType,t)}),_}case"SomeType":{let u=e;if(ft(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&&B(u.resolvedConcreteType)&&ft(u.resolvedConcreteType)){let f=u.resolvedConcreteType,p=(a=t.types[f.id])==null?void 0:a.cName;if(p)return`${p}*`}if(u.resolvedConcreteType&&Ue(u.resolvedConcreteType)){let f=u.resolvedConcreteType.id;for(let[p,d]of Object.entries(t.types))if(B(d.type)&&ft(d.type)&&d.type.resolvedConcreteType&&Ue(d.type.resolvedConcreteType)&&d.type.resolvedConcreteType.id===f)return`${d.cName}*`}let _=Wn(u);if(_){let f=(s=t.types[_.id])==null?void 0:s.cName;if(f)return`${f}*`}throw new Error(`Impl(Future) type has no registered concrete type. SomeType ID: ${u.id}, FutureModule: ${(_==null?void 0:_.id)??"none"}. Ensure async blocks are properly analyzed and their state machine types are registered.
193
193
  resolvedConcreteType: ${((l=u.resolvedConcreteType)==null?void 0:l.id)??"none"}
194
- registered type IDs: ${Object.keys(t.types).filter(f=>f.startsWith("sometype")).join(", ")}`)}return tr(u)&&u.resolvedConcreteType||u.resolvedConcreteType?H(u.resolvedConcreteType,t):"void*"}case"Ptr":{let c=e.childType;if(Vt(c)){let p=H(c.childType,t),d=`Slice_${Ae(p)}`;return t.sliceStructTypes.has(d)||t.sliceStructTypes.set(d,{childType:p}),`${d}*`}let _=H(c,t);return pn(c)?`${_}*`:Ze(c)&&rr(c)?`${_}*`:`${_}*`}case"Iso":{let u=e,c=u.childType,_=H(c,t),f=_.replace(/\*/g,"").trim(),p=`Iso_${Ae(f)}`;return t.isoTypes||(t.isoTypes=new Map),t.isoTypes.has(p)||t.isoTypes.set(p,{childTypeCName:_,isoType:u}),p}case"Arc":{let u=e,c=u.childType,_=H(c,t),f=_.replace(/\*/g,"").trim(),p=`Arc_${Ae(f)}`;return t.arcTypes||(t.arcTypes=new Map),t.arcTypes.has(p)||t.arcTypes.set(p,{childTypeCName:_,arcType:u}),p}}return`// Unknown type: ${M(e)}`}function an(e,t,n){let r=Ae(t);return`${H(e,n)} ${r}`}function er(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} (${M(e)})`);return`${r.toUpperCase()}_${t.toUpperCase()}`}function Ro(e){return e.type.return.isCompileTimeOnly}function ro(e){let t=e.body,n=null;return S(t)&&E(t,"begin")&&t.args.length===1&&S(t.args[0])&&E(t.args[0],va)?n=t.args[0].func.token.value:S(t)&&E(t,va)&&(n=t.func.token.value),n&&F.__yo_as.includes(n)?null:n}function rr(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(ot(i)){if(n)return null;n=r}else return null}else return null;return t&&n&&n.fields?n.fields[0].type:null}function ni(e){for(let t of e.variants)if(t.fields&&t.fields.length>0)return!1;return e.variants.length>0}function Qe(e,t){if(!t)return Ae(e);let n=fe(t,e);if(n.length>0){let r=n[n.length-1];return Ae(r.name,r.type.isExtern==="c")}return Ae(e)}function Zu(e){if(S(e)&&e.args.length>=1){let t=e.args[0];if(t&&K(t))return t.token.value}if(S(e)&&e.args.length===0&&S(e.func)&&E(e.func,".",2)&&K(e.func.args[0])&&K(e.func.args[1])&&e.func.args[1].token.value===F.___dup[0])return e.func.args[0].token.value}function qr(e){if(S(e)&&e.args.length===0&&S(e.func)&&E(e.func,".",2)&&K(e.func.args[1])&&e.func.args[1].token.value===F.___drop[0]&&K(e.func.args[0]))return e.func.args[0].token.value;if(!S(e)||!E(e,F.___drop)||e.args.length<1)return;let t=e.args[0];if(!(!t||!K(t)))return t.token.value}function dl(e){if(e){if(Xn(e))return e;if(S(e)){let t=e;for(let n of t.args){let r=dl(n);if(r)return r}}}}var Wt=Z(()=>{mt();fi();qt();Te();Ne();Zr();at();Fe();pl()});function Ed(e){E_=e}function G(e,t,n){if(!E_)throw new Error("Internal Error: generateExpr function is not set.");return E_(e,t,n)}var E_,yn=Z(()=>{});function To(e,t,n){let r=B(t)&&t.resolvedConcreteType?t.resolvedConcreteType:t;if(!ht(r))return"";if(ut(r)){let i=r.length;if(!Rt(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=To(`(${e}).data[i]`,r.childType,n);return a&&o.emitLine(` ${a};`),o.emitLine("}"),""}if(gt(r)){let i=n.emitter;for(let o=0;o<r.fields.length;o++){let a=r.fields[o].type,s=B(a)&&a.resolvedConcreteType?a.resolvedConcreteType:a;if(ht(s)){let l=To(`(${e})._${o}`,a,n);l&&i.emitLine(`${l};`)}}return""}if(dt(r))return`__yo_decr_rc((void*)(${e}).data)`;if(pn(r))return`__yo_decr_rc((void*)(${e}))`;if(Vn(r))return`__yo_decr_rc_atomic((void*)(${e}))`;if(Nn(r))return`__yo_decr_rc_atomic((void*)(${e}))`;if(Ue(r)||Ze(r)){let i=io(r,n);if(i)return`${i}(${e})`}return""}function as(e,t,n){let r=B(t)&&t.resolvedConcreteType?t.resolvedConcreteType:t;if(ut(r)){let i=r.length;if(!Rt(i))return"/* Error: array has non-constant length */";let o=`temp_dup_${Lt("")}`,a=`i_${Lt("")}`,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=as(`${o}.data[${a}]`,r.childType,n);return l.emitLine(` ${o}.data[${a}] = ${u};`),l.emitLine("}"),o}if(gt(r)){let i=n.emitter,o=`temp_dup_tuple_${Lt("")}`,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=B(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(ht(u)){let c=as(`${o}._${s}`,l,n);i.emitLine(`${o}._${s} = ${c};`)}}return o}if(dt(r))return`((${H(r,n)}){ .data = __yo_incr_rc((void*)(${e}).data), .vtable = (${e}).vtable })`;if(pn(r))return`((${H(r,n)})__yo_incr_rc((void*)(${e})))`;if(Vn(r))return`((${H(r,n)})__yo_incr_rc_atomic((void*)(${e})))`;if(Nn(r))return`((${H(r,n)})__yo_incr_rc_atomic((void*)(${e})))`;if(Ue(r)||Ze(r)){let i=ri(r,n);if(i)return`${i}(${e})`}return e}function io(e,t){var n;if(Ue(e)||Ze(e)||dt(e)||B(e)||Vn(e)||Nn(e)){let r=e.trait.fields.find(i=>i.label===F.___drop[0]);if(r&&r.assignedValue&&we(r.assignedValue))return(n=t.functions[r.assignedValue.funcId])==null?void 0:n.cName}}function ri(e,t){var n;if(Ue(e)||Ze(e)||dt(e)||B(e)||Vn(e)||Nn(e)){let r=e.trait.fields.find(i=>i.label===F.___dup[0]);if(r&&r.assignedValue&&we(r.assignedValue))return(n=t.functions[r.assignedValue.funcId])==null?void 0:n.cName}}function Ln(e,t,n){var i;let r=n.emitter;if((i=e.$)!=null&&i.deferredDropExpressions)for(let o of e.$.deferredDropExpressions){if(n.shortCircuitHandledDropVarNames){let s=qr(o);if(s&&n.shortCircuitHandledDropVarNames.has(s)){n.shortCircuitHandledDropVarNames.delete(s);continue}}let a=G(o,t,n);a&&r.emitLine(`${t}${a};`)}}function Jt(e,t,n){var i;let r=n.emitter;if((i=e.$)!=null&&i.deferredDupExpressions){for(let o of e.$.deferredDupExpressions)if(S(o)){let a=G(o,t,n);a&&r.emitLine(`${t}${a};`)}}}var kr=Z(()=>{Te();Ne();at();Cn();Fe();Wt();yn()});function lr(e,t,n){var r,i,o,a,s,l,u,c;if(Rt(e)){let _=(typeof e.value=="bigint",e.value.toString());return e.tag==="F32"?(_.includes(".")?_:_+".0")+"f":e.tag==="F64"||e.tag==="ComptimeFloat"?_.includes(".")?_:_+".0":e.tag==="U64"||e.tag==="Usize"?_+"ULL":e.tag==="I64"||e.tag==="Isize"?_+"LL":e.tag==="U32"?_+"U":_}else{if(It(e))return e.value?"true":"false";if(ct(e)){let _=((r=n==null?void 0:n.$)==null?void 0:r.convertedRuntimeType)||((i=n==null?void 0:n.$)==null?void 0:i.type);if(_&&Gr(_)&&_.fields.length===1){let f=_.fields[0].type;if(Vt(f)){let p=H(_,t),d=JSON.stringify(e.value),g=Buffer.byteLength(e.value,"utf8");return`(${p}){ .data = (uint8_t*)${d}, .length = ${g} }`}}if(_&&Vt(_)){let f=H(_,t),p=JSON.stringify(e.value),d=Buffer.byteLength(e.value,"utf8");return`(${f}){ .data = (uint8_t*)${p}, .length = ${d} }`}if(!_||fn(_)){for(let f of Object.values(t.types))if(Gr(f.type)&&f.type.fields.length===1&&Vt(f.type.fields[0].type)){let p=JSON.stringify(e.value),d=Buffer.byteLength(e.value,"utf8");return`(${f.cName}){ .data = (uint8_t*)${p}, .length = ${d} }`}}return JSON.stringify(e.value)}else if(Pn(e)){let _=e.type,f=rr(_);if(f){let m=_.variants.find(h=>h.name===e.variantName);if(!m)return`// Error: Variant ${e.variantName} not found in enum`;if(!m.fields||m.fields.length===0)return"NULL";if(m.fields.length===1&&e.fields.length===1)return lr(e.fields[0],t,{$:{type:f,convertedRuntimeType:f}})}if(ni(_))return er(_,e.variantName,t);let d=(o=t.types[_.id])==null?void 0:o.cName;if(!d)return`// Error: No C type name found for enum ${M(_)}`;let g=er(_,e.variantName,t);if(!e.fields||e.fields.length===0)return`(${d}){ .tag = ${g} }`;{let m=_.variants.find(v=>v.name===e.variantName);if(!m||!m.fields)return`// Error: Variant ${e.variantName} not found or has no fields`;let h=e.fields.map((v,T)=>{let $=m.fields[T];if($&&!We($.type)){let b=Ae($.label),w=lr(v,t);return`.${b} = ${w}`}return null}).filter(v=>v!==null);return h.length===0?`(${d}){ .tag = ${g} }`:`(${d}){ .tag = ${g}, .data = { .${e.variantName} = { ${h.join(", ")} } } }`}}else if(Pr(e)){let _=e.type,f=(a=t.types[_.id])==null?void 0:a.cName;if(!f)return`// Error: No C type name found for tuple ${M(_)}
194
+ registered type IDs: ${Object.keys(t.types).filter(f=>f.startsWith("sometype")).join(", ")}`)}return tr(u)&&u.resolvedConcreteType||u.resolvedConcreteType?H(u.resolvedConcreteType,t):"void*"}case"Ptr":{let c=e.childType;if(Vt(c)){let p=H(c.childType,t),d=`Slice_${Le(p)}`;return t.sliceStructTypes.has(d)||t.sliceStructTypes.set(d,{childType:p}),`${d}*`}let _=H(c,t);return pn(c)?`${_}*`:Ze(c)&&rr(c)?`${_}*`:`${_}*`}case"Iso":{let u=e,c=u.childType,_=H(c,t),f=_.replace(/\*/g,"").trim(),p=`Iso_${Le(f)}`;return t.isoTypes||(t.isoTypes=new Map),t.isoTypes.has(p)||t.isoTypes.set(p,{childTypeCName:_,isoType:u}),p}case"Arc":{let u=e,c=u.childType,_=H(c,t),f=_.replace(/\*/g,"").trim(),p=`Arc_${Le(f)}`;return t.arcTypes||(t.arcTypes=new Map),t.arcTypes.has(p)||t.arcTypes.set(p,{childTypeCName:_,arcType:u}),p}}return`// Unknown type: ${M(e)}`}function an(e,t,n){let r=Le(t);return`${H(e,n)} ${r}`}function er(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} (${M(e)})`);return`${r.toUpperCase()}_${t.toUpperCase()}`}function Ro(e){return e.type.return.isCompileTimeOnly}function ro(e){let t=e.body,n=null;return S(t)&&E(t,"begin")&&t.args.length===1&&S(t.args[0])&&E(t.args[0],va)?n=t.args[0].func.token.value:S(t)&&E(t,va)&&(n=t.func.token.value),n&&F.__yo_as.includes(n)?null:n}function rr(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(ot(i)){if(n)return null;n=r}else return null}else return null;return t&&n&&n.fields?n.fields[0].type:null}function ni(e){for(let t of e.variants)if(t.fields&&t.fields.length>0)return!1;return e.variants.length>0}function Qe(e,t){if(!t)return Le(e);let n=fe(t,e);if(n.length>0){let r=n[n.length-1];return Le(r.name,r.type.isExtern==="c")}return Le(e)}function Zu(e){if(S(e)&&e.args.length>=1){let t=e.args[0];if(t&&K(t))return t.token.value}if(S(e)&&e.args.length===0&&S(e.func)&&E(e.func,".",2)&&K(e.func.args[0])&&K(e.func.args[1])&&e.func.args[1].token.value===F.___dup[0])return e.func.args[0].token.value}function qr(e){if(S(e)&&e.args.length===0&&S(e.func)&&E(e.func,".",2)&&K(e.func.args[1])&&e.func.args[1].token.value===F.___drop[0]&&K(e.func.args[0]))return e.func.args[0].token.value;if(!S(e)||!E(e,F.___drop)||e.args.length<1)return;let t=e.args[0];if(!(!t||!K(t)))return t.token.value}function dl(e){if(e){if(Xn(e))return e;if(S(e)){let t=e;for(let n of t.args){let r=dl(n);if(r)return r}}}}var Wt=Z(()=>{mt();fi();qt();Te();Ne();Zr();at();Fe();pl()});function Ed(e){E_=e}function G(e,t,n){if(!E_)throw new Error("Internal Error: generateExpr function is not set.");return E_(e,t,n)}var E_,yn=Z(()=>{});function To(e,t,n){let r=B(t)&&t.resolvedConcreteType?t.resolvedConcreteType:t;if(!ht(r))return"";if(ut(r)){let i=r.length;if(!Rt(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=To(`(${e}).data[i]`,r.childType,n);return a&&o.emitLine(` ${a};`),o.emitLine("}"),""}if(gt(r)){let i=n.emitter;for(let o=0;o<r.fields.length;o++){let a=r.fields[o].type,s=B(a)&&a.resolvedConcreteType?a.resolvedConcreteType:a;if(ht(s)){let l=To(`(${e})._${o}`,a,n);l&&i.emitLine(`${l};`)}}return""}if(dt(r))return`__yo_decr_rc((void*)(${e}).data)`;if(pn(r))return`__yo_decr_rc((void*)(${e}))`;if(Vn(r))return`__yo_decr_rc_atomic((void*)(${e}))`;if(Nn(r))return`__yo_decr_rc_atomic((void*)(${e}))`;if(Ue(r)||Ze(r)){let i=io(r,n);if(i)return`${i}(${e})`}return""}function as(e,t,n){let r=B(t)&&t.resolvedConcreteType?t.resolvedConcreteType:t;if(ut(r)){let i=r.length;if(!Rt(i))return"/* Error: array has non-constant length */";let o=`temp_dup_${Lt("")}`,a=`i_${Lt("")}`,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=as(`${o}.data[${a}]`,r.childType,n);return l.emitLine(` ${o}.data[${a}] = ${u};`),l.emitLine("}"),o}if(gt(r)){let i=n.emitter,o=`temp_dup_tuple_${Lt("")}`,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=B(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(ht(u)){let c=as(`${o}._${s}`,l,n);i.emitLine(`${o}._${s} = ${c};`)}}return o}if(dt(r))return`((${H(r,n)}){ .data = __yo_incr_rc((void*)(${e}).data), .vtable = (${e}).vtable })`;if(pn(r))return`((${H(r,n)})__yo_incr_rc((void*)(${e})))`;if(Vn(r))return`((${H(r,n)})__yo_incr_rc_atomic((void*)(${e})))`;if(Nn(r))return`((${H(r,n)})__yo_incr_rc_atomic((void*)(${e})))`;if(Ue(r)||Ze(r)){let i=ri(r,n);if(i)return`${i}(${e})`}return e}function io(e,t){var n;if(Ue(e)||Ze(e)||dt(e)||B(e)||Vn(e)||Nn(e)){let r=e.trait.fields.find(i=>i.label===F.___drop[0]);if(r&&r.assignedValue&&we(r.assignedValue))return(n=t.functions[r.assignedValue.funcId])==null?void 0:n.cName}}function ri(e,t){var n;if(Ue(e)||Ze(e)||dt(e)||B(e)||Vn(e)||Nn(e)){let r=e.trait.fields.find(i=>i.label===F.___dup[0]);if(r&&r.assignedValue&&we(r.assignedValue))return(n=t.functions[r.assignedValue.funcId])==null?void 0:n.cName}}function Ln(e,t,n){var i;let r=n.emitter;if((i=e.$)!=null&&i.deferredDropExpressions)for(let o of e.$.deferredDropExpressions){if(n.shortCircuitHandledDropVarNames){let s=qr(o);if(s&&n.shortCircuitHandledDropVarNames.has(s)){n.shortCircuitHandledDropVarNames.delete(s);continue}}let a=G(o,t,n);a&&r.emitLine(`${t}${a};`)}}function Jt(e,t,n){var i;let r=n.emitter;if((i=e.$)!=null&&i.deferredDupExpressions){for(let o of e.$.deferredDupExpressions)if(S(o)){let a=G(o,t,n);a&&r.emitLine(`${t}${a};`)}}}var kr=Z(()=>{Te();Ne();at();Cn();Fe();Wt();yn()});function lr(e,t,n){var r,i,o,a,s,l,u,c;if(Rt(e)){let _=(typeof e.value=="bigint",e.value.toString());return e.tag==="F32"?(_.includes(".")?_:_+".0")+"f":e.tag==="F64"||e.tag==="ComptimeFloat"?_.includes(".")?_:_+".0":e.tag==="U64"||e.tag==="Usize"?_+"ULL":e.tag==="I64"||e.tag==="Isize"?_+"LL":e.tag==="U32"?_+"U":_}else{if(It(e))return e.value?"true":"false";if(ct(e)){let _=((r=n==null?void 0:n.$)==null?void 0:r.convertedRuntimeType)||((i=n==null?void 0:n.$)==null?void 0:i.type);if(_&&Gr(_)&&_.fields.length===1){let f=_.fields[0].type;if(Vt(f)){let p=H(_,t),d=JSON.stringify(e.value),g=Buffer.byteLength(e.value,"utf8");return`(${p}){ .data = (uint8_t*)${d}, .length = ${g} }`}}if(_&&Vt(_)){let f=H(_,t),p=JSON.stringify(e.value),d=Buffer.byteLength(e.value,"utf8");return`(${f}){ .data = (uint8_t*)${p}, .length = ${d} }`}if(!_||fn(_)){for(let f of Object.values(t.types))if(Gr(f.type)&&f.type.fields.length===1&&Vt(f.type.fields[0].type)){let p=JSON.stringify(e.value),d=Buffer.byteLength(e.value,"utf8");return`(${f.cName}){ .data = (uint8_t*)${p}, .length = ${d} }`}}return JSON.stringify(e.value)}else if(Pn(e)){let _=e.type,f=rr(_);if(f){let m=_.variants.find(h=>h.name===e.variantName);if(!m)return`// Error: Variant ${e.variantName} not found in enum`;if(!m.fields||m.fields.length===0)return"NULL";if(m.fields.length===1&&e.fields.length===1)return lr(e.fields[0],t,{$:{type:f,convertedRuntimeType:f}})}if(ni(_))return er(_,e.variantName,t);let d=(o=t.types[_.id])==null?void 0:o.cName;if(!d)return`// Error: No C type name found for enum ${M(_)}`;let g=er(_,e.variantName,t);if(!e.fields||e.fields.length===0)return`(${d}){ .tag = ${g} }`;{let m=_.variants.find(v=>v.name===e.variantName);if(!m||!m.fields)return`// Error: Variant ${e.variantName} not found or has no fields`;let h=e.fields.map((v,T)=>{let $=m.fields[T];if($&&!We($.type)){let b=Le($.label),w=lr(v,t);return`.${b} = ${w}`}return null}).filter(v=>v!==null);return h.length===0?`(${d}){ .tag = ${g} }`:`(${d}){ .tag = ${g}, .data = { .${e.variantName} = { ${h.join(", ")} } } }`}}else if(Pr(e)){let _=e.type,f=(a=t.types[_.id])==null?void 0:a.cName;if(!f)return`// Error: No C type name found for tuple ${M(_)}
195
195
  `;let p=e.fields.map((d,g)=>{let m=lr(d,t);return`._${g} = ${m}`});return`(${f}){ ${p.join(", ")} }`}else if(gr(e)){let _=e.type;if(_&&Ue(_)){let f=(s=t.types[_.id])==null?void 0:s.cName;if(!f)return`// Error: No C type name found for struct ${M(_)}
196
- `;if(_.isNewtype&&_.fields.length===1&&e.fields.length===1){let p=lr(e.fields[0],t);return`((${f})(${p}))`}if(_.isReferenceSemantics){let p=e.fields.map(g=>lr(g,t));return`${`__yo_new_${f}`}(${p.join(", ")})`}else{let p=e.fields.map((d,g)=>{let m=d,h=gt(_)?`_${g}`:Ae(_.fields[g].label),v=lr(m,t);return`.${h} = ${v}`});return`(${f}){ ${p.join(", ")} }`}}}else if(Jr(e)){let _=e.type,f=H(_,t),p=e.elements.map(d=>lr(d,t));return`(${f}){ .data = { ${p.join(", ")} } }`}else if(we(e)){let _=(l=t.functions[e.funcId])==null?void 0:l.cName;return _||`// Error: No C function name found for function value with ID ${e.funcId}
197
- `}else if(Y(e)){let _=e.value;if(_)return t.types[_.id]?t.types[_.id].cName:`/* Error: No C type name found for type ${M(_)} */`}else if(Da(e)){let _=e.targetValue[0];if(_){let f=((u=n==null?void 0:n.$)==null?void 0:u.convertedRuntimeType)||((c=n==null?void 0:n.$)==null?void 0:c.type);if(f&&ot(f)){let p=f.childType,d=lr(_,t,{$:{type:p,convertedRuntimeType:p}});if(d&&!d.startsWith("/*")&&!d.startsWith("//"))return`(&${d})`}}return`/* Error: Cannot generate pointer value ${Ct(e)} */`}}return`/* skip generating: ${Ct(e)} */`}var ss=Z(()=>{Ne();at();Fe();ur();Wt()});function ls(e,t,n){if(e===t)return!0;if(e.tag==="FnCall"){if(n&&n(e))return!1;if(ls(e.func,t,n))return!0;for(let r of e.args)if(ls(r,t,n))return!0}return!1}function Db(e,t,n){for(let r=0;r<t.length;r++)if(ls(e,t[r].expr,n))return r;return-1}function $d(e,t,n){let r=[],i=n==null?void 0:n.shouldSkipBody;if(e.tag!=="FnCall"||!E(e,"begin"))return t.length===0?[{stateNumber:0,expressions:[e],suspensionPoint:null}]:[{stateNumber:0,expressions:[e],suspensionPoint:t[0]??null}];let o=e.args,a=[],s=[];for(let l of o){let u=Db(l,t,i),c=(n==null?void 0:n.handleReturnStatements)&&(En(l,"return")||E(l,"return"));if(u!==-1){if(s.push(l),a.push(s),s=[],n!=null&&n.handleSequentialSuspensions)for(let _=u+1;_<t.length&&ls(l,t[_].expr,i);_++)a.push([])}else if(c){s.push(l),a.push(s),s=[];break}else s.push(l)}s.length>0&&a.push(s);for(let l=0;l<a.length;l++){let u=a[l],c=l<t.length?t[l]:null;r.push({stateNumber:l,expressions:u,suspensionPoint:c})}return r}var bd=Z(()=>{Te()});function b_(e,t){let r=$d(e,t,{shouldSkipBody:Xn,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 Mb(e,t){return ls(e,t,Xn)}function Cd(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&&Mb(a,e.awaitPoint.expr),u=e.awaitPoint&&a.tag==="FnCall"&&(E(a,R.while)||E(a,R.cond)||E(a,R.match))&&Cr(a);if((l||u)&&e.awaitPoint)fs(a,e.awaitPoint,e.stateNumber,t,n);else if(s&&r){let c=G(a,t,n);c&&(i.emitLine(`${t}// Store final expression result`),i.emitLine(`${t}sm->result = ${c};`))}else{let c=G(a,t,n);!c||!a.$||tn(a.$.env.modulePath,c)||i.emitLine(`${t}${c};`)}}}function fs(e,t,n,r,i){var a,s;let o=i.emitter;if(e.tag==="FnCall"&&Vr(e)){let l=e.args[0];if(!l){o.emitLine(`${r}// Error: await without argument`);return}if(t.futureVariableId===void 0){let u=G(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"&&E(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"&&Vr(u)){let c=u.args[0];if(!c){o.emitLine(`${r}// Error: await without argument`);return}let _=(a=l.token)==null?void 0:a.value;if(!_||!l.$){o.emitLine(`${r}// Error: Invalid variable name`);return}if(t.futureVariableId===void 0){let f=G(c,r,i);o.emitLine(`${r}// Store Future for await (variable: ${_})`),o.emitLine(`${r}sm->await_future_${t.index} = ${f};`)}else o.emitLine(`${r}// Store Future for await (variable: ${_}) - future already in state machine`);return}if(u.tag==="FnCall"&&E(u,R.cond)){let c;if(l.tag==="Atom"&&l.token.type==="identifier"&&l.$){let _=l.token.value,f=fe(l.$.env,_);f.length>0&&(c=f[f.length-1].id)}ml(u,t,r,i,c);return}if(u.tag==="FnCall"&&E(u,R.match)){let c;if(l.tag==="Atom"&&l.token.type==="identifier"&&l.$){let _=l.token.value,f=fe(l.$.env,_);f.length>0&&(c=f[f.length-1].id)}yl(u,t,r,i,c);return}}if(e.tag==="FnCall"&&E(e,"=")){let l=e.args[0],u=e.args[1];if(l&&u){if(u.tag==="FnCall"&&E(u,R.cond)){let c=G(l,r,i);ml(u,t,r,i,void 0,c||void 0);return}if(u.tag==="FnCall"&&E(u,R.match)){let c=G(l,r,i);yl(u,t,r,i,void 0,c||void 0);return}}}if(e.tag==="FnCall"&&E(e,R.cond)){ml(e,t,r,i);return}if(e.tag==="FnCall"&&E(e,R.match)){yl(e,t,r,i);return}if(e.tag==="FnCall"&&E(e,R.while)){C_(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 ml(e,t,n,r,i,o){var m,h,v,T,$,b,w,C,k,A,N,x,V,I,D,P;let a=r.emitter;if(e.tag!=="FnCall"||!E(e,R.cond)){a.emitLine(`${n}// Error: Expected cond expression`);return}let s=e.args;if(s.length===0){a.emitLine(`${n}// Error: cond must have at least one branch`);return}let l=[],u=-1;for(let O=0;O<s.length;O++){let J=s[O];if(J.tag==="FnCall"&&E(J,"=>")){let U=J.args[0];if(U&&!(It((m=U.$)==null?void 0:m.value)&&U.$.value.value===!1)){u=O;break}}}let c=!1;if(u>=0){let O=s[u];if(O.tag==="FnCall"&&E(O,"=>")){let J=O.args[0];J&&It((h=J.$)==null?void 0:h.value)&&J.$.value.value===!0&&(c=!0)}}if(c&&u>=0){let O=s[u],J=S(O)?O.args[1]:void 0;if(J)if(Po(J)){let j=_s(J,t,n,r),ue=(v=r.asyncWhileLoopInfo)==null?void 0:v.get(t.index);if(ue&&j.length>0){let ye=(T=r.asyncCondBranchInfo)==null?void 0:T.get(t.index),X=(ye==null?void 0:ye.branches.some(re=>re.hasAwait&&re.remainingExprs&&re.remainingExprs.length>0))??!1;ue.condBranchPostWhileExprs={branchIndex:u,condBranchFieldIndex:t.index,exprs:j,deferredDropExpressions:($=J.$)==null?void 0:$.deferredDropExpressions,skipCondBranchCheck:X},l.push({index:u,value:J,hasAwait:!0,remainingExprs:[],deferredDropExpressions:(b=J.$)==null?void 0:b.deferredDropExpressions})}else l.push({index:u,value:J,hasAwait:!0,remainingExprs:j,deferredDropExpressions:(w=J.$)==null?void 0:w.deferredDropExpressions})}else{if(us(e,J,r,i,o))cs(J,n,r);else if(S(J)&&E(J,R.begin)){let j=J.args;for(let ue=0;ue<j.length;ue++){let ye=j[ue],X=G(ye,n,r);if(X==="break"&&t.isInsideWhile)a.emitLine(`${n}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${n}goto while_loop_${t.index}_end;`);else{let re=X==="break"||X==="continue"||(X==null?void 0:X.includes("return"));X&&(re||ye.$&&!tn(ye.$.env.modulePath,X))&&a.emitLine(`${n}${X};`)}}if((C=J.$)!=null&&C.deferredDropExpressions)for(let ue of J.$.deferredDropExpressions){let ye=G(ue,n,r);ye&&a.emitLine(`${n}${ye};`)}}else{let j=G(J,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||J.$&&!tn(J.$.env.modulePath,j))&&a.emitLine(`${n}${j};`)}}l.push({index:u,value:J,hasAwait:!1})}r.asyncCondBranchInfo||(r.asyncCondBranchInfo=new Map);let U=r.asyncCondBranchInfo.get(t.index);((U==null?void 0:U.branches.some(q=>q.hasAwait&&q.remainingExprs&&q.remainingExprs.length>0))??!1)||r.asyncCondBranchInfo.set(t.index,{branches:l,targetVariableId:i,targetAssignmentCode:o});return}let _=!1,f=0,p=n;for(let O=0;O<s.length;O++){let J=s[O];if(J.tag!=="FnCall"||!E(J,"=>")){a.emitLine(`${p}// Error: Expected => pair in cond`);continue}let U=J.args[0],W=J.args[1];if(!U||!W){a.emitLine(`${p}// Error: Invalid pair in cond`);continue}if(It((k=U.$)==null?void 0:k.value)&&U.$.value.value===!1)continue;_&&(a.emitLine(`${p}else {`),f++,p+=" ");let q=O===s.length-1&&U.tag==="Atom"&&((A=U.token)==null?void 0:A.value)==="true"?null:G(U,p,r);q?a.emitLine(`${p}if (${q}) {`):a.emitLine(`${p}{`),_=!0;let j=`${p} `;if(Po(W)){a.emitLine(`${j}sm->cond_branch_${t.index} = ${O};`);let ye=_s(W,t,j,r),X=(N=r.asyncWhileLoopInfo)==null?void 0:N.get(t.index);if(X&&ye.length>0){let re=(x=r.asyncCondBranchInfo)==null?void 0:x.get(t.index),le=(re==null?void 0:re.branches.some(Oe=>Oe.hasAwait&&Oe.remainingExprs&&Oe.remainingExprs.length>0))??!1;X.condBranchPostWhileExprs={branchIndex:O,condBranchFieldIndex:t.index,exprs:ye,deferredDropExpressions:(V=W.$)==null?void 0:V.deferredDropExpressions,skipCondBranchCheck:le},l.push({index:O,value:W,hasAwait:!0,remainingExprs:[],deferredDropExpressions:(I=W.$)==null?void 0:I.deferredDropExpressions})}else l.push({index:O,value:W,hasAwait:!0,remainingExprs:ye,deferredDropExpressions:(D=W.$)==null?void 0:D.deferredDropExpressions})}else{if(us(e,W,r,i,o))cs(W,j,r);else if(S(W)&&E(W,R.begin)){let ye=W.args;for(let X=0;X<ye.length;X++){let re=ye[X],le=G(re,j,r);if(le==="break"&&t.isInsideWhile)a.emitLine(`${j}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${j}goto while_loop_${t.index}_end;`);else{let Oe=le==="break"||le==="continue"||(le==null?void 0:le.includes("return"));le&&(Oe||re.$&&!tn(re.$.env.modulePath,le))&&a.emitLine(`${j}${le};`)}}if((P=W.$)!=null&&P.deferredDropExpressions)for(let X of W.$.deferredDropExpressions){let re=G(X,j,r);re&&a.emitLine(`${j}${re};`)}}else{let ye=G(W,j,r);if(ye==="break"&&t.isInsideWhile)a.emitLine(`${j}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${j}goto while_loop_${t.index}_end;`);else{let X=ye==="break"||ye==="continue"||(ye==null?void 0:ye.includes("return"));ye&&(X||W.$&&!tn(W.$.env.modulePath,ye))&&a.emitLine(`${j}${ye};`)}}l.push({index:O,value:W,hasAwait:!1})}a.emitLine(`${p}}`)}for(let O=0;O<f;O++)p=p.slice(0,-2),a.emitLine(`${p}}`);r.asyncCondBranchInfo||(r.asyncCondBranchInfo=new Map);let d=r.asyncCondBranchInfo.get(t.index);((d==null?void 0:d.branches.some(O=>O.hasAwait&&O.remainingExprs&&O.remainingExprs.length>0))??!1)||r.asyncCondBranchInfo.set(t.index,{branches:l,targetVariableId:i,targetAssignmentCode:o})}function us(e,t,n,r,i){return!r&&!i&&n.asyncBodyReturnExpr!==void 0&&e===n.asyncBodyReturnExpr&&!!n.inAsyncStateMachine&&!kd(t)}function cs(e,t,n){var o,a;let r=n.emitter,i=We((o=e.$)==null?void 0:o.type);if(S(e)&&E(e,R.begin)){let s=e.args;for(let u=0;u<s.length-1;u++){let c=s[u],_=G(c,t,n);_&&c.$&&!tn(c.$.env.modulePath,_)&&r.emitLine(`${t}${_};`)}let l=s[s.length-1];if(l&&!i){let u=G(l,t,n);u&&r.emitLine(`${t}sm->result = ${u};`)}if((a=e.$)!=null&&a.deferredDropExpressions)for(let u of e.$.deferredDropExpressions){let c=G(u,t,n);c&&r.emitLine(`${t}${c};`)}}else if(!i){let s=G(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=G(s,t,n);l&&l.includes("sm->")&&r.emitLine(`${t}${l};`)}vo({emitter:r,indent:t,resultCode:void 0,debugLabel:n.currentFunctionName}),r.emitLine(`${t}return;`)}function Po(e){if(e.tag==="FnCall"&&Vr(e))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(Po(t))return!0}return!1}function kd(e){if(En(e,"return")||E(e,"return"))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(kd(t))return!0}return!1}function yl(e,t,n,r,i,o){var d,g,m,h,v,T;let a=r.emitter;if(e.tag!=="FnCall"||!E(e,R.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=G(s,n,r),c=(d=s.$)==null?void 0:d.type;if(!c){a.emitLine(`${n}// Error: match value has no type`);return}if((g=e.$)!=null&&g.isPrimitiveMatch){Rb(e,l,u,t,n,r,i,o);return}if(!Ze(c)){a.emitLine(`${n}// Error: match requires an enum type or primitive type`);return}let _=c,f=(m=r.types[_.id])==null?void 0:m.cName;if(!f){a.emitLine(`${n}// Error: enum type has no C name`);return}let p=rr(_);if(p){let $=-1,b=-1,w;for(let C=0;C<l.length;C++){let k=l[C];if(S(k)&&E(k,"=>",2)){let A=k.args[0];if(A&&S(A)&&E(A,"."))$=C;else if(A&&S(A)){let N=A.func;N&&S(N)&&E(N,".")&&(b=C,A.args.length>0&&K(A.args[0])&&(w=A.args[0].token.value))}}}if(a.emitLine(`${n}if (${u} != NULL) {`),b>=0){let C=l[b];if(!S(C))a.emitLine(`${n} // Error: Expected => in case`);else{let k=C.args[1];if(w){let A=r,N=!1,x;if(A.stateMachineVariables){for(let[V,I]of A.stateMachineVariables)if(I.name===w){N=!0,x=V;break}}if(N&&x){let V=dr(x,"local",A.stateMachineFieldAliases);a.emitLine(`${n} sm->${V} = ${u};`)}else a.emitLine(`${n} ${H(p,r)} ${w} = ${u};`)}if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${b};`),Po(k)){let A=_s(k,t,n+" ",r);if(A.length>0){let N=r;N.asyncCondBranchInfo||(N.asyncCondBranchInfo=new Map);let x=N.asyncCondBranchInfo.get(t.index)||{branches:[]};x.branches.push({index:b,value:k,hasAwait:!0,remainingExprs:A,deferredDropExpressions:(h=k.$)==null?void 0:h.deferredDropExpressions}),N.asyncCondBranchInfo.set(t.index,x)}}else if(us(e,k,r,i,o))cs(k,n+" ",r);else{let A=G(k,n+" ",r);if(i){let N=Ae(`var_${i}`);A&&a.emitLine(`${n} sm->${N} = ${A};`)}else o?A&&a.emitLine(`${n} ${o} = ${A};`):A&&k.$&&!tn(k.$.env.modulePath,A)&&a.emitLine(`${n} ${A};`)}}}if(a.emitLine(`${n}} else {`),$>=0){let C=l[$];if(!S(C))a.emitLine(`${n} // Error: Expected => in case`);else{let k=C.args[1];if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${$};`),Po(k)){let A=_s(k,t,n+" ",r);if(A.length>0){let N=r;N.asyncCondBranchInfo||(N.asyncCondBranchInfo=new Map);let x=N.asyncCondBranchInfo.get(t.index)||{branches:[]};x.branches.push({index:$,value:k,hasAwait:!0,remainingExprs:A,deferredDropExpressions:(v=k.$)==null?void 0:v.deferredDropExpressions}),N.asyncCondBranchInfo.set(t.index,x)}}else if(us(e,k,r,i,o))cs(k,n+" ",r);else{let A=G(k,n+" ",r);if(i){let N=Ae(`var_${i}`);A&&a.emitLine(`${n} sm->${N} = ${A};`)}else o?A&&a.emitLine(`${n} ${o} = ${A};`):A&&k.$&&!tn(k.$.env.modulePath,A)&&a.emitLine(`${n} ${A};`)}}}a.emitLine(`${n}}`)}else{a.emitLine(`${n}switch (${u}.tag) {`);let $=!1;for(let b=0;b<l.length;b++){let w=l[b];if(!S(w)||!E(w,"=>",2))continue;let C=w.args[0],k=w.args[1],A=K(C)&&C.token.value==="_",N;if(!A){if(S(C)&&E(C,".",1))N=C.args[0].token.value;else if(S(C)){let x=C.func;x&&S(x)&&E(x,".",1)&&(N=x.args[0].token.value)}}if(!A&&!N){a.emitLine(`${n} // Error: Could not extract variant name`);continue}if(A)$=!0,a.emitLine(`${n} default: {`);else{let x=`${f.toUpperCase()}_${N.toUpperCase()}`;a.emitLine(`${n} case ${x}: {`)}if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${b};`),S(C)&&C.args.length>=1){let x=C.func;if(x&&S(x)&&E(x,".")){let V=_.variants.find(I=>I.name===N);if(V&&V.fields)for(let I=0;I<Math.min(C.args.length,V.fields.length);I++){let D=C.args[I],P=V.fields[I];if(K(D)&&P){let O=D.token.value,J=Ae(O),U=r,W=!1,q;if(U.stateMachineVariables){for(let[ye,X]of U.stateMachineVariables)if(X.name===O){W=!0,q=ye;break}}let j=Ae(P.label,P.type.isExtern==="c"),ue=`${u}.data.${N}.${j}`;if(W&&q){let ye=dr(q,"local",U.stateMachineFieldAliases);a.emitLine(`${n} sm->${ye} = ${ue};`)}else{let ye=H(P.type,r);a.emitLine(`${n} ${ye} ${J} = ${ue};`)}}}}}if(Po(k)){let x=_s(k,t,n+" ",r);if(x.length>0){let V=r;V.asyncCondBranchInfo||(V.asyncCondBranchInfo=new Map);let I=V.asyncCondBranchInfo.get(t.index)||{branches:[]};I.branches.push({index:b,value:k,hasAwait:!0,remainingExprs:x,deferredDropExpressions:(T=k.$)==null?void 0:T.deferredDropExpressions}),V.asyncCondBranchInfo.set(t.index,I)}}else if(us(e,k,r,i,o))cs(k,n+" ",r);else{let x=G(k,n+" ",r);if(i){let V=Ae(`var_${i}`);x&&a.emitLine(`${n} sm->${V} = ${x};`)}else o?x&&a.emitLine(`${n} ${o} = ${x};`):x&&k.$&&!tn(k.$.env.modulePath,x)&&a.emitLine(`${n} ${x};`)}a.emitLine(`${n} break;`),a.emitLine(`${n} }`)}$||a.emitLine(`${n} default: break;`),a.emitLine(`${n}}`)}}function Ob(e){return S(e)?E(e,"|",2):!1}function $_(e){if(!Ob(e))return[e];if(e.tag!=="FnCall")return[e];let t=e.args[0],n=e.args[1];return[...$_(t),...$_(n)]}function Rb(e,t,n,r,i,o,a,s){var c,_,f;let l=o.emitter,u=[];l.emitLine(`${i}switch (${n}) {`);for(let p=0;p<t.length;p++){let d=t[p];if(!S(d)||!E(d,"=>",2))continue;let g=d.args[0],m=d.args[1];if(En(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 T=lr(v,o);l.emitLine(`${i} case ${T}:`)}}else{let v=$_(g);for(let T of v){let $=(_=T.$)==null?void 0:_.value;if($!==void 0){let b=lr($,o);l.emitLine(`${i} case ${b}:`)}}}}if(l.emitLine(`${i} sm->cond_branch_${r.index} = ${p};`),Po(m)){let h=_s(m,r,i+" ",o);u.push({index:p,value:m,hasAwait:!0,remainingExprs:h,deferredDropExpressions:(f=m.$)==null?void 0:f.deferredDropExpressions})}else{if(us(e,m,o,a,s))cs(m,i+" ",o);else{let h=G(m,i+" ",o);if(a){let v=Ae(`var_${a}`);h&&l.emitLine(`${i} sm->${v} = ${h};`)}else s?h&&l.emitLine(`${i} ${s} = ${h};`):h&&m.$&&!tn(m.$.env.modulePath,h)&&l.emitLine(`${i} ${h};`)}u.push({index:p,value:m,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 _s(e,t,n,r){let i=r.emitter,o=[];if(e.tag!=="FnCall"||!E(e,"begin"))return i.emitLine(`${n}// Error: Expected begin block in cond branch with await`),o;let a=e.args,s=!1;for(let l of a){if(s){o.push(l);continue}if(Po(l))if(s=!0,l.tag==="FnCall"&&E(l,":=")){let u=l.args[1];if(u&&u.tag==="FnCall"&&Vr(u)){let c=u.args[0];if(c){let _=G(c,n,r);i.emitLine(`${n}// Store Future for await ${t.index} (cond branch)`),i.emitLine(`${n}sm->await_future_${t.index} = ${_};`)}}}else if(l.tag==="FnCall"&&Vr(l)){let u=l.args[0];if(u)if(t.futureVariableId===void 0){let c=G(u,n,r);i.emitLine(`${n}// Store Future for await ${t.index} (cond branch)`),i.emitLine(`${n}sm->await_future_${t.index} = ${c};`)}else i.emitLine(`${n}// Await will use Future from sm->var_${t.futureVariableId}`)}else if(l.tag==="FnCall"&&E(l,R.cond)){let u=l===a[a.length-1],c=r.asyncBodyReturnExpr;u&&r.asyncBodyReturnExpr!==void 0&&(r.asyncBodyReturnExpr=l),ml(l,t,n,r),r.asyncBodyReturnExpr=c}else if(l.tag==="FnCall"&&E(l,R.match)){let u=l===a[a.length-1],c=r.asyncBodyReturnExpr;u&&r.asyncBodyReturnExpr!==void 0&&(r.asyncBodyReturnExpr=l),yl(l,t,n,r),r.asyncBodyReturnExpr=c}else l.tag==="FnCall"&&E(l,R.while)&&C_(l,t,n,r);else{let u=G(l,n,r);u&&l.$&&!tn(l.$.env.modulePath,u)&&i.emitLine(`${n}${u};`)}}return o}function C_(e,t,n,r){let i=r.emitter;if(e.tag!=="FnCall"||!E(e,"while")){i.emitLine(`${n}// Error: Expected while expression`);return}let o=e.args;if(o.length<2||o.length>3){i.emitLine(`${n}// Error: while must have 2 or 3 arguments (condition, [step,] body)`);return}let a=o[0],s=o.length===3?o[1]:void 0,l=o.length===3?o[2]:o[1],u=zb(l),c;u?(c=r.asyncNextWhileLoopIndex??t.index+1,r.asyncNextWhileLoopIndex=c+1):c=t.index,i.emitLine(`${n}sm->while_loop_${c}_active = true;`),i.emitLine(`${n}while_loop_${c}_start:`);let _=G(a,n,r);i.emitLine(`${n}if (!(${_})) {`),i.emitLine(`${n} sm->while_loop_${c}_active = false;`),i.emitLine(`${n} goto while_loop_${c}_end;`),i.emitLine(`${n}}`);let f=Pb(l,t,n,r,c);if(i.emitLine(`${n}while_loop_${c}_end:`),r.asyncWhileLoopInfo||(r.asyncWhileLoopInfo=new Map),u){let p=r.asyncWhileLoopInfo.get(t.index);p&&(p.outerWhileLoop={whileLoopIndex:c,conditionExpr:a,stepExpr:s,bodyExpr:l,bodyExprsAfterAwait:f})}else r.asyncWhileLoopInfo.set(t.index,{conditionExpr:a,stepExpr:s,bodyExpr:l,bodyExprsAfterAwait:f})}function Pb(e,t,n,r,i){var p;let o=r.emitter,a=[],s=[];e.tag==="FnCall"&&E(e,"begin")?s=e.args:s=[e];let l=-1;for(let d=0;d<s.length;d++){let g=s[d];if(Cr(g)){l=d;break}}if(l===-1)return o.emitLine(`${n}// Error: Expected await in while loop body but none found`),a;let u=r.smWhileBreakInfo,c=r.smWhileContinueInfo,_=r.smWhileBodyDrops;r.smWhileBreakInfo={label:`while_loop_${i}_end`,activeIndex:i},r.smWhileContinueInfo={label:`while_loop_${i}_start`,emitDropsBeforeGoto:!0},r.smWhileBodyDrops=[...((p=e.$)==null?void 0:p.deferredDropExpressions)??[]];for(let d=0;d<l;d++){let g=s[d],m=G(g,n,r);m&&g.$&&!tn(g.$.env.modulePath,m)&&o.emitLine(`${n}${m};`)}r.smWhileBreakInfo=u,r.smWhileContinueInfo=c,r.smWhileBodyDrops=_;let f=s[l];if(S(f)&&E(f,R.while)&&Cr(f)){C_(f,t,n,r);for(let d=l+1;d<s.length;d++)a.push(s[d]);return a}if(S(f)&&E(f,":=")){let d=f.args[1];if(d&&d.tag==="FnCall"&&Vr(d)){let g=d.args[0];if(g){let m=G(g,n,r);o.emitLine(`${n}// Store Future for await ${t.index} (while loop body)`),o.emitLine(`${n}sm->await_future_${t.index} = ${m};`)}}}else if(f.tag==="FnCall"&&Vr(f)){let d=f.args[0];if(d&&t.futureVariableId===void 0){let g=G(d,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(S(f)&&E(f,R.cond)){ml(f,t,n,r,void 0);for(let d=l+1;d<s.length;d++)a.push(s[d]);return a}else if(S(f)&&E(f,R.match)){yl(f,t,n,r);for(let d=l+1;d<s.length;d++)a.push(s[d]);return a}for(let d=l+1;d<s.length;d++)a.push(s[d]);return a}function zb(e){let t=e.tag==="FnCall"&&E(e,"begin")?e.args:[e];for(let n of t)if(n.tag==="FnCall"&&E(n,R.while)&&Cr(n))return!0;return!1}var wd=Z(()=>{mt();fi();Te();Do();gn();Ne();Cn();Fe();ha();ss();yn();bd();zo();Wt()});function Ta(e,t,n){var r,i,o;if(e)switch(e.tag){case"Atom":if(e.$&&e.token.type==="identifier"){let a=e.token.value,s=fe(e.$.env,a);if(s.length>0){let l=s[s.length-1];if(l&&!l.isCompileTimeOnly){let u=n.get(l.id)??l.id,c=l.isOwningTheSameRcValueAs?l.isOwningTheSameRcValueAs.id:u;t.add(c)}}}break;case"FnCall":if(Xn(e)){if((r=e.$)!=null&&r.deferredDupExpressions)for(let a of e.$.deferredDupExpressions)Ta(a,t,n);break}Ta(e.func,t,n);for(let a of e.args)Ta(a,t,n);if((i=e.$)!=null&&i.deferredDropExpressions)for(let a of e.$.deferredDropExpressions)Ta(a,t,n);if((o=e.$)!=null&&o.deferredDupExpressions)for(let a of e.$.deferredDupExpressions)Ta(a,t,n);break}}function Ju(e,t){var _,f,p,d;let{awaitPoints:n,capturedVariables:r,variableIdRemapping:i}=t;if(n.length===0)return{crossBoundaryIds:new Set,awaitFutureTempVarAliases:new Map,variableSegments:new Map};let o=new Set,a=b_(e,n);for(let g of a)((_=g.awaitPoint)!=null&&_.isInsideCond||(f=g.awaitPoint)!=null&&f.isInsideWhile)&&o.add(g.stateNumber);let s=new Map;for(let g of a){let m=new Set;for(let h of g.expressions)Ta(h,m,i);for(let h of m){let v=s.get(h);v||(v=new Set,s.set(h,v)),v.add(g.stateNumber)}}let l=-1;if((p=e.$)!=null&&p.deferredDropExpressions){let g=new Set;for(let m of e.$.deferredDropExpressions)Ta(m,g,i);for(let m of g){let h=s.get(m);h||(h=new Set,s.set(m,h)),h.add(l)}}let u=new Set;for(let g of r){if(g.kind==="outer")continue;let m=s.get(g.id);if(!m)u.add(g.id);else if(m.size>1)u.add(g.id);else if(m.has(l))u.add(g.id);else{let h=m.values().next().value;o.has(h)&&u.add(g.id)}}let c=new Map;for(let g of n){if(g.futureVariableId!==void 0)continue;let m=g.expr;if(!S(m))continue;let h=m.args[0];if(!h)continue;let v=(d=h.$)==null?void 0:d.variableName;if(!v)continue;let T=r.find($=>$.kind==="local"&&($.name===v||$.id===v));T&&(c.set(T.id,`await_future_${g.index}`),u.delete(T.id))}return{crossBoundaryIds:u,awaitFutureTempVarAliases:c,variableSegments:s}}function ec(e,t,n,r,i){let o={slotAliases:new Map,slots:[]},a=n.filter(f=>f.kind==="local"&&e.has(f.id)&&!r.has(f.id)&&!ht(f.type));if(a.length<2)return o;let s=new Map;for(let f of a){let p=t.get(f.id);if(!p||p.size===0)continue;let d=[...p].filter(h=>h>=0);if(d.length===0)continue;let g=Math.min(...d),m=Math.max(...d);s.set(f.id,[g,m])}if(s.size<2)return o;let l=new Map;for(let[f]of s){let p=a.find(m=>m.id===f);if(!p)continue;let d=H(p.type,i),g=l.get(d);g||(g=[],l.set(d,g)),g.push(f)}let u=new Map,c=[],_=0;for(let[f,p]of l){if(p.length<2)continue;let d=new Map;for(let h of p)d.set(h,new Set);for(let h=0;h<p.length;h++)for(let v=h+1;v<p.length;v++){let[T,$]=s.get(p[h]),[b,w]=s.get(p[v]);T<=w&&b<=$&&(d.get(p[h]).add(p[v]),d.get(p[v]).add(p[h]))}let g=new Map;for(let h of p){let v=new Set;for(let $ of d.get(h))g.has($)&&v.add(g.get($));let T=0;for(;v.has(T);)T++;g.set(h,T)}let m=new Map;for(let[h,v]of g){let T=m.get(v);T||(T=[],m.set(v,T)),T.push(h)}for(let[,h]of m){if(h.length<2)continue;let v=`slot_${_}`,T=h.map($=>{var b;return((b=a.find(w=>w.id===$))==null?void 0:b.name)??$});for(let $ of h)u.set($,v);c.push({fieldName:v,cType:f,variableNames:T}),_++}}return{slotAliases:u,slots:c}}function w_(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 gl(e){return!e||!B(e)?!1:e.resolvedConcreteType&&B(e.resolvedConcreteType)&&e.resolvedConcreteType.isExtern?!0:e.requiredTraits.some(t=>Qu(t.traitType))}function dr(e,t,n){if(t==="outer")return`__capture.${Ae(e)}`;let r=n==null?void 0:n.get(e);return r||Ae(`var_${e}`)}function Ld(e,t,n,r,i,o,a,s){var m,h,v,T,$,b,w,C,k,A,N,x,V,I,D,P,O,J,U,W,q,j,ue,ye,X,re,le;let l=s.emitter,c=Wn(o).isFuture.outputType,_=We(c);s.asyncCondBranchInfo=new Map,s.asyncWhileLoopInfo=new Map,s.asyncNextWhileLoopIndex=i.awaitPoints.length;let f=b_(e,i.awaitPoints),p=e.tag==="FnCall"&&E(e,"begin")?e.args:[e],d=p.length>0?p[p.length-1]:void 0;l.emitLine(`// Resume function for async block ${t}`),l.emitLine(`void ${r}(${n}* sm) {`),l.emitLine(` ASYNC_DEBUG("${t}_resume: state=%d\\n", sm->state);`),l.emitLine(" switch (sm->state) {");let g=[];for(let Oe=0;Oe<f.length;Oe++){let $e=f[Oe];if(!$e)continue;let ae=$e.stateNumber,Le=Oe===f.length-1;if(l.emitLine(`
198
- state_${ae}:`),l.emitLine(` case ${ae}: { // State ${ae}`),l.emitLine(` ASYNC_DEBUG("${t}: Entering state ${ae}\\n");`),ae>0&&i.awaitPoints[ae-1]){let lt=i.awaitPoints[ae-1],kt=w_(lt,i);lt.isInsideCond&&l.emitLine(` if (sm->${kt} != NULL) {`);let kn=We(lt.resultType)||B(lt.resultType)&&!lt.resultType.resolvedConcreteType;if(l.emitLine(" // Check if the awaited Future was aborted"),l.emitLine(` if (sm->${kt}->state == -2) {`),l.emitLine(` __yo_decr_rc((void*)sm->${kt});`),l.emitLine(` sm->${kt} = NULL;`),ai({emitter:l,indent:" ",debugLabel:t}),l.emitLine(" }"),lt&&!kn){l.emitLine(` // Extract result from await ${ae-1}`),l.emitLine(` int state_before_read = sm->${kt}->state;`),l.emitLine(` ASYNC_DEBUG("${t}: Reading result from await ${ae-1}, state=%d\\n", state_before_read);`);let je=!!lt.isInsideCond,Be;if(je?Be=`sm->await_result_${ae-1}`:lt.targetVariableId&&(Be=`sm->${dr(lt.targetVariableId,"local",s.stateMachineFieldAliases)}`),Be)if(ht(lt.resultType)){let tt=ri(lt.resultType,s);tt?l.emitLine(` ${Be} = ${tt}(sm->${kt}->result);`):(l.emitLine(" /* Warning: No ___dup function found for result type, shallow copy may cause use-after-free */"),l.emitLine(` ${Be} = sm->${kt}->result;`))}else l.emitLine(` ${Be} = sm->${kt}->result;`);if(je&&lt.targetVariableId){let tt=dr(lt.targetVariableId,"local",s.stateMachineFieldAliases);l.emitLine(` sm->${tt} = sm->await_result_${ae-1};`)}l.emitLine("")}if(!lt.futureVariableId){let je=lt.expr;if(je.tag==="FnCall"){let Be=je.args[0],tt=(m=Be==null?void 0:Be.$)==null?void 0:m.type;tt&&(B(tt)||dt(tt))&&(l.emitLine(` if (sm->${kt} != NULL) { __yo_decr_rc((void*)sm->${kt}); sm->${kt} = NULL; }`),l.emitLine(""))}}let Ot=s;if(lt){let je=(h=Ot.asyncCondBranchInfo)==null?void 0:h.get(lt.index);if(je&&je.branches.some(tt=>tt.hasAwait)){let tt=je.condBranchFieldIndex??lt.index,Bt=tt===-1;l.emitLine(" // Execute remaining code from chosen cond branch"),Bt||l.emitLine(` switch (sm->cond_branch_${tt}) {`);let jn=((v=$e.awaitPoint)==null?void 0:v.isInsideCond)??!1;for(let Xt of je.branches)if(Xt.hasAwait){if(Bt||l.emitLine(` case ${Xt.index}: {`),l.emitLine(` ASYNC_DEBUG("${t}: Executing remaining code from branch ${Xt.index}\\n");`),Xt.remainingExprs&&Xt.remainingExprs.length>0){let Sn=s.inAsyncStateMachine,te=s.stateMachineVariables,ve=s.variableIdRemapping,_e=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let Ce=(T=Ot.asyncWhileLoopInfo)==null?void 0:T.get(lt.index);s.pendingDeferredDrops=[...Xt.deferredDropExpressions??[],...(($=Ce==null?void 0:Ce.bodyExpr.$)==null?void 0:$.deferredDropExpressions)??[],...((b=e.$)==null?void 0:b.deferredDropExpressions)??[]];let xe=new Map;for(let ie of i.capturedVariables)xe.set(ie.id,ie);if(a)for(let ie of a.fields)xe.set(ie.label,{id:ie.label,name:ie.label,type:ie.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=xe;let Pe=!1,st=[],Je=je.targetAssignmentCode;for(let ie=0;ie<Xt.remainingExprs.length;ie++){let ee=Xt.remainingExprs[ie],Q=ie===Xt.remainingExprs.length-1;if(Pe){st.push(ee);continue}if(jn&&Cr(ee)){Pe=!0,k_(ee,$e.awaitPoint,i," ",s);continue}let oe=G(ee," ",s);!oe||!ee.$||tn(ee.$.env.modulePath,oe)||(Q&&Je?l.emitLine(` ${Je} = ${oe};`):l.emitLine(` ${oe};`))}if(Xt.remainingExprs.length===0&&Je&&l.emitLine(` ${Je} = sm->await_result_${lt.index};`),Pe&&$e.awaitPoint){let ie=$e.awaitPoint.index;Ot.asyncCondBranchInfo||(Ot.asyncCondBranchInfo=new Map);let ee=Ot.asyncCondBranchInfo.get(ie);if(ee)ee.chainedBranches||(ee.chainedBranches=[]),ee.chainedBranches.push({branches:[{index:Xt.index,value:Xt.value,hasAwait:st.length>0||st.some(Q=>Cr(Q)),remainingExprs:st,deferredDropExpressions:Xt.deferredDropExpressions}],condBranchFieldIndex:tt});else{let Q={branches:[{index:Xt.index,value:Xt.value,hasAwait:st.length>0||st.some(oe=>Cr(oe)),remainingExprs:st,deferredDropExpressions:Xt.deferredDropExpressions}],condBranchFieldIndex:tt};Ot.asyncCondBranchInfo.set(ie,Q)}}else if(Xt.deferredDropExpressions)for(let ie of Xt.deferredDropExpressions){let ee=G(ie," ",s);ee&&ee.includes("sm->")&&l.emitLine(` ${ee};`)}s.inAsyncStateMachine=Sn,s.stateMachineVariables=te,s.variableIdRemapping=ve,s.pendingDeferredDrops=_e}Bt||(l.emitLine(" break;"),l.emitLine(" }"))}if(Bt||l.emitLine(" }"),je.chainedBranches){for(let Xt of je.chainedBranches)for(let Sn of Xt.branches)if(Sn.hasAwait&&Sn.remainingExprs&&Sn.remainingExprs.length>0){let te=s.inAsyncStateMachine,ve=s.stateMachineVariables,_e=s.variableIdRemapping,Ce=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let xe=(w=Ot.asyncWhileLoopInfo)==null?void 0:w.get(lt.index);s.pendingDeferredDrops=[...Sn.deferredDropExpressions??[],...((C=xe==null?void 0:xe.bodyExpr.$)==null?void 0:C.deferredDropExpressions)??[],...((k=e.$)==null?void 0:k.deferredDropExpressions)??[]];let Pe=new Map;for(let ee of i.capturedVariables)Pe.set(ee.id,ee);if(a)for(let ee of a.fields)Pe.set(ee.label,{id:ee.label,name:ee.label,type:ee.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Pe;let st=((A=$e.awaitPoint)==null?void 0:A.isInsideCond)??!1,Je=!1,ie=[];for(let ee of Sn.remainingExprs){if(Je){ie.push(ee);continue}if(st&&Cr(ee)){Je=!0,k_(ee,$e.awaitPoint,i," ",s);continue}let Q=G(ee," ",s);!Q||!ee.$||tn(ee.$.env.modulePath,Q)||l.emitLine(` ${Q};`)}if(Je&&$e.awaitPoint){let ee=$e.awaitPoint.index;Ot.asyncCondBranchInfo||(Ot.asyncCondBranchInfo=new Map);let Q=Ot.asyncCondBranchInfo.get(ee);Q?(Q.chainedBranches||(Q.chainedBranches=[]),Q.chainedBranches.push({branches:[{index:Sn.index,value:Sn.value,hasAwait:ie.length>0||ie.some(oe=>Cr(oe)),remainingExprs:ie,deferredDropExpressions:Sn.deferredDropExpressions}],condBranchFieldIndex:Xt.condBranchFieldIndex})):Ot.asyncCondBranchInfo.set(ee,{branches:[{index:Sn.index,value:Sn.value,hasAwait:ie.length>0||ie.some(oe=>Cr(oe)),remainingExprs:ie,deferredDropExpressions:Sn.deferredDropExpressions}],condBranchFieldIndex:Xt.condBranchFieldIndex})}else if(Sn.deferredDropExpressions)for(let ee of Sn.deferredDropExpressions){let Q=G(ee," ",s);Q&&Q.includes("sm->")&&l.emitLine(` ${Q};`)}s.inAsyncStateMachine=te,s.stateMachineVariables=ve,s.variableIdRemapping=_e,s.pendingDeferredDrops=Ce}}if(je.targetVariableId){let Xt=dr(je.targetVariableId,"local",s.stateMachineFieldAliases);l.emitLine(" // Assign cond result to target variable"),l.emitLine(` sm->${Xt} = sm->await_result_${lt.index};`)}l.emitLine("")}lt.isInsideCond&&l.emitLine(" }");let Be=(N=Ot.asyncWhileLoopInfo)==null?void 0:N.get(lt.index);if(Be){if(l.emitLine(" // Execute remaining code from while loop body and continue loop"),l.emitLine(` if (sm->while_loop_${lt.index}_active) {`),Be.bodyExprsAfterAwait&&Be.bodyExprsAfterAwait.length>0){let _e=s.inAsyncStateMachine,Ce=s.stateMachineVariables,xe=s.variableIdRemapping,Pe=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...((x=Be.bodyExpr.$)==null?void 0:x.deferredDropExpressions)??[],...((V=e.$)==null?void 0:V.deferredDropExpressions)??[]];let st=new Map;for(let Q of i.capturedVariables)st.set(Q.id,Q);if(a)for(let Q of a.fields)st.set(Q.label,{id:Q.label,name:Q.label,type:Q.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=st;let Je=s.smWhileBreakInfo,ie=s.smWhileContinueInfo,ee=s.smWhileBodyDrops;s.smWhileBreakInfo={label:`after_while_loop_${lt.index}`,activeIndex:lt.index},s.smWhileContinueInfo={label:`while_loop_${lt.index}_continue`},s.smWhileBodyDrops=[...((I=Be.bodyExpr.$)==null?void 0:I.deferredDropExpressions)??[]];for(let Q of Be.bodyExprsAfterAwait){let oe=G(Q," ",s);!oe||!Q.$||tn(Q.$.env.modulePath,oe)||l.emitLine(` ${oe};`)}s.smWhileBreakInfo=Je,s.smWhileContinueInfo=ie,s.smWhileBodyDrops=ee,s.inAsyncStateMachine=_e,s.stateMachineVariables=Ce,s.variableIdRemapping=xe,s.pendingDeferredDrops=Pe}l.emitLine(` while_loop_${lt.index}_continue:`);{let _e=((D=Be.bodyExpr.$)==null?void 0:D.deferredDropExpressions)??[];if(_e.length>0){let Ce=s.inAsyncStateMachine,xe=s.stateMachineVariables,Pe=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let st=new Map;for(let Je of i.capturedVariables)st.set(Je.id,Je);if(a)for(let Je of a.fields)st.set(Je.label,{id:Je.label,name:Je.label,type:Je.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=st;for(let Je of _e){let ie=G(Je," ",s);ie&&ie.includes("sm->")&&l.emitLine(` ${ie};`)}s.inAsyncStateMachine=Ce,s.stateMachineVariables=xe,s.variableIdRemapping=Pe}}l.emitLine(` ASYNC_DEBUG("${t}: Re-evaluating while loop condition\\n");`);let tt=s.declaredTempVars;if(s.declaredTempVars=void 0,Be.stepExpr){let _e=s.inAsyncStateMachine,Ce=s.stateMachineVariables,xe=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let Pe=new Map;for(let Je of i.capturedVariables)Pe.set(Je.id,Je);if(a)for(let Je of a.fields)Pe.set(Je.label,{id:Je.label,name:Je.label,type:Je.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Pe;let st=G(Be.stepExpr," ",s);st&&l.emitLine(` ${st};`),s.inAsyncStateMachine=_e,s.stateMachineVariables=Ce,s.variableIdRemapping=xe}let Bt=s.inAsyncStateMachine,jn=s.stateMachineVariables,Xt=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let Sn=new Map;for(let _e of i.capturedVariables)Sn.set(_e.id,_e);if(a)for(let _e of a.fields)Sn.set(_e.label,{id:_e.label,name:_e.label,type:_e.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Sn;let te=G(Be.conditionExpr," ",s);s.inAsyncStateMachine=Bt,s.stateMachineVariables=jn,s.variableIdRemapping=Xt,s.declaredTempVars=tt,l.emitLine(` if (!(${te})) {`),l.emitLine(` sm->while_loop_${lt.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 ve=lt.index;if(l.emitLine(" // Loop back by transitioning to while loop state"),l.emitLine(` sm->state = ${ve};`),l.emitLine(` goto while_loop_${ve}_start;`),l.emitLine(" }"),l.emitLine(" }"),l.emitLine(""),l.emitLine(` after_while_loop_${lt.index}:`),Be.condBranchPostWhileExprs){let _e=Be.condBranchPostWhileExprs,Ce=_e.condBranchFieldIndex,xe=_e.branchIndex;_e.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_${Ce} == ${xe}) {`));let Pe=s.inAsyncStateMachine,st=s.stateMachineVariables,Je=s.variableIdRemapping,ie=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...((P=e.$)==null?void 0:P.deferredDropExpressions)??[]];let ee=new Map;for(let ge of i.capturedVariables)ee.set(ge.id,ge);if(a)for(let ge of a.fields)ee.set(ge.label,{id:ge.label,name:ge.label,type:ge.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=ee;let Q=$e.awaitPoint!=null,oe=!1,Ge=[];for(let ge=0;ge<_e.exprs.length;ge++){let be=_e.exprs[ge];if(oe){Ge.push(be);continue}if(Q&&Cr(be)){oe=!0,k_(be,$e.awaitPoint,i," ",s);continue}let Ee=G(be," ",s);!Ee||!be.$||tn(be.$.env.modulePath,Ee)||l.emitLine(` ${Ee};`)}if(oe&&$e.awaitPoint){let ge=$e.awaitPoint.index;Ot.asyncCondBranchInfo||(Ot.asyncCondBranchInfo=new Map);let be=_e.skipCondBranchCheck?-1:_e.condBranchFieldIndex,Ee=Ot.asyncCondBranchInfo.get(ge);Ee?(Ee.chainedBranches||(Ee.chainedBranches=[]),Ee.chainedBranches.push({branches:[{index:_e.branchIndex,value:_e.exprs[0],hasAwait:Ge.length>0||Ge.some(ze=>Cr(ze)),remainingExprs:Ge,deferredDropExpressions:_e.deferredDropExpressions}],condBranchFieldIndex:be})):Ot.asyncCondBranchInfo.set(ge,{branches:[{index:_e.branchIndex,value:_e.exprs[0],hasAwait:Ge.length>0||Ge.some(ze=>Cr(ze)),remainingExprs:Ge,deferredDropExpressions:_e.deferredDropExpressions}],condBranchFieldIndex:be})}if(!oe&&_e.deferredDropExpressions)for(let ge of _e.deferredDropExpressions){let be=G(ge," ",s);be&&be.includes("sm->")&&l.emitLine(` ${be};`)}l.emitLine(" }"),s.inAsyncStateMachine=Pe,s.stateMachineVariables=st,s.variableIdRemapping=Je,s.pendingDeferredDrops=ie}if(Be.outerWhileLoop){let _e=Be.outerWhileLoop,Ce=_e.whileLoopIndex;if(l.emitLine(" // Execute remaining code from outer while loop body"),l.emitLine(` if (sm->while_loop_${Ce}_active) {`),_e.bodyExprsAfterAwait.length>0){let Pe=s.inAsyncStateMachine,st=s.stateMachineVariables,Je=s.variableIdRemapping,ie=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...((O=_e.bodyExpr.$)==null?void 0:O.deferredDropExpressions)??[],...((J=e.$)==null?void 0:J.deferredDropExpressions)??[]];let ee=new Map;for(let ge of i.capturedVariables)ee.set(ge.id,ge);if(a)for(let ge of a.fields)ee.set(ge.label,{id:ge.label,name:ge.label,type:ge.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=ee;let Q=s.smWhileBreakInfo,oe=s.smWhileContinueInfo,Ge=s.smWhileBodyDrops;s.smWhileBreakInfo={label:`after_while_loop_${Ce}`,activeIndex:Ce},s.smWhileContinueInfo={label:`while_loop_${Ce}_continue`},s.smWhileBodyDrops=[...((U=_e.bodyExpr.$)==null?void 0:U.deferredDropExpressions)??[]];for(let ge of _e.bodyExprsAfterAwait){let be=G(ge," ",s);!be||!ge.$||tn(ge.$.env.modulePath,be)||l.emitLine(` ${be};`)}s.smWhileBreakInfo=Q,s.smWhileContinueInfo=oe,s.smWhileBodyDrops=Ge,s.inAsyncStateMachine=Pe,s.stateMachineVariables=st,s.variableIdRemapping=Je,s.pendingDeferredDrops=ie}l.emitLine(` while_loop_${Ce}_continue:`);{let Pe=((W=_e.bodyExpr.$)==null?void 0:W.deferredDropExpressions)??[];if(Pe.length>0){let st=s.inAsyncStateMachine,Je=s.stateMachineVariables,ie=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let ee=new Map;for(let Q of i.capturedVariables)ee.set(Q.id,Q);if(a)for(let Q of a.fields)ee.set(Q.label,{id:Q.label,name:Q.label,type:Q.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=ee;for(let Q of Pe){let oe=G(Q," ",s);oe&&oe.includes("sm->")&&l.emitLine(` ${oe};`)}s.inAsyncStateMachine=st,s.stateMachineVariables=Je,s.variableIdRemapping=ie}}let xe=s.declaredTempVars;if(s.declaredTempVars=void 0,_e.stepExpr){let Pe=s.inAsyncStateMachine,st=s.stateMachineVariables,Je=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let ie=new Map;for(let Q of i.capturedVariables)ie.set(Q.id,Q);if(a)for(let Q of a.fields)ie.set(Q.label,{id:Q.label,name:Q.label,type:Q.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=ie;let ee=G(_e.stepExpr," ",s);ee&&l.emitLine(` ${ee};`),s.inAsyncStateMachine=Pe,s.stateMachineVariables=st,s.variableIdRemapping=Je}{let Pe=s.inAsyncStateMachine,st=s.stateMachineVariables,Je=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let ie=new Map;for(let Q of i.capturedVariables)ie.set(Q.id,Q);if(a)for(let Q of a.fields)ie.set(Q.label,{id:Q.label,name:Q.label,type:Q.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=ie;let ee=G(_e.conditionExpr," ",s);s.inAsyncStateMachine=Pe,s.stateMachineVariables=st,s.variableIdRemapping=Je,l.emitLine(` if (!(${ee})) {`),l.emitLine(` sm->while_loop_${Ce}_active = false;`),l.emitLine(" } else {"),l.emitLine(` sm->state = ${lt.index};`),l.emitLine(` goto while_loop_${Ce}_start;`),l.emitLine(" }")}s.declaredTempVars=xe,l.emitLine(" }"),l.emitLine(""),l.emitLine(` after_while_loop_${Ce}:`)}}}}let se=s.inAsyncStateMachine,me=s.stateMachineVariables,he=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let Re=new Map;for(let lt of i.capturedVariables)Re.set(lt.id,lt);if(a)for(let lt of a.fields)Re.set(lt.label,{id:lt.label,name:lt.label,type:lt.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Re;let _t=s.pendingDeferredDrops;s.pendingDeferredDrops=[...((q=e.$)==null?void 0:q.deferredDropExpressions)??[]];let bt=Le&&!_&&$e.expressions.length>0,Mt=$e.expressions.length>0?$e.expressions[$e.expressions.length-1]:void 0,en=s.asyncBodyReturnExpr;if(!_&&Mt&&d&&Mt===d&&$e.awaitPoint?s.asyncBodyReturnExpr=Mt:s.asyncBodyReturnExpr=void 0,Cd($e," ",s,bt),s.asyncBodyReturnExpr=en,s.pendingDeferredDrops=_t,l.emitLine(""),$e.awaitPoint){s.inAsyncStateMachine=se,s.stateMachineVariables=me,s.variableIdRemapping=he;let lt=ae+1;{let kt=w_($e.awaitPoint,i),Ot=(j=$e.awaitPoint.expr.args)==null?void 0:j[0],je=gl((ue=Ot==null?void 0:Ot.$)==null?void 0:ue.type),Be=(ye=$e.awaitPoint)==null?void 0:ye.isInsideCond;Be&&(l.emitLine(" // Only await if the cond branch with await was taken"),l.emitLine(` if (sm->${kt} != NULL) {`));let tt=(X=$e.awaitPoint)==null?void 0:X.isInsideWhile,Bt=tt?(re=s.asyncWhileLoopInfo)==null?void 0:re.get($e.awaitPoint.index):void 0;if(tt&&Bt){let jn=$e.awaitPoint.index;l.emitLine(" // Only await if while loop is still active (not broken)"),l.emitLine(` if (sm->while_loop_${jn}_active) {`)}if(l.emitLine(" // Transition to next state after await"),l.emitLine(` sm->state = ${lt};`),l.emitLine(""),l.emitLine(" // Check if future is ready"),l.emitLine(` int future_state = sm->${kt}->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(""),je?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->${kt}); // event loop reference`)),je||(l.emitLine(" if (future_state == 0) { // 0 = cold (not started)"),Bb($e.awaitPoint.expr,`sm->${kt}`," ",s),l.emitLine(" // Cold future \u2014 start it via stored resume function pointer"),l.emitLine(` sm->${kt}->__yo_resume_fn((void*)sm->${kt});`),l.emitLine(""),l.emitLine(" // Re-check: may have completed synchronously"),l.emitLine(` future_state = sm->${kt}->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->${kt}->continuation_fn = (void (*)(void*))${r};`),l.emitLine(` sm->${kt}->continuation_sm = (void*)sm;`),l.emitLine(" return;"),tt&&Bt){let jn=$e.awaitPoint.index;l.emitLine(" } else {"),l.emitLine(" // While loop was broken, jump to code after loop"),l.emitLine(` goto after_while_loop_${jn};`),l.emitLine(" }")}Be&&(l.emitLine(" } else {"),l.emitLine(" // Non-await cond branch was taken, skip directly to next state"),l.emitLine(` sm->state = ${lt};`),l.emitLine(` goto state_${lt};`),l.emitLine(" }"))}}else if(Le){if(!$e.expressions.some(kt=>Ad(kt))){if((le=e.$)!=null&&le.deferredDropExpressions){let kt=new Na,kn=s.emitter;s.emitter=kt;for(let je of e.$.deferredDropExpressions){let Be=G(je,"",s);Be&&kt.emitLine(`${Be};`)}s.emitter=kn;let Ot=kt.print().trim();if(Ot){l.emitLine(" // Drop local variables before completion");for(let je of Ot.split(`
199
- `)){let Be=je.trim();Be&&(l.emitLine(` ${Be}`),g.push(Be))}l.emitLine("")}}l.emitLine(" // Final state - complete the Future"),vo({emitter:l,indent:" ",debugLabel:"Future %p completed"})}s.inAsyncStateMachine=se,s.stateMachineVariables=me,s.variableIdRemapping=he}else s.inAsyncStateMachine=se,s.stateMachineVariables=me,s.variableIdRemapping=he;l.emitLine(" }")}return l.emitLine(" }"),l.emitLine("}"),l.emitLine(""),g}function k_(e,t,n,r,i){let o=i.emitter,a=w_(t,n);if(e.tag==="FnCall"&&E(e,":=")){let s=e.args[1];if(s&&s.tag==="FnCall"&&Vr(s)){let l=s.args[0];if(l){let u=G(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"&&Vr(e)){let s=e.args[0];if(s){let l=G(s,r,i);o.emitLine(`${r}// Store Future for additional await in cond branch`),o.emitLine(`${r}sm->${a} = ${l};`)}return}if(e.tag==="FnCall"&&E(e,R.cond)){fs(e,t,0,r,i);return}if(e.tag==="FnCall"&&E(e,R.match)){fs(e,t,0,r,i);return}if(e.tag==="FnCall"&&E(e,R.while)){fs(e,t,0,r,i);return}if(e.tag==="FnCall"&&E(e,R.begin)){fs(e,t,0,r,i);return}o.emitLine(`${r}// Warning: unhandled await pattern in remaining expressions`)}function Ad(e){if(En(e,"return")||E(e,"return"))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(Ad(t))return!0}return!1}function Ub(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;B(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),nn(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function Bb(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=Wn(i.$.type);if(!((_=o==null?void 0:o.isFuture.effects)!=null&&_.length))return;let a=Ub(o.isFuture.effects),s=r.emitter,l=(f=e.args)==null?void 0:f.find(d=>S(d)&&E(d,R.using));if(l){let d=l.args;for(let g=0;g<a.length&&g<d.length;g++){let m=a[g],h=d[g];if(ne(m.type)){if(m.type.forallParameters.length>0)continue;let v=G(h,n,r),T=m.label;s.emitLine(`${n}${t}->__capture.${T} = (void*)${v};`)}else it(m.type)&&Fd(m.type,t,n,(p=h.$)==null?void 0:p.value,r,e)}}else for(let d of a)if(ne(d.type)){if(d.type.forallParameters.length>0)continue;let g=Gb(d.label,r,e);g&&s.emitLine(`${n}${t}->__capture.${d.label} = (void*)${g};`)}else it(d.type)&&Fd(d.type,t,n,void 0,r,e)}function Fd(e,t,n,r,i,o){var s,l,u,c;let a=i.emitter;for(let _ of e.fields){if(!ne(_.type))continue;let f;if(i.stateMachineVariables){for(let[,p]of i.stateMachineVariables)if(p.name===_.label&&p.kind==="outer"){f=`sm->__capture.${_.label}`;break}}if(!f&&r&&xt(r)){let p=e.fields.indexOf(_),d=r.fields[p];if(d&&we(d)){let g=i.functions[d.funcId];g&&(f=g.cName)}}if(!f&&i.currentEvidenceParams){for(let p of i.currentEvidenceParams.values())if(p.fieldLabel===_.label){f=p.cParamName;break}}if(!f){let p=((s=o.$)==null?void 0:s.env)??((l=o.func.$)==null?void 0:l.env);if(p){let d=Dr(p,g=>g.isImplicit===!0);for(let g=d.length-1;g>=0;g--){let m=d[g],h=(u=m.value)==null?void 0:u[m.value.length-1];if(h&&xt(h)){let v=h.type.fields.findIndex(T=>T.label===_.label);if(v>=0){let T=h.fields[v];if(T&&we(T)){let $=(c=i.functions[T.funcId])==null?void 0:c.cName;if($){f=$;break}}}}}}}f&&a.emitLine(`${n}${t}->__capture.${_.label} = (void*)${f};`)}}function Gb(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 zo=Z(()=>{qc();mt();fi();qt();gn();Te();Do();Ne();at();Cn();Fe();ha();kr();yn();Wt();Wt();wd()});function Sd(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(Wb.has(l))continue;F_(u,l,!0,e);continue}u.isExtern==="c"&&u.cInclude||l.startsWith("__atomic_")||l.startsWith("__sync_")||F_(u,l,!0,e)}t.emitDeclarationLine(""),e.usesAsync&&(t.emitDeclarationLine("/// Async runtime functions"),t.emitDeclarationLine("static void __yo_async_spawn_task(void (*resume_fn)(void*), void* state_machine);"),t.emitDeclarationLine("")),t.emitDeclarationLine("/// Object constructors"),qb(e),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Closure constructors"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Capture dispose functions"),Hb(e),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Dyn type constructors"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Regular functions");for(let s in e.functions){let{cName:l,value:u}=e.functions[s],c=l==="__yo_user_main",_=(r=(n=u.body)==null?void 0:n.$)==null?void 0:r.effectAnalysis,f=_&&_.hasEffects;if(!c&&!u.type.isClosure&&((i=u.specializedFunctionCaches)==null?void 0:i.length)>0||!c&&!f&&!u.isModuleEffectMember&&!u.type.isClosure&&!u.specializedType&&(((o=u.specializedFunctionCaches)==null?void 0:o.length)??0)===0&&An(u.specializedType??u.type).length===0&&[...u.type.implicitParameters,...u.type.parameters.filter($=>$.isImplicit)].some($=>ne($.type)))continue;let d=u.specializedType??u.type,g=An(d).length>0;if(!c&&u.isIoAsyncStateMachineClosure||!c&&!f&&!g&&!u.isModuleEffectMember&&(no(u.type)&&!u.type.isClosure||((a=u.specializedFunctionCaches)==null?void 0:a.length)>0&&!u.type.isClosure||Ro(u)||ro(u)||u.isIoAsyncStateMachineClosure))continue;let m=u.specializedType??u.type,h=!f&&!u.isModuleEffectMember&&(m.parameters.some($=>Ye($.type))||m.forallParameters.length>0),v=Ye(m.return.type),T=B(m.return.type)&&m.return.type.requiredTraits.length>0;h||v&&!T&&!u.isModuleEffectMember||F_(m,l,!1,e,u.isModuleEffectMember?void 0:u.body,u.specializedType&&An(m).length===0&&An(u.type).some($=>$.fieldFunctionType.forallParameters&&$.fieldFunctionType.forallParameters.length>0)?u.type:void 0)}t.emitDeclarationLine("/// Closure vtable instances"),t.emitDeclarationLine("")}function An(e){let t=[],n=Yb(e.implicitParameters);for(let r of n)it(r.type)?Id(r.label,r.type,[],t):ne(r.type)&&t.push({implicitLabel:r.label,fieldLabel:r.label,fieldPath:[r.label],fieldFunctionType:r.type,cParamName:Ae(r.label)});return t}function Id(e,t,n,r){for(let i of t.fields)if(ne(i.type)){let o=[...n,i.label],a=o.join("__");r.push({implicitLabel:e,fieldLabel:a,fieldPath:o,fieldFunctionType:i.type,cParamName:Ae(`${e}__${a}`)})}else it(i.type)&&Id(e,i.type,[...n,i.label],r)}function Yb(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;B(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),nn(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function oo(e,t,n,r,i){let o=r||H(e.return.type,n),a=e.parameters.filter(_=>!_.isCompileTimeOnly),s=[];e.isClosure&&s.push("void* closure_context");let l=a.map((_,f)=>{let p=Ae(_.label||`param${f}`);if(ne(_.type))return oo(_.type,"(*)",n).replace(" (*)(",` (*${p})(`);{let d;return B(_.type)&&ft(_.type)?_.type.resolvedConcreteType?d=H(_.type.resolvedConcreteType,n)+"*":d=H(_.type,n):d=H(_.type,n),`${d} ${p}`}});s.push(...l);let u=An(i??e);for(let _ of u)if(_.fieldFunctionType.forallParameters&&_.fieldFunctionType.forallParameters.length>0)s.push(`void* ${_.cParamName}`);else{let f=oo(_.fieldFunctionType,"(*)",n).replace(" (*)(",` (*${_.cParamName})(`);s.push(f)}let c=s.join(", ");return`${o} ${t}(${c})`}function F_(e,t,n,r,i,o){var f,p,d,g;let a;if(i&&ft(e.return.type)){let m=dl(i);(f=m==null?void 0:m.$)!=null&&f.asyncStateMachineStructName?a=`${m.$.asyncStateMachineStructName}*`:(p=i.$)!=null&&p.type&&B(i.$.type)&&ft(i.$.type)&&(a=H(i.$.type,r))}if(i&&B(e.return.type)&&!ft(e.return.type)&&(d=i.$)!=null&&d.type&&(a=H(i.$.type,r)),!a&&i&&((g=i.$)!=null&&g.type)&&!ft(e.return.type)){let m=H(e.return.type,r),h=H(i.$.type,r);m!==h&&(a=h)}let s=a?oo(e,t,r,a,o):oo(e,t,r,void 0,o),l=M(e),u=t==="__yo_user_main"||r.exportedFunctionLabels&&[...r.exportedFunctionLabels.values()].some(m=>Ae(m)===t),c=!n&&!u&&(t.includes("___drop")||t.includes("___dup")||t.includes("___dispose")),_=n?"extern ":u?"":c?"static inline __attribute__((always_inline)) ":"static inline ";r.emitter.emitDeclarationLine(`${_}${s}; // ${l}`)}function qb(e){let t=e.emitter;t.emitDeclarationLine("static inline void __yo_decr_rc(void* ptr); // Decrement reference count"),t.emitDeclarationLine("static inline void* __yo_incr_rc(void* ptr); // Increment reference count"),t.emitDeclarationLine("static void __yo_gc_register(void* ptr); // Register object for cycle detection"),t.emitDeclarationLine("static void __yo_gc_unregister(void* ptr); // Unregister object from cycle detection"),t.emitDeclarationLine("static void __yo_gc_collect(); // Trigger garbage collection"),t.emitDeclarationLine("static void __yo_gc_init_thread(); // Initialize thread-local GC state (for worker threads)"),t.emitDeclarationLine("static void __yo_cleanup_thread_gc(); // Clean up thread-local GC state"),t.emitDeclarationLine("static void __yo_init_process_cleanup(void); // Initialize process cleanup");for(let n in e.types){let{type:r,cName:i}=e.types[n];if(Ue(r)&&r.isReferenceSemantics){if(r.fields.some(l=>Ye(l.type)))continue;let a=`__yo_new_${i}`,s=r.fields.map(l=>{let u=H(l.type,e),c=Ae(l.label);return`${u} ${c}`}).join(", ");t.emitDeclarationLine(`static ${i}* ${a}(${s}); // Constructor`)}}}function Hb(e){let t=e.emitter;if(e.closureCaptureMap&&e.closureCaptureMap.size>0)for(let[n]of e.closureCaptureMap){let r=`__yo_dispose_closure_${n}`;t.emitDeclarationLine(`static void ${r}(void* closure_ptr);`)}}function Nd(e){let t=new Set;for(let n in e.functions){let{value:r,cName:i}=e.functions[n],o=r.specializedType;if(Ro(r)||!o||!ki(r.type)||ki(o))continue;let a=o.parameters.some(_=>Ye(_.type)),s=Ye(o.return.type);if(a||s||An(r.type).some(_=>_.fieldFunctionType.forallParameters&&_.fieldFunctionType.forallParameters.length>0)||t.has(n))continue;t.add(n);let c=i.includes("___drop")||i.includes("___dup")||i.includes("___dispose")?"static inline __attribute__((always_inline)) ":"static inline ";e.emitter.emitDeclarationLine(`${c}${oo(o,i,e)}; // specialized function: ${M(r.type)}`)}}var Wb,Ea=Z(()=>{qt();Ne();at();Wt();Wb=new Set(["__yo_mutex_init","__yo_mutex_destroy","__yo_mutex_lock","__yo_mutex_unlock","__yo_cond_init","__yo_cond_destroy","__yo_cond_wait","__yo_cond_signal","__yo_cond_broadcast","__yo_thread_join","__yo_thread_self"])});function ao(e,t,n){let r=fe(t,e);return r.length===0?!1:r[r.length-1].frameLevel<=n}function xd(e){var t,n;return!!((t=e.$)!=null&&t.closureFunctionValue&&((n=e.$)!=null&&n.type)&&tr(e.$.type))}function jb(e,t,n,r,i,o=!1){var p;let a=Object.values(i.types).find(d=>d.type===e);if(!a)return i.emitter.emitLine(`${r}/* Error: Capture type not found for closure */`),null;let s=a.cName,l=new Map;if((p=n.$)!=null&&p.deferredDupExpressions)for(let d of n.$.deferredDupExpressions){let g=Zu(d);g&&l.set(g,d)}let u=e.fields.map(d=>{var v,T;if(d.isEffectParam)return"NULL";let g,m=d.exprs.expr;if((T=(v=m.$)==null?void 0:v.deferredDupExpressions)!=null&&T.length&&(g=m.$.deferredDupExpressions[0]),!g){let $=[d.label];K(m)&&$.push(m.token.value);for(let b of $){let w=l.get(b);if(w){g=w;break}}}if(g)return G(g,r,i);let h={tag:"Atom",token:m.token,$:m.$};return G(h,r,i)}),c=`(${s}){ ${u.map((d,g)=>{let m=e.fields[g];return m?`.${m.label} = ${d}`:`/* Error: missing field at index ${g} */`}).join(", ")} }`,_=n.token.position.row!==void 0?`${Date.now()}_${n.token.position.row}`:`${Date.now()}_${Math.random().toString(36).substr(2,9)}`,f=`__capture_${t}_${_}`;return o?i.emitter.emitLine(`${r}${s} ${f} = ${c};`):(i.emitter.emitLine(`${r}${s}* ${f} = (${s}*)__yo_malloc(sizeof(${s}));`),i.emitter.emitLine(`${r}*${f} = ${c};`)),{captureTempVar:f,captureCName:s}}function Vd(e,t,n){var d;if(!e.$||!e.$.type||!e.$.closureFunctionValue)return"// Error: Missing closure metadata";let r=pr(e.$.type),i=r.isFn.callType,o=e.$.closureFunctionValue,a=e.$.captureType,s=(d=n.functions[o.funcId])==null?void 0:d.cName;if(!s)return"// Error: Closure implementation function not found in context";let l=dt(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&&Ue(a)&&a.fields.length>0,_=H(i.return.type,n),f=i.parameters.map(g=>H(g.type,n)).join(", "),p=`(${_} (*)(void*${f?", "+f:""}))${s}`;if(c&&a&&Ue(a)){let g=!l,m=jb(a,i.id,e,t,n,g);if(!m)return"// Error: Failed to allocate closure capture";let{captureTempVar:h}=m;if(l){let v=`__yo_create_${u}`,T=`__yo_dispose_${u}`;return`${v}(${h}, ${T}, ${p})`}else return n.implClosureCallMap.set(a.id,{functionCName:s,callTypeId:r.isFn.callType.id,callType:r.isFn.callType}),h}else if(l){let g=`__yo_create_${u}`,m=`__yo_dispose_${u}`;return`${g}(NULL, ${m}, ${p})`}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,callType:r.isFn.callType}),`(${H(g.resolvedConcreteType,n)}){}`}return"// Error: Impl(Fn(...)) without captures missing resolvedConcreteType"}}var hl=Z(()=>{mt();qt();Te();Ne();Zr();Wt();yn()});function L_(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=G(a,t,n);s&&n.emitter.emitLine(`${t}${s};`)}}}function ps(e,t,n=""){var a,s,l,u,c,_,f,p,d,g,m,h,v,T,$,b,w,C,k,A,N,x,V,I,D,P,O,J,U;let r=t;if(e.token.value==="continue"){if(r.currentContinueLabel)return L_(r,n,t),`goto ${r.currentContinueLabel}`;if(r.currentLoopLabel)return L_(r,n,t),"continue";if(r.smWhileContinueInfo){if(r.smWhileContinueInfo.emitDropsBeforeGoto&&r.smWhileBodyDrops&&r.smWhileBodyDrops.length>0){let W=t.emitter;for(let q of r.smWhileBodyDrops){let j=G(q,n,t);j&&j.includes("sm->")&&W.emitLine(`${n}${j};`)}}if(r.smWhileContinueInfo.stepExpr){let W=t.emitter,q=G(r.smWhileContinueInfo.stepExpr,n,t);q&&W.emitLine(`${n}${q};`)}return`goto ${r.smWhileContinueInfo.label}`}return"continue"}if(e.token.value==="break"){if(r.currentLoopLabel)return L_(r,n,t),r.insideMatch?`goto ${r.currentLoopLabel}`:"break";if(r.smWhileBreakInfo){let{label:W,activeIndex:q}=r.smWhileBreakInfo;if(r.smWhileBodyDrops&&r.smWhileBodyDrops.length>0){let j=t.emitter;for(let ue of r.smWhileBodyDrops){let ye=G(ue,n,t);ye&&ye.includes("sm->")&&j.emitLine(`${n}${ye};`)}}return q!==void 0?(t.emitter.emitLine(`${n}sm->while_loop_${q}_active = false;`),`goto ${W}`):`goto ${W}`}return"break"}if(e.token.value==="return"){if(r.inAsyncStateMachine){let W=t.emitter,q=r.inAsyncStateMachine.futureType,ue=Wn(q).isFuture.outputType,ye=We(ue);if((a=e.$)!=null&&a.deferredDropExpressions)for(let re of e.$.deferredDropExpressions){let le=G(re,n,t);le&&le.includes("sm->")&&W.emitLine(`${n}${le};`)}if(r.pendingDeferredDrops&&r.pendingDeferredDrops.length>0){W.emitLine(`${n}// Drop local variables before early completion`);for(let re of r.pendingDeferredDrops){let le=G(re,n,t);le&&le.includes("sm->")&&W.emitLine(`${n}${le};`)}}W.emitLine(`${n}// Early return - complete the result Future`);let X=ye?void 0:`(${H(ue,t)}){0}`;return vo({emitter:W,indent:n,resultCode:X,debugLabel:t.currentFunctionName}),""}return"return"}if((s=e.$)!=null&&s.type&&We(e.$.type))return"";if((r.inAsyncStateMachine||r.inEffectStateMachine)&&r.stateMachineVariables){let W=e.token.value;if((l=r.localShadowedVariables)!=null&&l.has(W))return Ae(W);let q=!1;if((u=e.$)!=null&&u.env){let j=fe(e.$.env,W);if(j.length>0){let ue=j[j.length-1],ye=ue.isOwningTheSameRcValueAs?ue.isOwningTheSameRcValueAs.id:ue.id;(c=r.variableIdRemapping)!=null&&c.has(ye)&&(ye=r.variableIdRemapping.get(ye));let X=r.stateMachineVariables.get(ye);if(X){let re=(_=r.stateMachineFieldAliases)==null?void 0:_.get(ye);if(re)return q=!0,`sm->${re}`;let le=X.kind==="outer"?`__capture.${W}`:`var_${X.id}`;return q=!0,`sm->${le}`}}}if(!q){for(let[j,ue]of r.stateMachineVariables)if(ue.name===W){let ye=(f=r.stateMachineFieldAliases)==null?void 0:f.get(j);if(ye)return q=!0,`sm->${ye}`;let X=ue.kind==="outer"?`__capture.${W}`:`var_${j}`;return q=!0,`sm->${X}`}}if((p=e.$)!=null&&p.env){let j=fe(e.$.env,W);if(j.length>0){let ue=j[j.length-1];if(ue.isOwningTheSameRcValueAs){let ye=ue.isOwningTheSameRcValueAs.name,X=ue.isOwningTheSameRcValueAs.id;for(let[re,le]of r.stateMachineVariables)if(le.name===ye||re===X)return`sm->${le.kind==="outer"?`__capture.${ye}`:`var_${re}`}`}}}if(r.currentClosureCaptures&&r.currentClosureCaptures.includes(W)&&r.currentClosureCaptureFrameLevel!==void 0){let j=r.currentClosureCaptureTypeCName;return j?`((${j}*)closure_context)->${Qe(W,(d=e.$)==null?void 0:d.env)}`:`closure_context->${Qe(W,(g=e.$)==null?void 0:g.env)}`}if((m=e.$)!=null&&m.variableName){if((h=e.$)!=null&&h.env&&((v=e.$)!=null&&v.value)&&!Me(e.$.value)){let j=fe(e.$.env,e.$.variableName);if(j.length>0&&j[j.length-1].isCompileTimeOnly)return lr(e.$.value,t,e)}return Qe(e.$.variableName,e.$.env)}}if((T=e.$)!=null&&T.variableName){if(($=e.$)!=null&&$.env&&((b=e.$)!=null&&b.value)&&!Me(e.$.value)){let W=fe(e.$.env,e.$.variableName);if(W.length>0&&W[W.length-1].isCompileTimeOnly)return lr(e.$.value,t,e)}if(!(r.currentClosureCaptures&&r.currentClosureCaptures.includes(e.token.value)&&((w=e.$)!=null&&w.env)&&r.currentClosureCaptureFrameLevel!==void 0&&ao(e.token.value,e.$.env,r.currentClosureCaptureFrameLevel)))return Qe(e.$.variableName,(C=e.$)==null?void 0:C.env)}if((k=e.$)!=null&&k.value&&!Me(e.$.value))return lr(e.$.value,t,e);let i=(A=e.$)!=null&&A.env&&r.currentClosureCaptureFrameLevel!==void 0?ao(e.token.value,e.$.env,r.currentClosureCaptureFrameLevel):!1;if(r.currentClosureCaptures&&r.currentClosureCaptures.includes(e.token.value)&&r.currentClosureCaptureFrameLevel!==void 0&&(!((N=e.$)!=null&&N.env)||i)){let W=r.currentClosureCaptureTypeCName;return W?`((${W}*)closure_context)->${Qe(e.token.value,(x=e.$)==null?void 0:x.env)}`:`closure_context->${Qe(e.token.value,(V=e.$)==null?void 0:V.env)}`}if(r.currentFunctionName&&!r.currentClosureCaptures){let W=Object.values(r.functions).find(q=>q.cName===r.currentFunctionName);if(W&&W.value.type.isClosure){let q=Object.values(r.types).find(j=>ne(j.type)&&j.type.isClosure&&j.type===W.value.type);if(q)return`((${`${q.cName}_capture`}*)closure_context->data)->${Qe(e.token.value,(I=e.$)==null?void 0:I.env)}`}}if((D=e.$)!=null&&D.env){let W=fe(e.$.env,e.token.value);if(W.length>0){let q=W[W.length-1];if((P=q.value)!=null&&P[0]&&we(q.value[0])){let j=(O=t.functions[q.value[0].funcId])==null?void 0:O.cName;if(j)return j}else if(ne(q.type)&&(Me((J=q.value)==null?void 0:J[0])||q.value===void 0)){let j=Object.entries(t.functions).find(([ue,ye])=>ye.value.funcName===e.token.value);if(j)return j[1].cName}}}return Qe(e.token.value,(U=e.$)==null?void 0:U.env)}var tc=Z(()=>{mt();qt();Ne();Fe();Wt();ha();hl();ss();yn()});function Dd(e,t,n){var m,h,v,T,$,b,w,C,k,A,N,x,V,I,D,P,O,J,U,W;let r;if(Xn(e)){let q=(h=(m=e.$)==null?void 0:m.runtimeArgExprsInOrder)==null?void 0:h[0],j=(v=q==null?void 0:q.$)==null?void 0:v.closureFunctionValue;j&&we(j)&&(r=j.body)}else r=e.args[0];if(!r)return"/* Error: async requires exactly 1 argument */";let i=(T=e.$)==null?void 0:T.type;if(!i||!ft(i))return"/* Error: async block must have Future type */";let o=Wn(i);if(!o)return"/* Error: Could not extract Future module type */";let a=(($=e.$)==null?void 0:$.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 _=(b=e.$)==null?void 0:b.awaitAnalysis;if(!_)throw new Error("Missing await analysis for async block. This should have been computed during evaluation.");let f=o.isFuture.outputType;if(B(f))if(f.resolvedConcreteType)f=f.resolvedConcreteType;else{let q=(C=(w=e.$)==null?void 0:w.runtimeArgExprsInOrder)==null?void 0:C[0],j=(k=q==null?void 0:q.$)==null?void 0:k.closureFunctionValue;if(j&&we(j)){let ue=(N=(A=j.type)==null?void 0:A.return)==null?void 0:N.type;if(ue&&B(ue)&&ue.resolvedConcreteType)f=ue.resolvedConcreteType;else if((V=(x=j.body)==null?void 0:x.$)!=null&&V.type){let ye=j.body.$.type;B(ye)&&ye.resolvedConcreteType?f=ye.resolvedConcreteType:B(ye)||(f=ye)}}}let p=H(f,n),d=n.emitter;if(d.emitDeclarationLine(`void ${c}(void* sm_ptr); // Dispose function for state machine`),d.emitDeclarationLine(""),d.emitDeclarationLine(`void ${l}(${s}* sm);`),d.emitDeclarationLine(""),(I=e.$)!=null&&I.captureType){let q=e.$.captureType,j=Object.values(n.types).find(ye=>ye.type===q),ue=j?j.cName:`async_capture_${q.id}`;d.emitDeclarationLine(`${s}* ${u}(${ue} __capture);`)}else d.emitDeclarationLine(`${s}* ${u}();`);d.emitDeclarationLine(""),n.deferredAsyncBlocks||(n.deferredAsyncBlocks=[]),n.deferredAsyncBlocks.push({bodyExpr:r,asyncBlockId:a,structName:s,resumeFunctionName:l,constructorName:u,disposeFunctionName:c,futureType:i,futureModuleType:o,resultType:f,resultTypeCName:p,captureType:(D=e.$)==null?void 0:D.captureType,analysis:_});let g=(P=e.$)==null?void 0:P.captureType;if(g){let q=Object.values(n.types).find(ae=>ae.type===g),j=q?q.cName:`async_capture_${g.id}`,ue=n,ye=ue.currentClosureCaptures!==void 0||ue.inAsyncStateMachine!==void 0||ue.inEffectStateMachine!==void 0,X=!1,re=g.fields.map(ae=>{var me,he;if(ae.isEffectParam)return`.${ae.label} = NULL`;let Le;if(!ye&&((me=e.$)!=null&&me.deferredDupExpressions))for(let Re of e.$.deferredDupExpressions){let _t;if(S(Re)&&(Re.args.length>0&&K(Re.args[0])?_t=Re.args[0].token.value:Re.args.length===0&&S(Re.func)&&E(Re.func,".")&&Re.func.args.length>=2&&K(Re.func.args[0])&&(_t=Re.func.args[0].token.value)),_t===ae.label){Le=Re;break}}if(Le)return X=!0,(he=Le.$)!=null&&he.variableName?(G(Le,t,n),`.${ae.label} = ${Le.$.variableName}`):`.${ae.label} = ${G(Le,t,n)}`;let se={tag:"Atom",token:ae.exprs.expr.token,$:ae.exprs.expr.$};return`.${ae.label} = ${ps(se,n)}`}).join(", "),le=`(${j}){${re}}`;if(!X){let ae=ri(g,n);ae&&(le=`${ae}(${le})`)}let Oe=((O=e.$)==null?void 0:O.variableName)||"async_result",$e=`${u}(${le})`;if(Oe&&((J=e.$)!=null&&J.type)){let ae=an(e.$.type,Oe,n);return n.emitter.emitLine(`${t}${ae} = ${$e};`),Oe}else return $e}else{let q=((U=e.$)==null?void 0:U.variableName)||"async_result",j=`${u}()`;if(q&&((W=e.$)!=null&&W.type)){let ue=an(e.$.type,q,n);return n.emitter.emitLine(`${t}${ue} = ${j};`),q}else return j}}function Md(e,t){var m;let n=t.emitter,{asyncBlockId:r,structName:i,resultType:o,resultTypeCName:a,captureType:s,analysis:l,crossBoundaryIds:u,awaitFutureTempVarAliases:c,overlappingSlotAliases:_,overlappingSlots:f}=e;if(n.emitDeclarationLine(`// State machine for async block ${r} - implements Future(${M(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)"),We(o)?n.emitDeclarationLine(" uint8_t result; // Dummy result for unit type"):n.emitDeclarationLine(` ${a} result; // The result value of type ${M(o)}`),n.emitDeclarationLine(" void (*continuation_fn)(void*); // Resume function of awaiting task"),n.emitDeclarationLine(" void* continuation_sm; // State machine of awaiting task"),n.emitDeclarationLine(""),n.emitDeclarationLine(" void (*__yo_resume_fn)(void*); // Resume function pointer (for lazy start at await/spawn)"),n.emitDeclarationLine(""),s){let h=Object.values(t.types).find(T=>T.type===s),v=h?h.cName:`async_capture_${s.id}`;n.emitDeclarationLine(" // Captured variables from outer scope"),n.emitDeclarationLine(` ${v} __capture;`),n.emitDeclarationLine("")}let p=l.capturedVariables.filter(h=>h.kind!=="outer");if(u&&(p=p.filter(h=>u.has(h.id)&&!(c!=null&&c.has(h.id))&&!(_!=null&&_.has(h.id)))),p.length>0){n.emitDeclarationLine(" // Local variables");for(let h of p){let v=H(h.type,t),T=dr(h.id,"local");n.emitDeclarationLine(` ${v} ${T}; // ${h.name}`)}n.emitDeclarationLine("")}if(f&&f.length>0){n.emitDeclarationLine(" // Overlapping storage slots (Phase 2)");for(let h of f)n.emitDeclarationLine(` ${h.cType} ${h.fieldName}; // shared: ${h.variableNames.join(", ")}`);n.emitDeclarationLine("")}if(l.awaitPoints.length>0){let h=[];for(let v of l.awaitPoints)if(!(We(v.resultType)||B(v.resultType)&&!v.resultType.resolvedConcreteType)&&v.isInsideCond){let b=v.resultType;if(v.futureType){let C=Wn(v.futureType);C&&(b=C.isFuture.outputType)}let w=H(b,t);h.push(` ${w} await_result_${v.index};`)}if(h.length>0){n.emitDeclarationLine(" // Await result temporaries");for(let v of h)n.emitDeclarationLine(v);n.emitDeclarationLine("")}}if(l.awaitPoints.length>0){let h=l.awaitPoints.filter(v=>v.futureVariableId===void 0);if(h.length>0){n.emitDeclarationLine(" // Future references for awaits");for(let v of h){let T=v.expr;if(T.tag!=="FnCall")continue;let $=T.args[0],b=(m=$==null?void 0:$.$)==null?void 0:m.type;if(!b)throw new Error(`Internal error: await expression missing type info for future argument in async block ${r}`);let w=H(b,t);n.emitDeclarationLine(` ${w} await_future_${v.index};`)}n.emitDeclarationLine("")}}let d=l.awaitPoints.filter(h=>h.needsOwnCondBranchField);if(d.length>0){n.emitDeclarationLine(" // Branch tracking for cond expressions with await");for(let h of d)n.emitDeclarationLine(` int cond_branch_${h.index}; // Which branch was taken in cond with await ${h.index}`);n.emitDeclarationLine("")}let g=l.awaitPoints.filter(h=>h.isInsideWhile);if(g.length>0){n.emitDeclarationLine(" // Loop state tracking for while loops with await");let h=l.awaitPoints.length;for(let v of g){n.emitDeclarationLine(` _Bool while_loop_${v.index}_active; // Whether while loop ${v.index} should continue`);let T=(v.whileNestingDepth??1)-1;for(let $=0;$<T;$++)n.emitDeclarationLine(` _Bool while_loop_${h}_active; // Whether outer while loop ${h} should continue`),h++}n.emitDeclarationLine("")}n.emitDeclarationLine("};"),n.emitDeclarationLine("")}function Kb(e){var l;if(!e.deferredAsyncBlocks||e.deferredAsyncBlocks.length===0)return;let t=e.deferredAsyncBlocks,n=new Map;for(let u of t)n.set(u.structName,u);let r=new Map,i=new Map;for(let u of t)r.set(u.structName,new Set),i.set(u.structName,0);for(let u of t){let c=_=>{let f=r.get(_);f.has(u.structName)||(f.add(u.structName),i.set(u.structName,(i.get(u.structName)??0)+1))};for(let _ of u.analysis.capturedVariables){let f;try{f=H(_.type,e)}catch{continue}let p=n.get(f);p&&p.structName!==u.structName&&c(p.structName)}for(let _ of u.analysis.awaitPoints){if(_.futureVariableId!==void 0)continue;let f=_.expr;if(f.tag!=="FnCall")continue;let p=f.args[0],d=(l=p==null?void 0:p.$)==null?void 0:l.type;if(!d)continue;let g;try{g=H(d,e)}catch{continue}let m=n.get(g);m&&m.structName!==u.structName&&c(m.structName)}}let o=[];for(let[u,c]of i.entries())c===0&&o.push(u);let a=[];for(;o.length>0;){let u=o.shift();a.push(u);let c=r.get(u);if(c)for(let _ of c){let f=(i.get(_)??0)-1;i.set(_,f),f===0&&o.push(_)}}let s=a.length===t.length?a.map(u=>n.get(u)).filter(Boolean):t;for(let u of s){let{crossBoundaryIds:c,awaitFutureTempVarAliases:_,variableSegments:f}=Ju(u.bodyExpr,u.analysis),{slotAliases:p,slots:d}=ec(c,f,u.analysis.capturedVariables,_,e);Md({asyncBlockId:u.asyncBlockId,structName:u.structName,resultType:u.resultType,resultTypeCName:u.resultTypeCName,captureType:u.captureType,analysis:u.analysis,crossBoundaryIds:c,awaitFutureTempVarAliases:_,overlappingSlotAliases:p,overlappingSlots:d},e)}}function Xb(e,t,n,r,i,o,a,s,l,u){var _;let c=u.emitter;if(c.emitLine(`// Dispose function for async block ${e} state machine`),c.emitLine("// Called by __yo_decr_rc when refcount hits 0 - do NOT call __yo_free here"),c.emitLine(`void ${n}(void* sm_ptr) {`),c.emitLine(` ${t}* sm = (${t}*)sm_ptr;`),c.emitLine(` ASYNC_DEBUG("${n}: Disposing state machine\\n");`),c.emitLine(""),i&&ht(i)){let f=Object.values(u.types).find(p=>p.type===i);if(!f)c.emitLine(" /* Error: capture struct type not found in context */");else{let p=f.cName,d=i.trait.fields.find(g=>g.label===F.___drop[0]);if(d&&d.assignedValue&&we(d.assignedValue)){let g=(_=u.functions[d.assignedValue.funcId])==null?void 0:_.cName;g&&(c.emitLine(' ASYNC_DEBUG(" Dropping capture struct\\n");'),c.emitLine(` ${g}(sm->__capture);`))}else c.emitLine(` /* Warning: ___drop function not found for capture struct ${p} */`)}}if(c.emitLine(""),!We(r)&&ht(r)){let f=H(r,u);c.emitLine(" // Drop result field if it was set (state == -1 means completed)"),c.emitLine(" int final_state = sm->state;"),c.emitLine(" if (final_state == -1) {"),c.emitLine(' ASYNC_DEBUG(" Dropping result field\\n");');let p=io(r,u);p?c.emitLine(` ${p}(sm->result);`):c.emitLine(` /* Warning: No ___drop function found for result type ${f} */`),c.emitLine(" }")}c.emitLine("");{let f=[];for(let p of o.capturedVariables){if(p.kind!=="local"||!s.has(p.id)||l.has(p.id)||p.isOwningTheSameRcValueAs!==void 0)continue;let g=`sm->${dr(p.id,"local")}`;if(dt(p.type))f.push(` if ((${g}).data != NULL) { __yo_decr_rc((void*)(${g}).data); }`);else if(Vn(p.type)||Nn(p.type))f.push(` if (${g} != NULL) { __yo_decr_rc_atomic((void*)${g}); }`);else if(pn(p.type)||B(p.type)&&br(p.type)){let m=io(p.type,u);m?f.push(` if (${g} != NULL) { ${m}(${g}); }`):f.push(` if (${g} != NULL) { __yo_decr_rc((void*)${g}); }`)}else if(ht(p.type)){let m=io(p.type,u);m&&f.push(` ${m}(${g});`)}}if(f.length>0){c.emitLine(" // Drop local variables on escape (state == -2)"),c.emitLine(" if (sm->state == -2) {");for(let p of f)c.emitLine(p);c.emitLine(" }")}}c.emitLine(" // Memory freed by __yo_decr_rc after this function returns"),c.emitLine("}")}function Qb(e,t,n,r,i,o,a,s,l,u){let c=u.emitter;if(l){let _=Object.values(u.types).find(p=>p.type===l),f=_?_.cName:`async_capture_${l.id}`;c.emitLine(`${t}* ${r}(${f} __capture) {`)}else c.emitLine(`${t}* ${r}() {`);if(c.emitLine(" // Allocate async block state machine (heap-backed, ref-counted)"),c.emitLine(` ${t}* sm = (${t}*)__yo_malloc(sizeof(${t}));`),c.emitLine(` memset(sm, 0, sizeof(${t}));`),c.emitLine(""),c.emitLine(" // Initialize reference counting header"),c.emitLine(" sm->header.ref_count = 1; // Caller owns initial reference"),c.emitLine(` GC_DEBUG("AsyncBlock ${t}: Created ptr=%p RC=1\\n", (void*)sm);`),u.needsCycleGC&&(c.emitLine(" sm->header.gc_flags = 0;"),c.emitLine(" sm->header.gc_mark = __YO_GC_UNMARKED;"),c.emitLine(" sm->header.gc_next = NULL;"),c.emitLine(" sm->header.gc_prev = NULL;")),u.needsCycleGC)c.emitLine(` sm->header.dispose_fn = (void(*)(void*))${i};`);else{u.disposeTypeIds||(u.disposeTypeIds=new Map,u.nextDisposeTypeId=1);let _=u.disposeTypeIds.get(i);_===void 0&&(_=u.nextDisposeTypeId,u.nextDisposeTypeId=_+1,u.disposeTypeIds.set(i,_)),c.emitLine(` sm->header.type_id = ${_};`)}u.needsCycleGC&&c.emitLine(" sm->header.traverse_fn = NULL; // TODO: Add traverse for cycle detection if needed"),c.emitLine(""),c.emitLine(" sm->state = 0;"),c.emitLine(" sm->continuation_fn = NULL;"),c.emitLine(" sm->continuation_sm = NULL;"),c.emitLine(""),l&&(c.emitLine(" // Initialize captured variables"),c.emitLine(" sm->__capture = __capture;"),c.emitLine("")),c.emitLine(" // Initialize result (will be set when async block completes)"),We(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 Od(e){if(!e.deferredAsyncBlocks||e.deferredAsyncBlocks.length===0)return;let t=e.emitter;Kb(e),t.emitLine("// Deferred async block implementations");let n=0;for(;n<e.deferredAsyncBlocks.length;){let r=e.deferredAsyncBlocks[n],i=e.deferredAsyncBlocks.length,{bodyExpr:o,asyncBlockId:a,structName:s,resumeFunctionName:l,constructorName:u,disposeFunctionName:c,futureType:_,resultType:f,resultTypeCName:p,captureType:d,analysis:g}=r,m=e.stateMachineVariables,h=e.currentEvidenceParams,v=new Map,{crossBoundaryIds:T,awaitFutureTempVarAliases:$,variableSegments:b}=Ju(o,g),{slotAliases:w}=ec(T,b,g.capturedVariables,$,e),C=g.capturedVariables.filter(V=>V.kind==="outer"||T.has(V.id)||$.has(V.id)||w.has(V.id)),k={...g,capturedVariables:C};for(let V of C)v.set(V.id,V);if(d)for(let V of d.fields)v.set(V.label,{id:V.label,name:V.label,type:V.type,kind:"outer",isOwningTheSameRcValueAs:void 0});e.stateMachineVariables=v;let A=e.stateMachineFieldAliases,N=new Map($);for(let[V,I]of w)N.set(V,I);e.stateMachineFieldAliases=N;let x=Ld(o,a,s,l,k,_,d,e);if(e.stateMachineVariables=m,e.currentEvidenceParams=h,e.stateMachineFieldAliases=A,t.emitLine(""),Xb(a,s,c,f,d,k,x,T,$,e),t.emitLine(""),Qb(a,s,l,u,c,_,f,p,d,e),t.emitLine(""),e.deferredAsyncBlocks.length>i){let V=e.deferredAsyncBlocks.slice(i);for(let I of V){let{crossBoundaryIds:D,awaitFutureTempVarAliases:P,variableSegments:O}=Ju(I.bodyExpr,I.analysis),{slotAliases:J,slots:U}=ec(D,O,I.analysis.capturedVariables,P,e);Md({asyncBlockId:I.asyncBlockId,structName:I.structName,resultType:I.resultType,resultTypeCName:I.resultTypeCName,captureType:I.captureType,analysis:I.analysis,crossBoundaryIds:D,awaitFutureTempVarAliases:P,overlappingSlotAliases:J,overlappingSlots:U},e)}}n++}}function Rd(e){for(let t in e.functions){let{value:n}=e.functions[t];n.body&&Pd(n.body,e)}}function Jb(e){return Zb.some(t=>e.startsWith(t))}function Pd(e,t){var n,r,i,o,a,s,l;if(e&&S(e)){let u=e;if(Xn(e)){t.usesAsync=!0;let c=(n=e.$)==null?void 0:n.type;if(c&&ft(c)&&Wn(c)){let p=`${((r=e.$)==null?void 0:r.variableName)||`async_block_${Date.now()}`}_state_t`;e.$&&(e.$.asyncStateMachineStructName=p),t.types[c.id]={type:c,cName:p},t.emitter.emitDeclarationLine(`typedef struct ${p}_struct ${p}; // Forward declaration for async state machine`)}}if(Xn(e)){let c=(i=e.$)==null?void 0:i.type;if(c&&ft(c)&&Wn(c)){let f=((o=e.$)==null?void 0:o.variableName)||`io_async_block_${Date.now()}`,p=!!((a=e.$)!=null&&a.awaitAnalysis),d=p?`${f}_state_t`:`${f}_sync_fut_t`;e.$&&(e.$.asyncStateMachineStructName=d),t.types[c.id]={type:c,cName:d},t.emitter.emitDeclarationLine(`typedef struct ${d}_struct ${d}; // Forward declaration for io.async ${p?"state machine":"sync future"}`)}}(Vr(e)||zu(e))&&(t.usesAsync=!0);{let c=(s=u.func.$)==null?void 0:s.type;c&&"isExtern"in c&&c.isExtern==="yo"&&"externName"in c&&typeof c.externName=="string"&&Jb(c.externName)&&(t.usesAsync=!0)}{let c=(l=u.func.$)==null?void 0:l.type;c&&"isExtern"in c&&c.isExtern==="yo"&&"externName"in c&&typeof c.externName=="string"&&(c.externName==="__yo_thread_spawn"||c.externName==="__yo_worker_spawn")&&(t.usesParallelism=!0)}for(let c of u.args)Pd(c,t)}}function zd(e,t,n){var C,k,A,N,x,V,I,D,P,O,J,U;let r=(C=e.$)==null?void 0:C.type;if(!r||!ft(r))return"/* Error: io.async must return a Future type */";let i=Wn(r);if(!i)return"/* Error: Could not extract Future module type */";let o=i.isFuture.outputType;if(B(o))if(o.resolvedConcreteType)o=o.resolvedConcreteType;else{let W=(A=(k=e.$)==null?void 0:k.runtimeArgExprsInOrder)==null?void 0:A[0],q=(N=W==null?void 0:W.$)==null?void 0:N.closureFunctionValue;if(q&&we(q)){let j=(V=(x=q.type)==null?void 0:x.return)==null?void 0:V.type;if(j&&B(j)&&j.resolvedConcreteType)o=j.resolvedConcreteType;else if((D=(I=q.body)==null?void 0:I.$)!=null&&D.type){let ue=q.body.$.type;B(ue)&&ue.resolvedConcreteType?o=ue.resolvedConcreteType:B(ue)||(o=ue)}}}let a=H(o,n),s=(P=e.$)==null?void 0:P.asyncStateMachineStructName;if(!s)return"/* Error: Missing sync future struct name */";let l=`${s}_dispose`,u=`${s}_resume`,c=n.emitter,_=(J=(O=e.$)==null?void 0:O.runtimeArgExprsInOrder)==null?void 0:J[0];if(!(_!=null&&_.$))return"/* Error: Missing closure argument for io.async */";let f=G(_,t,n),p=_.$.type,d,g;if(B(p)&&p.resolvedConcreteType){let W=p.resolvedConcreteType,q=n.implClosureCallMap.get(W.id);q&&(d=q.functionCName);let j=n.types[W.id];j&&(g=j.cName)}if(!d||!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;"),We(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 m="";for(let W in n.functions){let q=n.functions[W];if(q.cName===d){let j=An(q.value.type);j.length>0&&(m=", "+j.map(ue=>`(void*)sm->__capture.${ue.fieldPath.join(".")}`).join(", "));break}}c.emitDeclarationLine(`void ${u}(void* ptr) {`),c.emitDeclarationLine(` ${s}* sm = (${s}*)ptr;`),We(o)?c.emitDeclarationLine(` ${d}(&sm->__capture${m});`):c.emitDeclarationLine(` sm->result = ${d}(&sm->__capture${m});`),m&&(c.emitDeclarationLine(" if (__yo_effect_escaped) {"),c.emitDeclarationLine(" __yo_effect_escaped = 0;"),c.emitDeclarationLine(" sm->state = -2;"),c.emitDeclarationLine(" __yo_decr_rc(ptr);"),c.emitDeclarationLine(" return;"),c.emitDeclarationLine(" }")),c.emitDeclarationLine(" sm->state = -1;"),c.emitDeclarationLine(" void (*continuation)(void*) = sm->continuation_fn;"),c.emitDeclarationLine(" if (continuation) {"),c.emitDeclarationLine(" void* cont_sm = sm->continuation_sm;"),c.emitDeclarationLine(" continuation(cont_sm);"),c.emitDeclarationLine(" }"),c.emitDeclarationLine(" __yo_decr_rc(ptr);"),c.emitDeclarationLine("}"),c.emitDeclarationLine("");let h=_.$.captureType,v=h&&ht(h)?io(h,n):void 0,T=h&&ht(h)?ri(h,n):void 0,$=io(o,n);c.emitDeclarationLine(`void ${l}(void* ptr) {`),(v||$)&&(c.emitDeclarationLine(` ${s}* sm = (${s}*)ptr;`),v&&(c.emitDeclarationLine(" // Drop captured variables (future owns its references)"),c.emitDeclarationLine(` ${v}(sm->__capture);`)),$&&(c.emitDeclarationLine(" if (sm->state == -1) {"),c.emitDeclarationLine(` ${$}(sm->result);`),c.emitDeclarationLine(" }"))),c.emitDeclarationLine("}"),c.emitDeclarationLine("");let b=((U=e.$)==null?void 0:U.variableName)||"__io_async_result",w=an(r,b,n);if(c.emitLine(`${t}${w} = (${s}*)__yo_malloc(sizeof(${s}));`),c.emitLine(`${t}memset(${b}, 0, sizeof(${s}));`),c.emitLine(`${t}${b}->header.ref_count = 1;`),n.needsCycleGC&&(c.emitLine(`${t}${b}->header.gc_flags = 0;`),c.emitLine(`${t}${b}->header.gc_mark = __YO_GC_UNMARKED;`),c.emitLine(`${t}${b}->header.gc_next = NULL;`),c.emitLine(`${t}${b}->header.gc_prev = NULL;`)),n.needsCycleGC)c.emitLine(`${t}${b}->header.dispose_fn = (void(*)(void*))${l};`);else{n.disposeTypeIds||(n.disposeTypeIds=new Map,n.nextDisposeTypeId=1);let W=n.disposeTypeIds.get(l);W===void 0&&(W=n.nextDisposeTypeId,n.nextDisposeTypeId=W+1,n.disposeTypeIds.set(l,W)),c.emitLine(`${t}${b}->header.type_id = ${W};`)}return n.needsCycleGC&&c.emitLine(`${t}${b}->header.traverse_fn = NULL;`),c.emitLine(`${t}${b}->__capture = ${f};`),T&&c.emitLine(`${t}${b}->__capture = ${T}(${b}->__capture);`),c.emitLine(`${t}${b}->state = 0;`),c.emitLine(`${t}${b}->__yo_resume_fn = ${u};`),c.emitLine(`${t}${b}->continuation_fn = NULL;`),c.emitLine(`${t}${b}->continuation_sm = NULL;`),b}var Zb,A_=Z(()=>{fi();qt();Te();Ne();at();Fe();zo();Ea();Wt();tc();kr();yn();Zb=["__yo_poll_","__yo_fs_event_","__yo_async_"]});function Ud(e,t){for(let i=0;i<e.fields.length;i++){let o=e.fields[i];we(o)&&(Eo(o.type,t),Uo(o.body,t))}if(t.moduleLevelInitExprs)for(let i of t.moduleLevelInitExprs)Uo(i,t);let n=new Set,r=!0;for(;r;){r=!1;for(let i in t.functions){if(n.has(i))continue;n.add(i),r=!0;let o=t.functions[i];if(Eo(o.value.type,t),o.value.specializedType&&Eo(o.value.specializedType,t),Uo(o.value.body,t),o.value.calledComptimeFunctionCaches)for(let a of o.value.calledComptimeFunctionCaches)a.value&&a.value.type&&Yn(a.value.type,t),Uo(a.body,t)}}}function Eo(e,t){for(let n of e.parameters)Yn(n.type,t);for(let n of e.forallParameters)Yn(n.type,t);Yn(e.return.type,t)}function Uo(e,t){var n;if(e.$&&e.$.type&&Yn(e.$.type,t),e.$&&e.$.value&&we(e.$.value)){let r=e.$.value;r.isControlFunction?(Eo(r.type,t),qn(r.body,t)):t.functions[r.funcId]||r.type.parameters.map(a=>a.type).some(a=>B(a)&&ft(a)&&!a.resolvedConcreteType)||(t.functions[r.funcId]={value:r,cName:Ae(r.funcId)},Eo(r.type,t),qn(r.body,t))}if(e.$&&e.$.deferredDropExpressions&&e.$.deferredDropExpressions.length>0)for(let r of e.$.deferredDropExpressions)Uo(r,t);if(e.$&&e.$.macroExpansion&&Uo(e.$.macroExpansion,t),e.$&&e.$.runtimeDestructurings)for(let{type:r}of e.$.runtimeDestructurings)Yn(r,t);if(e.$&&e.$.captureType&&Ue(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)Yn(i.type,t);for(let i of r.trait.fields)if(i.assignedValue&&we(i.assignedValue)){let o=i.assignedValue;t.functions[o.funcId]||(t.functions[o.funcId]={value:o,cName:o.funcId},Eo(o.type,t),qn(o.body,t))}}}switch(e.tag){case"FnCall":if(E(e,R.test))break;Uo(e.func,t);for(let r of e.args)Uo(r,t);break;case"Atom":(n=e.$)!=null&&n.value&&Y(e.$.value)&&Yn(e.$.value.value,t);break}}function Yn(e,t){if(!t.types[e.id]){if(B(e)&&tr(e)){if(e.resolvedConcreteType){Yn(e.resolvedConcreteType,t);return}let n=pr(e);n&&Yn(n,t);return}if(B(e)&&ft(e)){let n=Wn(e);n&&Yn(n.isFuture.outputType,t);return}if(B(e)&&e.resolvedConcreteType){Yn(e.resolvedConcreteType,t);return}if(!Ye(e)){if(Ue(e)||Kt(e)||Ze(e)||gt(e)||dt(e)||it(e)||$t(e)||Vt(e)||Vn(e)||Nn(e)){let n=Vt(e)?H(e,t):e.isExtern==="c"&&e.externName?e.externName:`__yo_${e.id}`;if(t.types[e.id]={type:e,cName:n},Ue(e))for(let r of e.fields)Yn(r.type,t);if(Ze(e)){for(let r of e.variants)if(r.fields)for(let i of r.fields)Yn(i.type,t)}if(Kt(e))for(let r of e.fields)Yn(r.type,t);if(dt(e)){let r=e;for(let i of r.requiredTraits)Yn(i.traitType,t)}if(Vn(e)){let r=e;Yn(r.childType,t),H(r,t)}if(Nn(e)){let r=e;Yn(r.childType,t),H(r,t)}if(Vt(e)&&Yn(e.childType,t),it(e)||$t(e)){for(let r of e.fields)Yn(r.type,t);for(let r of e.fields)if(r.assignedValue&&we(r.assignedValue)){let i=r.assignedValue;t.functions[i.funcId]||(t.functions[i.funcId]={value:i,cName:Ae(i.funcId)},Eo(i.type,t),qn(i.body,t))}else if(r.assignedValue&&(xt(r.assignedValue)||vn(r.assignedValue))){let i=r.assignedValue;vl(i,t)}}}else if(ut(e)){let n=e,r=n.childType,i=n.length;if(Rt(i)){Yn(r,t);let o=H(r,t),a=`Array_${Ae(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(ot(e)){if(Yn(e.childType,t),Vt(e.childType)){let r=e.childType.childType;Yn(r,t);let i=H(r,t),o=`Slice_${Ae(i)}`;t.sliceStructTypes.has(o)||t.sliceStructTypes.set(o,{childType:i})}t.types[e.id]={type:e,cName:H(e,t)}}else Td.has(e.tag)&&(t.types[e.id]={type:e,cName:H(e,t)});e.trait&&Yn(e.trait,t)}}}var S_=Z(()=>{qt();Te();Ne();at();Fe();pl();I_();Wt()});function $a(e){var t,n,r;if(e.$&&e.$.value&&Me(e.$.value)&&!(ne(e.$.type)&&e.$.type.isExtern)){if(!We(e.$.type))return!0}if(S(e)){if($a(e.func))return!0;for(let i of e.args)if(!((t=i.$)!=null&&t.type&&We(i.$.type))&&$a(i))return!0}if(e.$&&e.$.macroExpansion){if(e.$.type&&We(e.$.type))return!1;if($a(e.$.macroExpansion))return!0}if((n=e.$)!=null&&n.deferredDupExpressions){for(let i of e.$.deferredDupExpressions)if($a(i))return!0}if((r=e.$)!=null&&r.deferredDropExpressions){for(let i of e.$.deferredDropExpressions)if($a(i))return!0}return!1}function vl(e,t,n=!0){for(let r=0;r<e.fields.length;r++){let i=e.fields[r],o=e.type.fields[r];if(we(i)){let a=o.label;if(a==="main")t.functions[i.funcId]={value:i,cName:"__yo_user_main"};else if(t.isLibrary)if(n&&t.currentModuleId&&i.funcId.startsWith(`fn_${t.currentModuleId}_`)){let l=Ae(a);Object.values(t.functions).some(c=>c.cName===l)?t.functions[i.funcId]={value:i,cName:Ae(i.funcId)}:(t.functions[i.funcId]={value:i,cName:l},t.exportedFunctionLabels||(t.exportedFunctionLabels=new Map),t.exportedFunctionLabels.set(i.funcId,a))}else t.functions[i.funcId]={value:i,cName:Ae(i.funcId)};else t.functions[i.funcId]={value:i,cName:Ae(i.funcId)};qn(i.body,t)}}}function Bd(e,t){for(let n=0;n<e.fields.length;n++){let r=e.fields[n];r&&we(r)?t.functions[r.funcId]||(r.isModuleEffectMember=!0,t.functions[r.funcId]={value:r,cName:Ae(r.funcId)},qn(r.body,t)):r&&xt(r)&&Bd(r,t)}}function qn(e,t){var i,o,a,s,l,u,c,_,f,p,d,g;if((i=e.$)!=null&&i.value&&xt(e.$.value)){let m=e.$.value;Bd(m,t)}if(S(e)&&E(e,R.test)||S(e)&&E(e,F.comptime_expect_error))return;if(e.$&&e.$.macroExpansion&&qn(e.$.macroExpansion,t),(o=e.$)!=null&&o.effectAnalysis){let m=e.$.effectAnalysis.handlerValue;m&&we(m)&&qn(m.body,t)}if(e.$&&e.$.closureFunctionValue){let m=e.$.closureFunctionValue;t.functions[m.funcId]||(t.functions[m.funcId]={value:m,cName:Ae(m.funcId)},qn(m.body,t))}if((a=e.$)!=null&&a.indexMethodValue&&we(e.$.indexMethodValue)){let m=e.$.indexMethodValue;t.functions[m.funcId]||(t.functions[m.funcId]={value:m,cName:Ae(m.funcId)},qn(m.body,t))}if(S(e)&&e.$&&e.$.dynCallTraitValues&&e.$.dynCallTraitValues.length>0){let m=e.$.type,h=e.args[0];if(dt(m)&&h&&((s=h.$)!=null&&s.type)){let v=h.$.type,T=e.$.dynCallTraitValues;if(T.length>0&&(pn(v)||Yr(v))){let $=Yr(v)?v.fields[0].type:v,b=`${$.id}_${m.id}`;t.dynImpls.set(b,{dynType:m,concreteType:$,dataType:v,traitValues:T})}}}if(S(e)){let m=(l=e.func.$)==null?void 0:l.type,h=(u=e.func.$)==null?void 0:u.value;if(e.func.token.value==="?=")return;if(ne(m)){if(we(h)&&h.isControlFunction){qn(h.body,t);for(let v of e.args)qn(v,t);return}if(we(h)){if(h.type.return.isCompileTimeOnly||T_(h)&&!h.specializedType)return;if(h.specializedType&&no(h.specializedType)&&An(h.specializedType).length===0){qn(e.func,t);for(let T of e.args)qn(T,t);return}if(!t.functions[h.funcId]){let v=!1;if($a(h.body)){let T=h.specializedType??h.type;if(v=T.implicitParameters.length>0&&(An(T).length>0||!no(h.type)&&h.type.implicitParameters.length>0),!v)return}if(!v&&!(An(h.specializedType??h.type).length>0)&&(h.specializedType??h.type).parameters.map(w=>w.type).some(w=>B(w)&&ft(w)&&!w.resolvedConcreteType))return;t.functions[h.funcId]={value:h,cName:Ae(h.funcId)},qn(h.body,t)}}else if(m.isExtern==="c"){let v=m.externName?m.externName:K(e.func)?e.func.token.value:m.id;t.externFunctions[m.id]={type:m,cName:v}}else if(m.isExtern==="yo"){let v=m.externName;if(!(v&&v.startsWith("__yo_"))){let T=v?Ae(v):K(e.func)?Ae(e.func.token.value):Ae(m.id);t.externFunctions[m.id]={type:m,cName:T}}}}qn(e.func,t);for(let v of e.args)qn(v,t)}let n=(c=e.$)==null?void 0:c.type,r=(_=e.$)==null?void 0:_.value;if(ne(n)){if(we(r)&&r.isControlFunction){if(r.isModuleEffectMember=!0,t.functions[r.funcId]||(t.functions[r.funcId]={value:r,cName:Ae(r.funcId)}),r.specializedFunctionCaches)for(let m of r.specializedFunctionCaches){let h=m.specializedFunction;h&&!t.functions[h.funcId]&&(h.isModuleEffectMember=!0,t.functions[h.funcId]={value:h,cName:Ae(h.funcId)},qn(h.body,t))}qn(r.body,t);return}if(we(r)){if(T_(r)&&!r.specializedFunctionCaches||t.functions[r.funcId])return;if($a(r.body))return;t.functions[r.funcId]={value:r,cName:Ae(r.funcId)},qn(r.body,t)}}if(Y((f=e.$)==null?void 0:f.value)&&Yn(e.$.value.value,t),(p=e.$)!=null&&p.deferredDupExpressions)for(let m of e.$.deferredDupExpressions)qn(m,t);if((d=e.$)!=null&&d.deferredDropExpressions)for(let m of e.$.deferredDropExpressions)qn(m,t);if((g=e.$)!=null&&g.dynCallTraitValues)for(let m of e.$.dynCallTraitValues)vl(m,t,!1)}function Gd(e){let t=F.dispose[0];for(let n in e.types){let{type:r}=e.types[n];if(!Ue(r)||!r.isReferenceSemantics)continue;let i=pi({concreteType:r,methodName:t,env:r.env});for(let o of i)if(o.value&&we(o.value)){let a=o.value;if(e.functions[a.funcId])continue;a.funcName||(a.funcName=t),e.functions[a.funcId]={value:a,cName:Ae(a.funcId)},Eo(a.type,e),qn(a.body,e)}}}var I_=Z(()=>{qt();to();Te();Ne();Fe();S_();Wt();Ea()});function Wd(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 Yd(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=B(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(`static ${u}* __yo_new_${u}(${c} value) {`),t.emitLine(` ${u}* box = (${u}*)__yo_malloc(sizeof(${u}));`),t.emitLine(" box->header.ref_count = 1;"),e.needsCycleGC&&(t.emitLine(" box->header.gc_flags = 0;"),t.emitLine(" box->header.gc_mark = __YO_GC_UNMARKED;"),t.emitLine(" box->header.gc_next = NULL;"),t.emitLine(" box->header.gc_prev = NULL;"));let _=`__yo_dispose_${u}`;if(e.needsCycleGC)t.emitLine(` box->header.dispose_fn = ${_};`);else{e.disposeTypeIds||(e.disposeTypeIds=new Map,e.nextDisposeTypeId=1);let d=e.disposeTypeIds.get(_);d===void 0&&(d=e.nextDisposeTypeId,e.nextDisposeTypeId=d+1,e.disposeTypeIds.set(_,d)),t.emitLine(` box->header.type_id = ${d};`)}e.needsCycleGC&&t.emitLine(" box->header.traverse_fn = NULL; // TODO: Set if value contains GC types"),t.emitLine(" box->value = value;"),t.emitLine(" return box;"),t.emitLine("}"),t.emitLine(""),t.emitLine(`static void __yo_dispose_${u}(void* ptr) {`),t.emitLine(` ${u}* box = (${u}*)ptr;`);let p=(i=(B(a.concreteType)&&a.concreteType.resolvedConcreteType?a.concreteType.resolvedConcreteType:a.concreteType).trait)==null?void 0:i.fields.find(d=>d.label===F.___drop[0]);if(p&&p.assignedValue&&we(p.assignedValue)){let d=(o=e.functions[p.assignedValue.funcId])==null?void 0:o.cName;d&&t.emitLine(` ${d}(box->value);`)}t.emitLine("}"),t.emitLine("")}}function qd(e){var n,r,i,o;let t=e.emitter;if(e.dynImpls.size!==0){t.emitDeclarationLine(""),t.emitDeclarationLine("// === Dyn Wrapper Functions ==="),t.emitDeclarationLine("// Wrappers that unwrap boxed values and call impl methods"),t.emitDeclarationLine("");for(let[a,s]of e.dynImpls){let l=s.dataType,u=new Set([F.___dup[0],F.___drop[0],F.___dispose[0],F.dispose[0]]);for(let{traitType:c}of s.dynType.requiredTraits){if(!xn(c))continue;let _=c.isFn.callType,f=H(_.return.type,e),p=`__yo_wrap_${a}_call`,d=["void* self_ptr"];for(let g=0;g<_.parameters.length;g++){let m=_.parameters[g],h=H(m.type,e);d.push(`${h} arg${g+1}`)}if(t.emitDeclarationLine(`static ${f} ${p}(${d.join(", ")}) {`),Yr(l)){let g=((n=e.types[l.id])==null?void 0:n.cName)||`unknown_${l.id}`,m=Ae(l.fields[0].label);t.emitDeclarationLine(` ${g}* box = (${g}*)self_ptr;`);let h=l.fields[0].type,v=B(h)&&h.resolvedConcreteType?h.resolvedConcreteType:h,T=e.implClosureCallMap.get(v.id),$=(()=>{var w;if(T)return T.functionCName;for(let[,C]of Object.entries(e.functions)){let A=C.value.closureInfo;if(((w=A==null?void 0:A.captureType)==null?void 0:w.id)===v.id)return C.cName}})(),b=[];if($){b.push(`(void*)&box->${m}`);for(let w=0;w<_.parameters.length;w++)b.push(`arg${w+1}`);uo(_.return.type)?t.emitDeclarationLine(` ${$}(${b.join(", ")});`):t.emitDeclarationLine(` return ${$}(${b.join(", ")});`)}else{b.push(`box->${m}.data`);for(let w=0;w<_.parameters.length;w++)b.push(`arg${w+1}`);uo(_.return.type)?t.emitDeclarationLine(` box->${m}.call(${b.join(", ")});`):t.emitDeclarationLine(` return box->${m}.call(${b.join(", ")});`)}}else{t.emitDeclarationLine(" (void)self_ptr; /* Dyn(Fn): expected Box(...) data */");for(let g=0;g<_.parameters.length;g++)t.emitDeclarationLine(` (void)arg${g+1};`);uo(_.return.type)?t.emitDeclarationLine(" return;"):(t.emitDeclarationLine(` ${f} zero = (${f})0;`),t.emitDeclarationLine(" return zero;"))}t.emitDeclarationLine("}"),t.emitDeclarationLine("")}for(let c=0;c<s.dynType.requiredTraits.length;c++){let{traitType:_}=s.dynType.requiredTraits[c];if(xn(_))continue;let f=s.traitValues[c];if(!f){t.emitDeclarationLine(`/* Warning: Module value missing for module ${c} */`);continue}let d=f.type.fields;for(let g=0;g<d.length;g++){let m=d[g];if(m.label==="Self"||u.has(m.label))continue;let h=f.fields[g];if(!h||!we(h)){t.emitDeclarationLine(`/* Warning: Module field ${m.label} is not a function value */`);continue}let v=m.type;if(!ne(v)){t.emitDeclarationLine(`/* Warning: Module field ${m.label} is not a function type */`);continue}let T=h.funcId,$=(r=e.functions[T])==null?void 0:r.cName;if(!$){t.emitDeclarationLine(`/* Warning: Impl function for ${m.label} not found */`);continue}let b=`__yo_wrap_${a}_${m.label}`,w=H(v.return.type,e),C=["void* self_ptr"];for(let x=1;x<v.parameters.length;x++){let V=v.parameters[x],I=H(V.type,e);C.push(`${I} arg${x}`)}t.emitDeclarationLine(`static ${w} ${b}(${C.join(", ")}) {`);let k=(i=v.parameters[0])==null?void 0:i.type,A;if(Yr(l)){let x=((o=e.types[l.id])==null?void 0:o.cName)||`unknown_${l.id}`,V=Ae(l.fields[0].label);t.emitDeclarationLine(` ${x}* box = (${x}*)self_ptr;`),k&&ot(k)?A=`&box->${V}`:A=`box->${V}`}else{let x=H(s.concreteType,e);t.emitDeclarationLine(` ${x} concrete_value = (${x})self_ptr;`),k&&ot(k)?A="&concrete_value":A="concrete_value"}let N=[A];for(let x=1;x<v.parameters.length;x++)N.push(`arg${x}`);uo(v.return.type)?t.emitDeclarationLine(` ${$}(${N.join(", ")});`):t.emitDeclarationLine(` return ${$}(${N.join(", ")});`),t.emitDeclarationLine("}"),t.emitDeclarationLine("")}}}}}function Hd(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=B(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=B(s.concreteType)&&s.concreteType.resolvedConcreteType?s.concreteType.resolvedConcreteType:s.concreteType,c=((o=e.types[u.id])==null?void 0:o.cName)||`unknown_${u.id}`,_=`__yo_vtable_${a}`,f=`${l}_vtable`,p=`__yo_typeid_${c}`;t.emitDeclarationLine(`// Vtable for impl(${c}, ${s.dynType.requiredTraits.map(({traitType:m})=>m.typeName||"?").join(" + ")})`),t.emitDeclarationLine(`static const ${f} ${_} = {`),t.emitDeclarationLine(` .__yo_type_id = (uintptr_t)&${p},`);let d=new Set,g=new Set([F.___dup[0],F.___drop[0],F.___dispose[0],F.dispose[0]]);for(let{traitType:m}of s.dynType.requiredTraits){if(xn(m)){let h=`__yo_wrap_${a}_call`;t.emitDeclarationLine(` .call = ${h},`),d.add("call");continue}for(let h of m.fields)if(h.label!=="Self"&&!g.has(h.label)&&!d.has(h.label)&&(d.add(h.label),ne(h.type))){let v=h.type;if(v.parameters.length>0){let T=v.parameters[0];if(T&&T.label==="self"){let $=`__yo_wrap_${a}_${h.label}`;t.emitDeclarationLine(` .${Ae(h.label)} = ${$},`)}}}}t.emitDeclarationLine("};"),t.emitDeclarationLine("")}}var jd=Z(()=>{Te();Ne();Fe();Wt()});function Kd(e,t){let r=ln(t)?"__declspec(thread)":"_Thread_local";e.emitLine(`
196
+ `;if(_.isNewtype&&_.fields.length===1&&e.fields.length===1){let p=lr(e.fields[0],t);return`((${f})(${p}))`}if(_.isReferenceSemantics){let p=e.fields.map(g=>lr(g,t));return`${`__yo_new_${f}`}(${p.join(", ")})`}else{let p=e.fields.map((d,g)=>{let m=d,h=gt(_)?`_${g}`:Le(_.fields[g].label),v=lr(m,t);return`.${h} = ${v}`});return`(${f}){ ${p.join(", ")} }`}}}else if(Jr(e)){let _=e.type,f=H(_,t),p=e.elements.map(d=>lr(d,t));return`(${f}){ .data = { ${p.join(", ")} } }`}else if(we(e)){let _=(l=t.functions[e.funcId])==null?void 0:l.cName;return _||`// Error: No C function name found for function value with ID ${e.funcId}
197
+ `}else if(Y(e)){let _=e.value;if(_)return t.types[_.id]?t.types[_.id].cName:`/* Error: No C type name found for type ${M(_)} */`}else if(Da(e)){let _=e.targetValue[0];if(_){let f=((u=n==null?void 0:n.$)==null?void 0:u.convertedRuntimeType)||((c=n==null?void 0:n.$)==null?void 0:c.type);if(f&&ot(f)){let p=f.childType,d=lr(_,t,{$:{type:p,convertedRuntimeType:p}});if(d&&!d.startsWith("/*")&&!d.startsWith("//"))return`(&${d})`}}return`/* Error: Cannot generate pointer value ${Ct(e)} */`}}return`/* skip generating: ${Ct(e)} */`}var ss=Z(()=>{Ne();at();Fe();ur();Wt()});function ls(e,t,n){if(e===t)return!0;if(e.tag==="FnCall"){if(n&&n(e))return!1;if(ls(e.func,t,n))return!0;for(let r of e.args)if(ls(r,t,n))return!0}return!1}function Db(e,t,n){for(let r=0;r<t.length;r++)if(ls(e,t[r].expr,n))return r;return-1}function $d(e,t,n){let r=[],i=n==null?void 0:n.shouldSkipBody;if(e.tag!=="FnCall"||!E(e,"begin"))return t.length===0?[{stateNumber:0,expressions:[e],suspensionPoint:null}]:[{stateNumber:0,expressions:[e],suspensionPoint:t[0]??null}];let o=e.args,a=[],s=[];for(let l of o){let u=Db(l,t,i),c=(n==null?void 0:n.handleReturnStatements)&&(En(l,"return")||E(l,"return"));if(u!==-1){if(s.push(l),a.push(s),s=[],n!=null&&n.handleSequentialSuspensions)for(let _=u+1;_<t.length&&ls(l,t[_].expr,i);_++)a.push([])}else if(c){s.push(l),a.push(s),s=[];break}else s.push(l)}s.length>0&&a.push(s);for(let l=0;l<a.length;l++){let u=a[l],c=l<t.length?t[l]:null;r.push({stateNumber:l,expressions:u,suspensionPoint:c})}return r}var bd=Z(()=>{Te()});function b_(e,t){let r=$d(e,t,{shouldSkipBody:Xn,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 Mb(e,t){return ls(e,t,Xn)}function Cd(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&&Mb(a,e.awaitPoint.expr),u=e.awaitPoint&&a.tag==="FnCall"&&(E(a,R.while)||E(a,R.cond)||E(a,R.match))&&Cr(a);if((l||u)&&e.awaitPoint)fs(a,e.awaitPoint,e.stateNumber,t,n);else if(s&&r){let c=G(a,t,n);c&&(i.emitLine(`${t}// Store final expression result`),i.emitLine(`${t}sm->result = ${c};`))}else{let c=G(a,t,n);!c||!a.$||tn(a.$.env.modulePath,c)||i.emitLine(`${t}${c};`)}}}function fs(e,t,n,r,i){var a,s;let o=i.emitter;if(e.tag==="FnCall"&&Vr(e)){let l=e.args[0];if(!l){o.emitLine(`${r}// Error: await without argument`);return}if(t.futureVariableId===void 0){let u=G(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"&&E(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"&&Vr(u)){let c=u.args[0];if(!c){o.emitLine(`${r}// Error: await without argument`);return}let _=(a=l.token)==null?void 0:a.value;if(!_||!l.$){o.emitLine(`${r}// Error: Invalid variable name`);return}if(t.futureVariableId===void 0){let f=G(c,r,i);o.emitLine(`${r}// Store Future for await (variable: ${_})`),o.emitLine(`${r}sm->await_future_${t.index} = ${f};`)}else o.emitLine(`${r}// Store Future for await (variable: ${_}) - future already in state machine`);return}if(u.tag==="FnCall"&&E(u,R.cond)){let c;if(l.tag==="Atom"&&l.token.type==="identifier"&&l.$){let _=l.token.value,f=fe(l.$.env,_);f.length>0&&(c=f[f.length-1].id)}ml(u,t,r,i,c);return}if(u.tag==="FnCall"&&E(u,R.match)){let c;if(l.tag==="Atom"&&l.token.type==="identifier"&&l.$){let _=l.token.value,f=fe(l.$.env,_);f.length>0&&(c=f[f.length-1].id)}yl(u,t,r,i,c);return}}if(e.tag==="FnCall"&&E(e,"=")){let l=e.args[0],u=e.args[1];if(l&&u){if(u.tag==="FnCall"&&E(u,R.cond)){let c=G(l,r,i);ml(u,t,r,i,void 0,c||void 0);return}if(u.tag==="FnCall"&&E(u,R.match)){let c=G(l,r,i);yl(u,t,r,i,void 0,c||void 0);return}}}if(e.tag==="FnCall"&&E(e,R.cond)){ml(e,t,r,i);return}if(e.tag==="FnCall"&&E(e,R.match)){yl(e,t,r,i);return}if(e.tag==="FnCall"&&E(e,R.while)){C_(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 ml(e,t,n,r,i,o){var m,h,v,T,$,b,w,C,k,A,N,x,V,I,D,P;let a=r.emitter;if(e.tag!=="FnCall"||!E(e,R.cond)){a.emitLine(`${n}// Error: Expected cond expression`);return}let s=e.args;if(s.length===0){a.emitLine(`${n}// Error: cond must have at least one branch`);return}let l=[],u=-1;for(let O=0;O<s.length;O++){let J=s[O];if(J.tag==="FnCall"&&E(J,"=>")){let U=J.args[0];if(U&&!(It((m=U.$)==null?void 0:m.value)&&U.$.value.value===!1)){u=O;break}}}let c=!1;if(u>=0){let O=s[u];if(O.tag==="FnCall"&&E(O,"=>")){let J=O.args[0];J&&It((h=J.$)==null?void 0:h.value)&&J.$.value.value===!0&&(c=!0)}}if(c&&u>=0){let O=s[u],J=S(O)?O.args[1]:void 0;if(J)if(Po(J)){let j=_s(J,t,n,r),ue=(v=r.asyncWhileLoopInfo)==null?void 0:v.get(t.index);if(ue&&j.length>0){let ye=(T=r.asyncCondBranchInfo)==null?void 0:T.get(t.index),X=(ye==null?void 0:ye.branches.some(re=>re.hasAwait&&re.remainingExprs&&re.remainingExprs.length>0))??!1;ue.condBranchPostWhileExprs={branchIndex:u,condBranchFieldIndex:t.index,exprs:j,deferredDropExpressions:($=J.$)==null?void 0:$.deferredDropExpressions,skipCondBranchCheck:X},l.push({index:u,value:J,hasAwait:!0,remainingExprs:[],deferredDropExpressions:(b=J.$)==null?void 0:b.deferredDropExpressions})}else l.push({index:u,value:J,hasAwait:!0,remainingExprs:j,deferredDropExpressions:(w=J.$)==null?void 0:w.deferredDropExpressions})}else{if(us(e,J,r,i,o))cs(J,n,r);else if(S(J)&&E(J,R.begin)){let j=J.args;for(let ue=0;ue<j.length;ue++){let ye=j[ue],X=G(ye,n,r);if(X==="break"&&t.isInsideWhile)a.emitLine(`${n}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${n}goto while_loop_${t.index}_end;`);else{let re=X==="break"||X==="continue"||(X==null?void 0:X.includes("return"));X&&(re||ye.$&&!tn(ye.$.env.modulePath,X))&&a.emitLine(`${n}${X};`)}}if((C=J.$)!=null&&C.deferredDropExpressions)for(let ue of J.$.deferredDropExpressions){let ye=G(ue,n,r);ye&&a.emitLine(`${n}${ye};`)}}else{let j=G(J,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||J.$&&!tn(J.$.env.modulePath,j))&&a.emitLine(`${n}${j};`)}}l.push({index:u,value:J,hasAwait:!1})}r.asyncCondBranchInfo||(r.asyncCondBranchInfo=new Map);let U=r.asyncCondBranchInfo.get(t.index);((U==null?void 0:U.branches.some(q=>q.hasAwait&&q.remainingExprs&&q.remainingExprs.length>0))??!1)||r.asyncCondBranchInfo.set(t.index,{branches:l,targetVariableId:i,targetAssignmentCode:o});return}let _=!1,f=0,p=n;for(let O=0;O<s.length;O++){let J=s[O];if(J.tag!=="FnCall"||!E(J,"=>")){a.emitLine(`${p}// Error: Expected => pair in cond`);continue}let U=J.args[0],W=J.args[1];if(!U||!W){a.emitLine(`${p}// Error: Invalid pair in cond`);continue}if(It((k=U.$)==null?void 0:k.value)&&U.$.value.value===!1)continue;_&&(a.emitLine(`${p}else {`),f++,p+=" ");let q=O===s.length-1&&U.tag==="Atom"&&((A=U.token)==null?void 0:A.value)==="true"?null:G(U,p,r);q?a.emitLine(`${p}if (${q}) {`):a.emitLine(`${p}{`),_=!0;let j=`${p} `;if(Po(W)){a.emitLine(`${j}sm->cond_branch_${t.index} = ${O};`);let ye=_s(W,t,j,r),X=(N=r.asyncWhileLoopInfo)==null?void 0:N.get(t.index);if(X&&ye.length>0){let re=(x=r.asyncCondBranchInfo)==null?void 0:x.get(t.index),le=(re==null?void 0:re.branches.some(Oe=>Oe.hasAwait&&Oe.remainingExprs&&Oe.remainingExprs.length>0))??!1;X.condBranchPostWhileExprs={branchIndex:O,condBranchFieldIndex:t.index,exprs:ye,deferredDropExpressions:(V=W.$)==null?void 0:V.deferredDropExpressions,skipCondBranchCheck:le},l.push({index:O,value:W,hasAwait:!0,remainingExprs:[],deferredDropExpressions:(I=W.$)==null?void 0:I.deferredDropExpressions})}else l.push({index:O,value:W,hasAwait:!0,remainingExprs:ye,deferredDropExpressions:(D=W.$)==null?void 0:D.deferredDropExpressions})}else{if(us(e,W,r,i,o))cs(W,j,r);else if(S(W)&&E(W,R.begin)){let ye=W.args;for(let X=0;X<ye.length;X++){let re=ye[X],le=G(re,j,r);if(le==="break"&&t.isInsideWhile)a.emitLine(`${j}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${j}goto while_loop_${t.index}_end;`);else{let Oe=le==="break"||le==="continue"||(le==null?void 0:le.includes("return"));le&&(Oe||re.$&&!tn(re.$.env.modulePath,le))&&a.emitLine(`${j}${le};`)}}if((P=W.$)!=null&&P.deferredDropExpressions)for(let X of W.$.deferredDropExpressions){let re=G(X,j,r);re&&a.emitLine(`${j}${re};`)}}else{let ye=G(W,j,r);if(ye==="break"&&t.isInsideWhile)a.emitLine(`${j}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${j}goto while_loop_${t.index}_end;`);else{let X=ye==="break"||ye==="continue"||(ye==null?void 0:ye.includes("return"));ye&&(X||W.$&&!tn(W.$.env.modulePath,ye))&&a.emitLine(`${j}${ye};`)}}l.push({index:O,value:W,hasAwait:!1})}a.emitLine(`${p}}`)}for(let O=0;O<f;O++)p=p.slice(0,-2),a.emitLine(`${p}}`);r.asyncCondBranchInfo||(r.asyncCondBranchInfo=new Map);let d=r.asyncCondBranchInfo.get(t.index);((d==null?void 0:d.branches.some(O=>O.hasAwait&&O.remainingExprs&&O.remainingExprs.length>0))??!1)||r.asyncCondBranchInfo.set(t.index,{branches:l,targetVariableId:i,targetAssignmentCode:o})}function us(e,t,n,r,i){return!r&&!i&&n.asyncBodyReturnExpr!==void 0&&e===n.asyncBodyReturnExpr&&!!n.inAsyncStateMachine&&!kd(t)}function cs(e,t,n){var o,a;let r=n.emitter,i=We((o=e.$)==null?void 0:o.type);if(S(e)&&E(e,R.begin)){let s=e.args;for(let u=0;u<s.length-1;u++){let c=s[u],_=G(c,t,n);_&&c.$&&!tn(c.$.env.modulePath,_)&&r.emitLine(`${t}${_};`)}let l=s[s.length-1];if(l&&!i){let u=G(l,t,n);u&&r.emitLine(`${t}sm->result = ${u};`)}if((a=e.$)!=null&&a.deferredDropExpressions)for(let u of e.$.deferredDropExpressions){let c=G(u,t,n);c&&r.emitLine(`${t}${c};`)}}else if(!i){let s=G(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=G(s,t,n);l&&l.includes("sm->")&&r.emitLine(`${t}${l};`)}vo({emitter:r,indent:t,resultCode:void 0,debugLabel:n.currentFunctionName}),r.emitLine(`${t}return;`)}function Po(e){if(e.tag==="FnCall"&&Vr(e))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(Po(t))return!0}return!1}function kd(e){if(En(e,"return")||E(e,"return"))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(kd(t))return!0}return!1}function yl(e,t,n,r,i,o){var d,g,m,h,v,T;let a=r.emitter;if(e.tag!=="FnCall"||!E(e,R.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=G(s,n,r),c=(d=s.$)==null?void 0:d.type;if(!c){a.emitLine(`${n}// Error: match value has no type`);return}if((g=e.$)!=null&&g.isPrimitiveMatch){Rb(e,l,u,t,n,r,i,o);return}if(!Ze(c)){a.emitLine(`${n}// Error: match requires an enum type or primitive type`);return}let _=c,f=(m=r.types[_.id])==null?void 0:m.cName;if(!f){a.emitLine(`${n}// Error: enum type has no C name`);return}let p=rr(_);if(p){let $=-1,b=-1,w;for(let C=0;C<l.length;C++){let k=l[C];if(S(k)&&E(k,"=>",2)){let A=k.args[0];if(A&&S(A)&&E(A,"."))$=C;else if(A&&S(A)){let N=A.func;N&&S(N)&&E(N,".")&&(b=C,A.args.length>0&&K(A.args[0])&&(w=A.args[0].token.value))}}}if(a.emitLine(`${n}if (${u} != NULL) {`),b>=0){let C=l[b];if(!S(C))a.emitLine(`${n} // Error: Expected => in case`);else{let k=C.args[1];if(w){let A=r,N=!1,x;if(A.stateMachineVariables){for(let[V,I]of A.stateMachineVariables)if(I.name===w){N=!0,x=V;break}}if(N&&x){let V=dr(x,"local",A.stateMachineFieldAliases);a.emitLine(`${n} sm->${V} = ${u};`)}else a.emitLine(`${n} ${H(p,r)} ${w} = ${u};`)}if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${b};`),Po(k)){let A=_s(k,t,n+" ",r);if(A.length>0){let N=r;N.asyncCondBranchInfo||(N.asyncCondBranchInfo=new Map);let x=N.asyncCondBranchInfo.get(t.index)||{branches:[]};x.branches.push({index:b,value:k,hasAwait:!0,remainingExprs:A,deferredDropExpressions:(h=k.$)==null?void 0:h.deferredDropExpressions}),N.asyncCondBranchInfo.set(t.index,x)}}else if(us(e,k,r,i,o))cs(k,n+" ",r);else{let A=G(k,n+" ",r);if(i){let N=Le(`var_${i}`);A&&a.emitLine(`${n} sm->${N} = ${A};`)}else o?A&&a.emitLine(`${n} ${o} = ${A};`):A&&k.$&&!tn(k.$.env.modulePath,A)&&a.emitLine(`${n} ${A};`)}}}if(a.emitLine(`${n}} else {`),$>=0){let C=l[$];if(!S(C))a.emitLine(`${n} // Error: Expected => in case`);else{let k=C.args[1];if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${$};`),Po(k)){let A=_s(k,t,n+" ",r);if(A.length>0){let N=r;N.asyncCondBranchInfo||(N.asyncCondBranchInfo=new Map);let x=N.asyncCondBranchInfo.get(t.index)||{branches:[]};x.branches.push({index:$,value:k,hasAwait:!0,remainingExprs:A,deferredDropExpressions:(v=k.$)==null?void 0:v.deferredDropExpressions}),N.asyncCondBranchInfo.set(t.index,x)}}else if(us(e,k,r,i,o))cs(k,n+" ",r);else{let A=G(k,n+" ",r);if(i){let N=Le(`var_${i}`);A&&a.emitLine(`${n} sm->${N} = ${A};`)}else o?A&&a.emitLine(`${n} ${o} = ${A};`):A&&k.$&&!tn(k.$.env.modulePath,A)&&a.emitLine(`${n} ${A};`)}}}a.emitLine(`${n}}`)}else{a.emitLine(`${n}switch (${u}.tag) {`);let $=!1;for(let b=0;b<l.length;b++){let w=l[b];if(!S(w)||!E(w,"=>",2))continue;let C=w.args[0],k=w.args[1],A=K(C)&&C.token.value==="_",N;if(!A){if(S(C)&&E(C,".",1))N=C.args[0].token.value;else if(S(C)){let x=C.func;x&&S(x)&&E(x,".",1)&&(N=x.args[0].token.value)}}if(!A&&!N){a.emitLine(`${n} // Error: Could not extract variant name`);continue}if(A)$=!0,a.emitLine(`${n} default: {`);else{let x=`${f.toUpperCase()}_${N.toUpperCase()}`;a.emitLine(`${n} case ${x}: {`)}if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${b};`),S(C)&&C.args.length>=1){let x=C.func;if(x&&S(x)&&E(x,".")){let V=_.variants.find(I=>I.name===N);if(V&&V.fields)for(let I=0;I<Math.min(C.args.length,V.fields.length);I++){let D=C.args[I],P=V.fields[I];if(K(D)&&P){let O=D.token.value,J=Le(O),U=r,W=!1,q;if(U.stateMachineVariables){for(let[ye,X]of U.stateMachineVariables)if(X.name===O){W=!0,q=ye;break}}let j=Le(P.label,P.type.isExtern==="c"),ue=`${u}.data.${N}.${j}`;if(W&&q){let ye=dr(q,"local",U.stateMachineFieldAliases);a.emitLine(`${n} sm->${ye} = ${ue};`)}else{let ye=H(P.type,r);a.emitLine(`${n} ${ye} ${J} = ${ue};`)}}}}}if(Po(k)){let x=_s(k,t,n+" ",r);if(x.length>0){let V=r;V.asyncCondBranchInfo||(V.asyncCondBranchInfo=new Map);let I=V.asyncCondBranchInfo.get(t.index)||{branches:[]};I.branches.push({index:b,value:k,hasAwait:!0,remainingExprs:x,deferredDropExpressions:(T=k.$)==null?void 0:T.deferredDropExpressions}),V.asyncCondBranchInfo.set(t.index,I)}}else if(us(e,k,r,i,o))cs(k,n+" ",r);else{let x=G(k,n+" ",r);if(i){let V=Le(`var_${i}`);x&&a.emitLine(`${n} sm->${V} = ${x};`)}else o?x&&a.emitLine(`${n} ${o} = ${x};`):x&&k.$&&!tn(k.$.env.modulePath,x)&&a.emitLine(`${n} ${x};`)}a.emitLine(`${n} break;`),a.emitLine(`${n} }`)}$||a.emitLine(`${n} default: break;`),a.emitLine(`${n}}`)}}function Ob(e){return S(e)?E(e,"|",2):!1}function $_(e){if(!Ob(e))return[e];if(e.tag!=="FnCall")return[e];let t=e.args[0],n=e.args[1];return[...$_(t),...$_(n)]}function Rb(e,t,n,r,i,o,a,s){var c,_,f;let l=o.emitter,u=[];l.emitLine(`${i}switch (${n}) {`);for(let p=0;p<t.length;p++){let d=t[p];if(!S(d)||!E(d,"=>",2))continue;let g=d.args[0],m=d.args[1];if(En(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 T=lr(v,o);l.emitLine(`${i} case ${T}:`)}}else{let v=$_(g);for(let T of v){let $=(_=T.$)==null?void 0:_.value;if($!==void 0){let b=lr($,o);l.emitLine(`${i} case ${b}:`)}}}}if(l.emitLine(`${i} sm->cond_branch_${r.index} = ${p};`),Po(m)){let h=_s(m,r,i+" ",o);u.push({index:p,value:m,hasAwait:!0,remainingExprs:h,deferredDropExpressions:(f=m.$)==null?void 0:f.deferredDropExpressions})}else{if(us(e,m,o,a,s))cs(m,i+" ",o);else{let h=G(m,i+" ",o);if(a){let v=Le(`var_${a}`);h&&l.emitLine(`${i} sm->${v} = ${h};`)}else s?h&&l.emitLine(`${i} ${s} = ${h};`):h&&m.$&&!tn(m.$.env.modulePath,h)&&l.emitLine(`${i} ${h};`)}u.push({index:p,value:m,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 _s(e,t,n,r){let i=r.emitter,o=[];if(e.tag!=="FnCall"||!E(e,"begin"))return i.emitLine(`${n}// Error: Expected begin block in cond branch with await`),o;let a=e.args,s=!1;for(let l of a){if(s){o.push(l);continue}if(Po(l))if(s=!0,l.tag==="FnCall"&&E(l,":=")){let u=l.args[1];if(u&&u.tag==="FnCall"&&Vr(u)){let c=u.args[0];if(c){let _=G(c,n,r);i.emitLine(`${n}// Store Future for await ${t.index} (cond branch)`),i.emitLine(`${n}sm->await_future_${t.index} = ${_};`)}}}else if(l.tag==="FnCall"&&Vr(l)){let u=l.args[0];if(u)if(t.futureVariableId===void 0){let c=G(u,n,r);i.emitLine(`${n}// Store Future for await ${t.index} (cond branch)`),i.emitLine(`${n}sm->await_future_${t.index} = ${c};`)}else i.emitLine(`${n}// Await will use Future from sm->var_${t.futureVariableId}`)}else if(l.tag==="FnCall"&&E(l,R.cond)){let u=l===a[a.length-1],c=r.asyncBodyReturnExpr;u&&r.asyncBodyReturnExpr!==void 0&&(r.asyncBodyReturnExpr=l),ml(l,t,n,r),r.asyncBodyReturnExpr=c}else if(l.tag==="FnCall"&&E(l,R.match)){let u=l===a[a.length-1],c=r.asyncBodyReturnExpr;u&&r.asyncBodyReturnExpr!==void 0&&(r.asyncBodyReturnExpr=l),yl(l,t,n,r),r.asyncBodyReturnExpr=c}else l.tag==="FnCall"&&E(l,R.while)&&C_(l,t,n,r);else{let u=G(l,n,r);u&&l.$&&!tn(l.$.env.modulePath,u)&&i.emitLine(`${n}${u};`)}}return o}function C_(e,t,n,r){let i=r.emitter;if(e.tag!=="FnCall"||!E(e,"while")){i.emitLine(`${n}// Error: Expected while expression`);return}let o=e.args;if(o.length<2||o.length>3){i.emitLine(`${n}// Error: while must have 2 or 3 arguments (condition, [step,] body)`);return}let a=o[0],s=o.length===3?o[1]:void 0,l=o.length===3?o[2]:o[1],u=zb(l),c;u?(c=r.asyncNextWhileLoopIndex??t.index+1,r.asyncNextWhileLoopIndex=c+1):c=t.index,i.emitLine(`${n}sm->while_loop_${c}_active = true;`),i.emitLine(`${n}while_loop_${c}_start:`);let _=G(a,n,r);i.emitLine(`${n}if (!(${_})) {`),i.emitLine(`${n} sm->while_loop_${c}_active = false;`),i.emitLine(`${n} goto while_loop_${c}_end;`),i.emitLine(`${n}}`);let f=Pb(l,t,n,r,c);if(i.emitLine(`${n}while_loop_${c}_end:`),r.asyncWhileLoopInfo||(r.asyncWhileLoopInfo=new Map),u){let p=r.asyncWhileLoopInfo.get(t.index);p&&(p.outerWhileLoop={whileLoopIndex:c,conditionExpr:a,stepExpr:s,bodyExpr:l,bodyExprsAfterAwait:f})}else r.asyncWhileLoopInfo.set(t.index,{conditionExpr:a,stepExpr:s,bodyExpr:l,bodyExprsAfterAwait:f})}function Pb(e,t,n,r,i){var p;let o=r.emitter,a=[],s=[];e.tag==="FnCall"&&E(e,"begin")?s=e.args:s=[e];let l=-1;for(let d=0;d<s.length;d++){let g=s[d];if(Cr(g)){l=d;break}}if(l===-1)return o.emitLine(`${n}// Error: Expected await in while loop body but none found`),a;let u=r.smWhileBreakInfo,c=r.smWhileContinueInfo,_=r.smWhileBodyDrops;r.smWhileBreakInfo={label:`while_loop_${i}_end`,activeIndex:i},r.smWhileContinueInfo={label:`while_loop_${i}_start`,emitDropsBeforeGoto:!0},r.smWhileBodyDrops=[...((p=e.$)==null?void 0:p.deferredDropExpressions)??[]];for(let d=0;d<l;d++){let g=s[d],m=G(g,n,r);m&&g.$&&!tn(g.$.env.modulePath,m)&&o.emitLine(`${n}${m};`)}r.smWhileBreakInfo=u,r.smWhileContinueInfo=c,r.smWhileBodyDrops=_;let f=s[l];if(S(f)&&E(f,R.while)&&Cr(f)){C_(f,t,n,r);for(let d=l+1;d<s.length;d++)a.push(s[d]);return a}if(S(f)&&E(f,":=")){let d=f.args[1];if(d&&d.tag==="FnCall"&&Vr(d)){let g=d.args[0];if(g){let m=G(g,n,r);o.emitLine(`${n}// Store Future for await ${t.index} (while loop body)`),o.emitLine(`${n}sm->await_future_${t.index} = ${m};`)}}}else if(f.tag==="FnCall"&&Vr(f)){let d=f.args[0];if(d&&t.futureVariableId===void 0){let g=G(d,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(S(f)&&E(f,R.cond)){ml(f,t,n,r,void 0);for(let d=l+1;d<s.length;d++)a.push(s[d]);return a}else if(S(f)&&E(f,R.match)){yl(f,t,n,r);for(let d=l+1;d<s.length;d++)a.push(s[d]);return a}for(let d=l+1;d<s.length;d++)a.push(s[d]);return a}function zb(e){let t=e.tag==="FnCall"&&E(e,"begin")?e.args:[e];for(let n of t)if(n.tag==="FnCall"&&E(n,R.while)&&Cr(n))return!0;return!1}var wd=Z(()=>{mt();fi();Te();Do();gn();Ne();Cn();Fe();ha();ss();yn();bd();zo();Wt()});function Ta(e,t,n){var r,i,o;if(e)switch(e.tag){case"Atom":if(e.$&&e.token.type==="identifier"){let a=e.token.value,s=fe(e.$.env,a);if(s.length>0){let l=s[s.length-1];if(l&&!l.isCompileTimeOnly){let u=n.get(l.id)??l.id,c=l.isOwningTheSameRcValueAs?l.isOwningTheSameRcValueAs.id:u;t.add(c)}}}break;case"FnCall":if(Xn(e)){if((r=e.$)!=null&&r.deferredDupExpressions)for(let a of e.$.deferredDupExpressions)Ta(a,t,n);break}Ta(e.func,t,n);for(let a of e.args)Ta(a,t,n);if((i=e.$)!=null&&i.deferredDropExpressions)for(let a of e.$.deferredDropExpressions)Ta(a,t,n);if((o=e.$)!=null&&o.deferredDupExpressions)for(let a of e.$.deferredDupExpressions)Ta(a,t,n);break}}function Ju(e,t){var _,f,p,d;let{awaitPoints:n,capturedVariables:r,variableIdRemapping:i}=t;if(n.length===0)return{crossBoundaryIds:new Set,awaitFutureTempVarAliases:new Map,variableSegments:new Map};let o=new Set,a=b_(e,n);for(let g of a)((_=g.awaitPoint)!=null&&_.isInsideCond||(f=g.awaitPoint)!=null&&f.isInsideWhile)&&o.add(g.stateNumber);let s=new Map;for(let g of a){let m=new Set;for(let h of g.expressions)Ta(h,m,i);for(let h of m){let v=s.get(h);v||(v=new Set,s.set(h,v)),v.add(g.stateNumber)}}let l=-1;if((p=e.$)!=null&&p.deferredDropExpressions){let g=new Set;for(let m of e.$.deferredDropExpressions)Ta(m,g,i);for(let m of g){let h=s.get(m);h||(h=new Set,s.set(m,h)),h.add(l)}}let u=new Set;for(let g of r){if(g.kind==="outer")continue;let m=s.get(g.id);if(!m)u.add(g.id);else if(m.size>1)u.add(g.id);else if(m.has(l))u.add(g.id);else{let h=m.values().next().value;o.has(h)&&u.add(g.id)}}let c=new Map;for(let g of n){if(g.futureVariableId!==void 0)continue;let m=g.expr;if(!S(m))continue;let h=m.args[0];if(!h)continue;let v=(d=h.$)==null?void 0:d.variableName;if(!v)continue;let T=r.find($=>$.kind==="local"&&($.name===v||$.id===v));T&&(c.set(T.id,`await_future_${g.index}`),u.delete(T.id))}return{crossBoundaryIds:u,awaitFutureTempVarAliases:c,variableSegments:s}}function ec(e,t,n,r,i){let o={slotAliases:new Map,slots:[]},a=n.filter(f=>f.kind==="local"&&e.has(f.id)&&!r.has(f.id)&&!ht(f.type));if(a.length<2)return o;let s=new Map;for(let f of a){let p=t.get(f.id);if(!p||p.size===0)continue;let d=[...p].filter(h=>h>=0);if(d.length===0)continue;let g=Math.min(...d),m=Math.max(...d);s.set(f.id,[g,m])}if(s.size<2)return o;let l=new Map;for(let[f]of s){let p=a.find(m=>m.id===f);if(!p)continue;let d=H(p.type,i),g=l.get(d);g||(g=[],l.set(d,g)),g.push(f)}let u=new Map,c=[],_=0;for(let[f,p]of l){if(p.length<2)continue;let d=new Map;for(let h of p)d.set(h,new Set);for(let h=0;h<p.length;h++)for(let v=h+1;v<p.length;v++){let[T,$]=s.get(p[h]),[b,w]=s.get(p[v]);T<=w&&b<=$&&(d.get(p[h]).add(p[v]),d.get(p[v]).add(p[h]))}let g=new Map;for(let h of p){let v=new Set;for(let $ of d.get(h))g.has($)&&v.add(g.get($));let T=0;for(;v.has(T);)T++;g.set(h,T)}let m=new Map;for(let[h,v]of g){let T=m.get(v);T||(T=[],m.set(v,T)),T.push(h)}for(let[,h]of m){if(h.length<2)continue;let v=`slot_${_}`,T=h.map($=>{var b;return((b=a.find(w=>w.id===$))==null?void 0:b.name)??$});for(let $ of h)u.set($,v);c.push({fieldName:v,cType:f,variableNames:T}),_++}}return{slotAliases:u,slots:c}}function w_(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 gl(e){return!e||!B(e)?!1:e.resolvedConcreteType&&B(e.resolvedConcreteType)&&e.resolvedConcreteType.isExtern?!0:e.requiredTraits.some(t=>Qu(t.traitType))}function dr(e,t,n){if(t==="outer")return`__capture.${Le(e)}`;let r=n==null?void 0:n.get(e);return r||Le(`var_${e}`)}function Ld(e,t,n,r,i,o,a,s){var m,h,v,T,$,b,w,C,k,A,N,x,V,I,D,P,O,J,U,W,q,j,ue,ye,X,re,le;let l=s.emitter,c=Wn(o).isFuture.outputType,_=We(c);s.asyncCondBranchInfo=new Map,s.asyncWhileLoopInfo=new Map,s.asyncNextWhileLoopIndex=i.awaitPoints.length;let f=b_(e,i.awaitPoints),p=e.tag==="FnCall"&&E(e,"begin")?e.args:[e],d=p.length>0?p[p.length-1]:void 0;l.emitLine(`// Resume function for async block ${t}`),l.emitLine(`void ${r}(${n}* sm) {`),l.emitLine(` ASYNC_DEBUG("${t}_resume: state=%d\\n", sm->state);`),l.emitLine(" switch (sm->state) {");let g=[];for(let Oe=0;Oe<f.length;Oe++){let $e=f[Oe];if(!$e)continue;let ae=$e.stateNumber,Ae=Oe===f.length-1;if(l.emitLine(`
198
+ state_${ae}:`),l.emitLine(` case ${ae}: { // State ${ae}`),l.emitLine(` ASYNC_DEBUG("${t}: Entering state ${ae}\\n");`),ae>0&&i.awaitPoints[ae-1]){let lt=i.awaitPoints[ae-1],kt=w_(lt,i);lt.isInsideCond&&l.emitLine(` if (sm->${kt} != NULL) {`);let kn=We(lt.resultType)||B(lt.resultType)&&!lt.resultType.resolvedConcreteType;if(l.emitLine(" // Check if the awaited Future was aborted"),l.emitLine(` if (sm->${kt}->state == -2) {`),l.emitLine(` __yo_decr_rc((void*)sm->${kt});`),l.emitLine(` sm->${kt} = NULL;`),ai({emitter:l,indent:" ",debugLabel:t}),l.emitLine(" }"),lt&&!kn){l.emitLine(` // Extract result from await ${ae-1}`),l.emitLine(` int state_before_read = sm->${kt}->state;`),l.emitLine(` ASYNC_DEBUG("${t}: Reading result from await ${ae-1}, state=%d\\n", state_before_read);`);let je=!!lt.isInsideCond,Be;if(je?Be=`sm->await_result_${ae-1}`:lt.targetVariableId&&(Be=`sm->${dr(lt.targetVariableId,"local",s.stateMachineFieldAliases)}`),Be)if(ht(lt.resultType)){let tt=ri(lt.resultType,s);tt?l.emitLine(` ${Be} = ${tt}(sm->${kt}->result);`):(l.emitLine(" /* Warning: No ___dup function found for result type, shallow copy may cause use-after-free */"),l.emitLine(` ${Be} = sm->${kt}->result;`))}else l.emitLine(` ${Be} = sm->${kt}->result;`);if(je&&lt.targetVariableId){let tt=dr(lt.targetVariableId,"local",s.stateMachineFieldAliases);l.emitLine(` sm->${tt} = sm->await_result_${ae-1};`)}l.emitLine("")}if(!lt.futureVariableId){let je=lt.expr;if(je.tag==="FnCall"){let Be=je.args[0],tt=(m=Be==null?void 0:Be.$)==null?void 0:m.type;tt&&(B(tt)||dt(tt))&&(l.emitLine(` if (sm->${kt} != NULL) { __yo_decr_rc((void*)sm->${kt}); sm->${kt} = NULL; }`),l.emitLine(""))}}let Ot=s;if(lt){let je=(h=Ot.asyncCondBranchInfo)==null?void 0:h.get(lt.index);if(je&&je.branches.some(tt=>tt.hasAwait)){let tt=je.condBranchFieldIndex??lt.index,Bt=tt===-1;l.emitLine(" // Execute remaining code from chosen cond branch"),Bt||l.emitLine(` switch (sm->cond_branch_${tt}) {`);let jn=((v=$e.awaitPoint)==null?void 0:v.isInsideCond)??!1;for(let Xt of je.branches)if(Xt.hasAwait){if(Bt||l.emitLine(` case ${Xt.index}: {`),l.emitLine(` ASYNC_DEBUG("${t}: Executing remaining code from branch ${Xt.index}\\n");`),Xt.remainingExprs&&Xt.remainingExprs.length>0){let Sn=s.inAsyncStateMachine,te=s.stateMachineVariables,ve=s.variableIdRemapping,_e=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let Ce=(T=Ot.asyncWhileLoopInfo)==null?void 0:T.get(lt.index);s.pendingDeferredDrops=[...Xt.deferredDropExpressions??[],...(($=Ce==null?void 0:Ce.bodyExpr.$)==null?void 0:$.deferredDropExpressions)??[],...((b=e.$)==null?void 0:b.deferredDropExpressions)??[]];let xe=new Map;for(let ie of i.capturedVariables)xe.set(ie.id,ie);if(a)for(let ie of a.fields)xe.set(ie.label,{id:ie.label,name:ie.label,type:ie.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=xe;let Pe=!1,st=[],Je=je.targetAssignmentCode;for(let ie=0;ie<Xt.remainingExprs.length;ie++){let ee=Xt.remainingExprs[ie],Q=ie===Xt.remainingExprs.length-1;if(Pe){st.push(ee);continue}if(jn&&Cr(ee)){Pe=!0,k_(ee,$e.awaitPoint,i," ",s);continue}let oe=G(ee," ",s);!oe||!ee.$||tn(ee.$.env.modulePath,oe)||(Q&&Je?l.emitLine(` ${Je} = ${oe};`):l.emitLine(` ${oe};`))}if(Xt.remainingExprs.length===0&&Je&&l.emitLine(` ${Je} = sm->await_result_${lt.index};`),Pe&&$e.awaitPoint){let ie=$e.awaitPoint.index;Ot.asyncCondBranchInfo||(Ot.asyncCondBranchInfo=new Map);let ee=Ot.asyncCondBranchInfo.get(ie);if(ee)ee.chainedBranches||(ee.chainedBranches=[]),ee.chainedBranches.push({branches:[{index:Xt.index,value:Xt.value,hasAwait:st.length>0||st.some(Q=>Cr(Q)),remainingExprs:st,deferredDropExpressions:Xt.deferredDropExpressions}],condBranchFieldIndex:tt});else{let Q={branches:[{index:Xt.index,value:Xt.value,hasAwait:st.length>0||st.some(oe=>Cr(oe)),remainingExprs:st,deferredDropExpressions:Xt.deferredDropExpressions}],condBranchFieldIndex:tt};Ot.asyncCondBranchInfo.set(ie,Q)}}else if(Xt.deferredDropExpressions)for(let ie of Xt.deferredDropExpressions){let ee=G(ie," ",s);ee&&ee.includes("sm->")&&l.emitLine(` ${ee};`)}s.inAsyncStateMachine=Sn,s.stateMachineVariables=te,s.variableIdRemapping=ve,s.pendingDeferredDrops=_e}Bt||(l.emitLine(" break;"),l.emitLine(" }"))}if(Bt||l.emitLine(" }"),je.chainedBranches){for(let Xt of je.chainedBranches)for(let Sn of Xt.branches)if(Sn.hasAwait&&Sn.remainingExprs&&Sn.remainingExprs.length>0){let te=s.inAsyncStateMachine,ve=s.stateMachineVariables,_e=s.variableIdRemapping,Ce=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let xe=(w=Ot.asyncWhileLoopInfo)==null?void 0:w.get(lt.index);s.pendingDeferredDrops=[...Sn.deferredDropExpressions??[],...((C=xe==null?void 0:xe.bodyExpr.$)==null?void 0:C.deferredDropExpressions)??[],...((k=e.$)==null?void 0:k.deferredDropExpressions)??[]];let Pe=new Map;for(let ee of i.capturedVariables)Pe.set(ee.id,ee);if(a)for(let ee of a.fields)Pe.set(ee.label,{id:ee.label,name:ee.label,type:ee.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Pe;let st=((A=$e.awaitPoint)==null?void 0:A.isInsideCond)??!1,Je=!1,ie=[];for(let ee of Sn.remainingExprs){if(Je){ie.push(ee);continue}if(st&&Cr(ee)){Je=!0,k_(ee,$e.awaitPoint,i," ",s);continue}let Q=G(ee," ",s);!Q||!ee.$||tn(ee.$.env.modulePath,Q)||l.emitLine(` ${Q};`)}if(Je&&$e.awaitPoint){let ee=$e.awaitPoint.index;Ot.asyncCondBranchInfo||(Ot.asyncCondBranchInfo=new Map);let Q=Ot.asyncCondBranchInfo.get(ee);Q?(Q.chainedBranches||(Q.chainedBranches=[]),Q.chainedBranches.push({branches:[{index:Sn.index,value:Sn.value,hasAwait:ie.length>0||ie.some(oe=>Cr(oe)),remainingExprs:ie,deferredDropExpressions:Sn.deferredDropExpressions}],condBranchFieldIndex:Xt.condBranchFieldIndex})):Ot.asyncCondBranchInfo.set(ee,{branches:[{index:Sn.index,value:Sn.value,hasAwait:ie.length>0||ie.some(oe=>Cr(oe)),remainingExprs:ie,deferredDropExpressions:Sn.deferredDropExpressions}],condBranchFieldIndex:Xt.condBranchFieldIndex})}else if(Sn.deferredDropExpressions)for(let ee of Sn.deferredDropExpressions){let Q=G(ee," ",s);Q&&Q.includes("sm->")&&l.emitLine(` ${Q};`)}s.inAsyncStateMachine=te,s.stateMachineVariables=ve,s.variableIdRemapping=_e,s.pendingDeferredDrops=Ce}}if(je.targetVariableId){let Xt=dr(je.targetVariableId,"local",s.stateMachineFieldAliases);l.emitLine(" // Assign cond result to target variable"),l.emitLine(` sm->${Xt} = sm->await_result_${lt.index};`)}l.emitLine("")}lt.isInsideCond&&l.emitLine(" }");let Be=(N=Ot.asyncWhileLoopInfo)==null?void 0:N.get(lt.index);if(Be){if(l.emitLine(" // Execute remaining code from while loop body and continue loop"),l.emitLine(` if (sm->while_loop_${lt.index}_active) {`),Be.bodyExprsAfterAwait&&Be.bodyExprsAfterAwait.length>0){let _e=s.inAsyncStateMachine,Ce=s.stateMachineVariables,xe=s.variableIdRemapping,Pe=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...((x=Be.bodyExpr.$)==null?void 0:x.deferredDropExpressions)??[],...((V=e.$)==null?void 0:V.deferredDropExpressions)??[]];let st=new Map;for(let Q of i.capturedVariables)st.set(Q.id,Q);if(a)for(let Q of a.fields)st.set(Q.label,{id:Q.label,name:Q.label,type:Q.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=st;let Je=s.smWhileBreakInfo,ie=s.smWhileContinueInfo,ee=s.smWhileBodyDrops;s.smWhileBreakInfo={label:`after_while_loop_${lt.index}`,activeIndex:lt.index},s.smWhileContinueInfo={label:`while_loop_${lt.index}_continue`},s.smWhileBodyDrops=[...((I=Be.bodyExpr.$)==null?void 0:I.deferredDropExpressions)??[]];for(let Q of Be.bodyExprsAfterAwait){let oe=G(Q," ",s);!oe||!Q.$||tn(Q.$.env.modulePath,oe)||l.emitLine(` ${oe};`)}s.smWhileBreakInfo=Je,s.smWhileContinueInfo=ie,s.smWhileBodyDrops=ee,s.inAsyncStateMachine=_e,s.stateMachineVariables=Ce,s.variableIdRemapping=xe,s.pendingDeferredDrops=Pe}l.emitLine(` while_loop_${lt.index}_continue:`);{let _e=((D=Be.bodyExpr.$)==null?void 0:D.deferredDropExpressions)??[];if(_e.length>0){let Ce=s.inAsyncStateMachine,xe=s.stateMachineVariables,Pe=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let st=new Map;for(let Je of i.capturedVariables)st.set(Je.id,Je);if(a)for(let Je of a.fields)st.set(Je.label,{id:Je.label,name:Je.label,type:Je.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=st;for(let Je of _e){let ie=G(Je," ",s);ie&&ie.includes("sm->")&&l.emitLine(` ${ie};`)}s.inAsyncStateMachine=Ce,s.stateMachineVariables=xe,s.variableIdRemapping=Pe}}l.emitLine(` ASYNC_DEBUG("${t}: Re-evaluating while loop condition\\n");`);let tt=s.declaredTempVars;if(s.declaredTempVars=void 0,Be.stepExpr){let _e=s.inAsyncStateMachine,Ce=s.stateMachineVariables,xe=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let Pe=new Map;for(let Je of i.capturedVariables)Pe.set(Je.id,Je);if(a)for(let Je of a.fields)Pe.set(Je.label,{id:Je.label,name:Je.label,type:Je.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Pe;let st=G(Be.stepExpr," ",s);st&&l.emitLine(` ${st};`),s.inAsyncStateMachine=_e,s.stateMachineVariables=Ce,s.variableIdRemapping=xe}let Bt=s.inAsyncStateMachine,jn=s.stateMachineVariables,Xt=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let Sn=new Map;for(let _e of i.capturedVariables)Sn.set(_e.id,_e);if(a)for(let _e of a.fields)Sn.set(_e.label,{id:_e.label,name:_e.label,type:_e.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Sn;let te=G(Be.conditionExpr," ",s);s.inAsyncStateMachine=Bt,s.stateMachineVariables=jn,s.variableIdRemapping=Xt,s.declaredTempVars=tt,l.emitLine(` if (!(${te})) {`),l.emitLine(` sm->while_loop_${lt.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 ve=lt.index;if(l.emitLine(" // Loop back by transitioning to while loop state"),l.emitLine(` sm->state = ${ve};`),l.emitLine(` goto while_loop_${ve}_start;`),l.emitLine(" }"),l.emitLine(" }"),l.emitLine(""),l.emitLine(` after_while_loop_${lt.index}:`),Be.condBranchPostWhileExprs){let _e=Be.condBranchPostWhileExprs,Ce=_e.condBranchFieldIndex,xe=_e.branchIndex;_e.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_${Ce} == ${xe}) {`));let Pe=s.inAsyncStateMachine,st=s.stateMachineVariables,Je=s.variableIdRemapping,ie=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...((P=e.$)==null?void 0:P.deferredDropExpressions)??[]];let ee=new Map;for(let ge of i.capturedVariables)ee.set(ge.id,ge);if(a)for(let ge of a.fields)ee.set(ge.label,{id:ge.label,name:ge.label,type:ge.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=ee;let Q=$e.awaitPoint!=null,oe=!1,Ge=[];for(let ge=0;ge<_e.exprs.length;ge++){let be=_e.exprs[ge];if(oe){Ge.push(be);continue}if(Q&&Cr(be)){oe=!0,k_(be,$e.awaitPoint,i," ",s);continue}let Ee=G(be," ",s);!Ee||!be.$||tn(be.$.env.modulePath,Ee)||l.emitLine(` ${Ee};`)}if(oe&&$e.awaitPoint){let ge=$e.awaitPoint.index;Ot.asyncCondBranchInfo||(Ot.asyncCondBranchInfo=new Map);let be=_e.skipCondBranchCheck?-1:_e.condBranchFieldIndex,Ee=Ot.asyncCondBranchInfo.get(ge);Ee?(Ee.chainedBranches||(Ee.chainedBranches=[]),Ee.chainedBranches.push({branches:[{index:_e.branchIndex,value:_e.exprs[0],hasAwait:Ge.length>0||Ge.some(ze=>Cr(ze)),remainingExprs:Ge,deferredDropExpressions:_e.deferredDropExpressions}],condBranchFieldIndex:be})):Ot.asyncCondBranchInfo.set(ge,{branches:[{index:_e.branchIndex,value:_e.exprs[0],hasAwait:Ge.length>0||Ge.some(ze=>Cr(ze)),remainingExprs:Ge,deferredDropExpressions:_e.deferredDropExpressions}],condBranchFieldIndex:be})}if(!oe&&_e.deferredDropExpressions)for(let ge of _e.deferredDropExpressions){let be=G(ge," ",s);be&&be.includes("sm->")&&l.emitLine(` ${be};`)}l.emitLine(" }"),s.inAsyncStateMachine=Pe,s.stateMachineVariables=st,s.variableIdRemapping=Je,s.pendingDeferredDrops=ie}if(Be.outerWhileLoop){let _e=Be.outerWhileLoop,Ce=_e.whileLoopIndex;if(l.emitLine(" // Execute remaining code from outer while loop body"),l.emitLine(` if (sm->while_loop_${Ce}_active) {`),_e.bodyExprsAfterAwait.length>0){let Pe=s.inAsyncStateMachine,st=s.stateMachineVariables,Je=s.variableIdRemapping,ie=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...((O=_e.bodyExpr.$)==null?void 0:O.deferredDropExpressions)??[],...((J=e.$)==null?void 0:J.deferredDropExpressions)??[]];let ee=new Map;for(let ge of i.capturedVariables)ee.set(ge.id,ge);if(a)for(let ge of a.fields)ee.set(ge.label,{id:ge.label,name:ge.label,type:ge.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=ee;let Q=s.smWhileBreakInfo,oe=s.smWhileContinueInfo,Ge=s.smWhileBodyDrops;s.smWhileBreakInfo={label:`after_while_loop_${Ce}`,activeIndex:Ce},s.smWhileContinueInfo={label:`while_loop_${Ce}_continue`},s.smWhileBodyDrops=[...((U=_e.bodyExpr.$)==null?void 0:U.deferredDropExpressions)??[]];for(let ge of _e.bodyExprsAfterAwait){let be=G(ge," ",s);!be||!ge.$||tn(ge.$.env.modulePath,be)||l.emitLine(` ${be};`)}s.smWhileBreakInfo=Q,s.smWhileContinueInfo=oe,s.smWhileBodyDrops=Ge,s.inAsyncStateMachine=Pe,s.stateMachineVariables=st,s.variableIdRemapping=Je,s.pendingDeferredDrops=ie}l.emitLine(` while_loop_${Ce}_continue:`);{let Pe=((W=_e.bodyExpr.$)==null?void 0:W.deferredDropExpressions)??[];if(Pe.length>0){let st=s.inAsyncStateMachine,Je=s.stateMachineVariables,ie=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let ee=new Map;for(let Q of i.capturedVariables)ee.set(Q.id,Q);if(a)for(let Q of a.fields)ee.set(Q.label,{id:Q.label,name:Q.label,type:Q.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=ee;for(let Q of Pe){let oe=G(Q," ",s);oe&&oe.includes("sm->")&&l.emitLine(` ${oe};`)}s.inAsyncStateMachine=st,s.stateMachineVariables=Je,s.variableIdRemapping=ie}}let xe=s.declaredTempVars;if(s.declaredTempVars=void 0,_e.stepExpr){let Pe=s.inAsyncStateMachine,st=s.stateMachineVariables,Je=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let ie=new Map;for(let Q of i.capturedVariables)ie.set(Q.id,Q);if(a)for(let Q of a.fields)ie.set(Q.label,{id:Q.label,name:Q.label,type:Q.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=ie;let ee=G(_e.stepExpr," ",s);ee&&l.emitLine(` ${ee};`),s.inAsyncStateMachine=Pe,s.stateMachineVariables=st,s.variableIdRemapping=Je}{let Pe=s.inAsyncStateMachine,st=s.stateMachineVariables,Je=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let ie=new Map;for(let Q of i.capturedVariables)ie.set(Q.id,Q);if(a)for(let Q of a.fields)ie.set(Q.label,{id:Q.label,name:Q.label,type:Q.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=ie;let ee=G(_e.conditionExpr," ",s);s.inAsyncStateMachine=Pe,s.stateMachineVariables=st,s.variableIdRemapping=Je,l.emitLine(` if (!(${ee})) {`),l.emitLine(` sm->while_loop_${Ce}_active = false;`),l.emitLine(" } else {"),l.emitLine(` sm->state = ${lt.index};`),l.emitLine(` goto while_loop_${Ce}_start;`),l.emitLine(" }")}s.declaredTempVars=xe,l.emitLine(" }"),l.emitLine(""),l.emitLine(` after_while_loop_${Ce}:`)}}}}let se=s.inAsyncStateMachine,me=s.stateMachineVariables,he=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let Re=new Map;for(let lt of i.capturedVariables)Re.set(lt.id,lt);if(a)for(let lt of a.fields)Re.set(lt.label,{id:lt.label,name:lt.label,type:lt.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Re;let _t=s.pendingDeferredDrops;s.pendingDeferredDrops=[...((q=e.$)==null?void 0:q.deferredDropExpressions)??[]];let bt=Ae&&!_&&$e.expressions.length>0,Mt=$e.expressions.length>0?$e.expressions[$e.expressions.length-1]:void 0,en=s.asyncBodyReturnExpr;if(!_&&Mt&&d&&Mt===d&&$e.awaitPoint?s.asyncBodyReturnExpr=Mt:s.asyncBodyReturnExpr=void 0,Cd($e," ",s,bt),s.asyncBodyReturnExpr=en,s.pendingDeferredDrops=_t,l.emitLine(""),$e.awaitPoint){s.inAsyncStateMachine=se,s.stateMachineVariables=me,s.variableIdRemapping=he;let lt=ae+1;{let kt=w_($e.awaitPoint,i),Ot=(j=$e.awaitPoint.expr.args)==null?void 0:j[0],je=gl((ue=Ot==null?void 0:Ot.$)==null?void 0:ue.type),Be=(ye=$e.awaitPoint)==null?void 0:ye.isInsideCond;Be&&(l.emitLine(" // Only await if the cond branch with await was taken"),l.emitLine(` if (sm->${kt} != NULL) {`));let tt=(X=$e.awaitPoint)==null?void 0:X.isInsideWhile,Bt=tt?(re=s.asyncWhileLoopInfo)==null?void 0:re.get($e.awaitPoint.index):void 0;if(tt&&Bt){let jn=$e.awaitPoint.index;l.emitLine(" // Only await if while loop is still active (not broken)"),l.emitLine(` if (sm->while_loop_${jn}_active) {`)}if(l.emitLine(" // Transition to next state after await"),l.emitLine(` sm->state = ${lt};`),l.emitLine(""),l.emitLine(" // Check if future is ready"),l.emitLine(` int future_state = sm->${kt}->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(""),je?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->${kt}); // event loop reference`)),je||(l.emitLine(" if (future_state == 0) { // 0 = cold (not started)"),Bb($e.awaitPoint.expr,`sm->${kt}`," ",s),l.emitLine(" // Cold future \u2014 start it via stored resume function pointer"),l.emitLine(` sm->${kt}->__yo_resume_fn((void*)sm->${kt});`),l.emitLine(""),l.emitLine(" // Re-check: may have completed synchronously"),l.emitLine(` future_state = sm->${kt}->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->${kt}->continuation_fn = (void (*)(void*))${r};`),l.emitLine(` sm->${kt}->continuation_sm = (void*)sm;`),l.emitLine(" return;"),tt&&Bt){let jn=$e.awaitPoint.index;l.emitLine(" } else {"),l.emitLine(" // While loop was broken, jump to code after loop"),l.emitLine(` goto after_while_loop_${jn};`),l.emitLine(" }")}Be&&(l.emitLine(" } else {"),l.emitLine(" // Non-await cond branch was taken, skip directly to next state"),l.emitLine(` sm->state = ${lt};`),l.emitLine(` goto state_${lt};`),l.emitLine(" }"))}}else if(Ae){if(!$e.expressions.some(kt=>Ad(kt))){if((le=e.$)!=null&&le.deferredDropExpressions){let kt=new Na,kn=s.emitter;s.emitter=kt;for(let je of e.$.deferredDropExpressions){let Be=G(je,"",s);Be&&kt.emitLine(`${Be};`)}s.emitter=kn;let Ot=kt.print().trim();if(Ot){l.emitLine(" // Drop local variables before completion");for(let je of Ot.split(`
199
+ `)){let Be=je.trim();Be&&(l.emitLine(` ${Be}`),g.push(Be))}l.emitLine("")}}l.emitLine(" // Final state - complete the Future"),vo({emitter:l,indent:" ",debugLabel:"Future %p completed"})}s.inAsyncStateMachine=se,s.stateMachineVariables=me,s.variableIdRemapping=he}else s.inAsyncStateMachine=se,s.stateMachineVariables=me,s.variableIdRemapping=he;l.emitLine(" }")}return l.emitLine(" }"),l.emitLine("}"),l.emitLine(""),g}function k_(e,t,n,r,i){let o=i.emitter,a=w_(t,n);if(e.tag==="FnCall"&&E(e,":=")){let s=e.args[1];if(s&&s.tag==="FnCall"&&Vr(s)){let l=s.args[0];if(l){let u=G(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"&&Vr(e)){let s=e.args[0];if(s){let l=G(s,r,i);o.emitLine(`${r}// Store Future for additional await in cond branch`),o.emitLine(`${r}sm->${a} = ${l};`)}return}if(e.tag==="FnCall"&&E(e,R.cond)){fs(e,t,0,r,i);return}if(e.tag==="FnCall"&&E(e,R.match)){fs(e,t,0,r,i);return}if(e.tag==="FnCall"&&E(e,R.while)){fs(e,t,0,r,i);return}if(e.tag==="FnCall"&&E(e,R.begin)){fs(e,t,0,r,i);return}o.emitLine(`${r}// Warning: unhandled await pattern in remaining expressions`)}function Ad(e){if(En(e,"return")||E(e,"return"))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(Ad(t))return!0}return!1}function Ub(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;B(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),nn(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function Bb(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=Wn(i.$.type);if(!((_=o==null?void 0:o.isFuture.effects)!=null&&_.length))return;let a=Ub(o.isFuture.effects),s=r.emitter,l=(f=e.args)==null?void 0:f.find(d=>S(d)&&E(d,R.using));if(l){let d=l.args;for(let g=0;g<a.length&&g<d.length;g++){let m=a[g],h=d[g];if(ne(m.type)){if(m.type.forallParameters.length>0)continue;let v=G(h,n,r),T=m.label;s.emitLine(`${n}${t}->__capture.${T} = (void*)${v};`)}else it(m.type)&&Fd(m.type,t,n,(p=h.$)==null?void 0:p.value,r,e)}}else for(let d of a)if(ne(d.type)){if(d.type.forallParameters.length>0)continue;let g=Gb(d.label,r,e);g&&s.emitLine(`${n}${t}->__capture.${d.label} = (void*)${g};`)}else it(d.type)&&Fd(d.type,t,n,void 0,r,e)}function Fd(e,t,n,r,i,o){var s,l,u,c;let a=i.emitter;for(let _ of e.fields){if(!ne(_.type))continue;let f;if(i.stateMachineVariables){for(let[,p]of i.stateMachineVariables)if(p.name===_.label&&p.kind==="outer"){f=`sm->__capture.${_.label}`;break}}if(!f&&r&&xt(r)){let p=e.fields.indexOf(_),d=r.fields[p];if(d&&we(d)){let g=i.functions[d.funcId];g&&(f=g.cName)}}if(!f&&i.currentEvidenceParams){for(let p of i.currentEvidenceParams.values())if(p.fieldLabel===_.label){f=p.cParamName;break}}if(!f){let p=((s=o.$)==null?void 0:s.env)??((l=o.func.$)==null?void 0:l.env);if(p){let d=Dr(p,g=>g.isImplicit===!0);for(let g=d.length-1;g>=0;g--){let m=d[g],h=(u=m.value)==null?void 0:u[m.value.length-1];if(h&&xt(h)){let v=h.type.fields.findIndex(T=>T.label===_.label);if(v>=0){let T=h.fields[v];if(T&&we(T)){let $=(c=i.functions[T.funcId])==null?void 0:c.cName;if($){f=$;break}}}}}}}f&&a.emitLine(`${n}${t}->__capture.${_.label} = (void*)${f};`)}}function Gb(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 zo=Z(()=>{qc();mt();fi();qt();gn();Te();Do();Ne();at();Cn();Fe();ha();kr();yn();Wt();Wt();wd()});function Sd(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(Wb.has(l))continue;F_(u,l,!0,e);continue}u.isExtern==="c"&&u.cInclude||l.startsWith("__atomic_")||l.startsWith("__sync_")||F_(u,l,!0,e)}t.emitDeclarationLine(""),e.usesAsync&&(t.emitDeclarationLine("/// Async runtime functions"),t.emitDeclarationLine("static void __yo_async_spawn_task(void (*resume_fn)(void*), void* state_machine);"),t.emitDeclarationLine("")),t.emitDeclarationLine("/// Object constructors"),qb(e),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Closure constructors"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Capture dispose functions"),Hb(e),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Dyn type constructors"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Regular functions");for(let s in e.functions){let{cName:l,value:u}=e.functions[s],c=l==="__yo_user_main",_=(r=(n=u.body)==null?void 0:n.$)==null?void 0:r.effectAnalysis,f=_&&_.hasEffects;if(!c&&!u.type.isClosure&&((i=u.specializedFunctionCaches)==null?void 0:i.length)>0||!c&&!f&&!u.isModuleEffectMember&&!u.type.isClosure&&!u.specializedType&&(((o=u.specializedFunctionCaches)==null?void 0:o.length)??0)===0&&An(u.specializedType??u.type).length===0&&[...u.type.implicitParameters,...u.type.parameters.filter($=>$.isImplicit)].some($=>ne($.type)))continue;let d=u.specializedType??u.type,g=An(d).length>0;if(!c&&u.isIoAsyncStateMachineClosure||!c&&!f&&!g&&!u.isModuleEffectMember&&(no(u.type)&&!u.type.isClosure||((a=u.specializedFunctionCaches)==null?void 0:a.length)>0&&!u.type.isClosure||Ro(u)||ro(u)||u.isIoAsyncStateMachineClosure))continue;let m=u.specializedType??u.type,h=!f&&!u.isModuleEffectMember&&(m.parameters.some($=>Ye($.type))||m.forallParameters.length>0),v=Ye(m.return.type),T=B(m.return.type)&&m.return.type.requiredTraits.length>0;h||v&&!T&&!u.isModuleEffectMember||F_(m,l,!1,e,u.isModuleEffectMember?void 0:u.body,u.specializedType&&An(m).length===0&&An(u.type).some($=>$.fieldFunctionType.forallParameters&&$.fieldFunctionType.forallParameters.length>0)?u.type:void 0)}t.emitDeclarationLine("/// Closure vtable instances"),t.emitDeclarationLine("")}function An(e){let t=[],n=Yb(e.implicitParameters);for(let r of n)it(r.type)?Id(r.label,r.type,[],t):ne(r.type)&&t.push({implicitLabel:r.label,fieldLabel:r.label,fieldPath:[r.label],fieldFunctionType:r.type,cParamName:Le(r.label)});return t}function Id(e,t,n,r){for(let i of t.fields)if(ne(i.type)){let o=[...n,i.label],a=o.join("__");r.push({implicitLabel:e,fieldLabel:a,fieldPath:o,fieldFunctionType:i.type,cParamName:Le(`${e}__${a}`)})}else it(i.type)&&Id(e,i.type,[...n,i.label],r)}function Yb(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;B(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),nn(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function oo(e,t,n,r,i){let o=r||H(e.return.type,n),a=e.parameters.filter(_=>!_.isCompileTimeOnly),s=[];e.isClosure&&s.push("void* closure_context");let l=a.map((_,f)=>{let p=Le(_.label||`param${f}`);if(ne(_.type))return oo(_.type,"(*)",n).replace(" (*)(",` (*${p})(`);{let d;return B(_.type)&&ft(_.type)?_.type.resolvedConcreteType?d=H(_.type.resolvedConcreteType,n)+"*":d=H(_.type,n):d=H(_.type,n),`${d} ${p}`}});s.push(...l);let u=An(i??e);for(let _ of u)if(_.fieldFunctionType.forallParameters&&_.fieldFunctionType.forallParameters.length>0)s.push(`void* ${_.cParamName}`);else{let f=oo(_.fieldFunctionType,"(*)",n).replace(" (*)(",` (*${_.cParamName})(`);s.push(f)}let c=s.join(", ");return`${o} ${t}(${c})`}function F_(e,t,n,r,i,o){var f,p,d,g;let a;if(i&&ft(e.return.type)){let m=dl(i);(f=m==null?void 0:m.$)!=null&&f.asyncStateMachineStructName?a=`${m.$.asyncStateMachineStructName}*`:(p=i.$)!=null&&p.type&&B(i.$.type)&&ft(i.$.type)&&(a=H(i.$.type,r))}if(i&&B(e.return.type)&&!ft(e.return.type)&&(d=i.$)!=null&&d.type&&(a=H(i.$.type,r)),!a&&i&&((g=i.$)!=null&&g.type)&&!ft(e.return.type)){let m=H(e.return.type,r),h=H(i.$.type,r);m!==h&&(a=h)}let s=a?oo(e,t,r,a,o):oo(e,t,r,void 0,o),l=M(e),u=t==="__yo_user_main"||r.exportedFunctionLabels&&[...r.exportedFunctionLabels.values()].some(m=>Le(m)===t),c=!n&&!u&&(t.includes("___drop")||t.includes("___dup")||t.includes("___dispose")),_=n?"extern ":u?"":c?"static inline __attribute__((always_inline)) ":"static inline ";r.emitter.emitDeclarationLine(`${_}${s}; // ${l}`)}function qb(e){let t=e.emitter;t.emitDeclarationLine("static inline void __yo_decr_rc(void* ptr); // Decrement reference count"),t.emitDeclarationLine("static inline void* __yo_incr_rc(void* ptr); // Increment reference count"),t.emitDeclarationLine("static void __yo_gc_register(void* ptr); // Register object for cycle detection"),t.emitDeclarationLine("static void __yo_gc_unregister(void* ptr); // Unregister object from cycle detection"),t.emitDeclarationLine("static void __yo_gc_collect(); // Trigger garbage collection"),t.emitDeclarationLine("static void __yo_gc_init_thread(); // Initialize thread-local GC state (for worker threads)"),t.emitDeclarationLine("static void __yo_cleanup_thread_gc(); // Clean up thread-local GC state"),t.emitDeclarationLine("static void __yo_init_process_cleanup(void); // Initialize process cleanup");for(let n in e.types){let{type:r,cName:i}=e.types[n];if(Ue(r)&&r.isReferenceSemantics){if(r.fields.some(l=>Ye(l.type)))continue;let a=`__yo_new_${i}`,s=r.fields.map(l=>{let u=H(l.type,e),c=Le(l.label);return`${u} ${c}`}).join(", ");t.emitDeclarationLine(`static ${i}* ${a}(${s}); // Constructor`)}}}function Hb(e){let t=e.emitter;if(e.closureCaptureMap&&e.closureCaptureMap.size>0)for(let[n]of e.closureCaptureMap){let r=`__yo_dispose_closure_${n}`;t.emitDeclarationLine(`static void ${r}(void* closure_ptr);`)}}function Nd(e){let t=new Set;for(let n in e.functions){let{value:r,cName:i}=e.functions[n],o=r.specializedType;if(Ro(r)||!o||!ki(r.type)||ki(o))continue;let a=o.parameters.some(_=>Ye(_.type)),s=Ye(o.return.type);if(a||s||An(r.type).some(_=>_.fieldFunctionType.forallParameters&&_.fieldFunctionType.forallParameters.length>0)||t.has(n))continue;t.add(n);let c=i.includes("___drop")||i.includes("___dup")||i.includes("___dispose")?"static inline __attribute__((always_inline)) ":"static inline ";e.emitter.emitDeclarationLine(`${c}${oo(o,i,e)}; // specialized function: ${M(r.type)}`)}}var Wb,Ea=Z(()=>{qt();Ne();at();Wt();Wb=new Set(["__yo_mutex_init","__yo_mutex_destroy","__yo_mutex_lock","__yo_mutex_unlock","__yo_cond_init","__yo_cond_destroy","__yo_cond_wait","__yo_cond_signal","__yo_cond_broadcast","__yo_thread_join","__yo_thread_self"])});function ao(e,t,n){let r=fe(t,e);return r.length===0?!1:r[r.length-1].frameLevel<=n}function xd(e){var t,n;return!!((t=e.$)!=null&&t.closureFunctionValue&&((n=e.$)!=null&&n.type)&&tr(e.$.type))}function jb(e,t,n,r,i,o=!1){var p;let a=Object.values(i.types).find(d=>d.type===e);if(!a)return i.emitter.emitLine(`${r}/* Error: Capture type not found for closure */`),null;let s=a.cName,l=new Map;if((p=n.$)!=null&&p.deferredDupExpressions)for(let d of n.$.deferredDupExpressions){let g=Zu(d);g&&l.set(g,d)}let u=e.fields.map(d=>{var v,T;if(d.isEffectParam)return"NULL";let g,m=d.exprs.expr;if((T=(v=m.$)==null?void 0:v.deferredDupExpressions)!=null&&T.length&&(g=m.$.deferredDupExpressions[0]),!g){let $=[d.label];K(m)&&$.push(m.token.value);for(let b of $){let w=l.get(b);if(w){g=w;break}}}if(g)return G(g,r,i);let h={tag:"Atom",token:m.token,$:m.$};return G(h,r,i)}),c=`(${s}){ ${u.map((d,g)=>{let m=e.fields[g];return m?`.${m.label} = ${d}`:`/* Error: missing field at index ${g} */`}).join(", ")} }`,_=n.token.position.row!==void 0?`${Date.now()}_${n.token.position.row}`:`${Date.now()}_${Math.random().toString(36).substr(2,9)}`,f=`__capture_${t}_${_}`;return o?i.emitter.emitLine(`${r}${s} ${f} = ${c};`):(i.emitter.emitLine(`${r}${s}* ${f} = (${s}*)__yo_malloc(sizeof(${s}));`),i.emitter.emitLine(`${r}*${f} = ${c};`)),{captureTempVar:f,captureCName:s}}function Vd(e,t,n){var d;if(!e.$||!e.$.type||!e.$.closureFunctionValue)return"// Error: Missing closure metadata";let r=pr(e.$.type),i=r.isFn.callType,o=e.$.closureFunctionValue,a=e.$.captureType,s=(d=n.functions[o.funcId])==null?void 0:d.cName;if(!s)return"// Error: Closure implementation function not found in context";let l=dt(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&&Ue(a)&&a.fields.length>0,_=H(i.return.type,n),f=i.parameters.map(g=>H(g.type,n)).join(", "),p=`(${_} (*)(void*${f?", "+f:""}))${s}`;if(c&&a&&Ue(a)){let g=!l,m=jb(a,i.id,e,t,n,g);if(!m)return"// Error: Failed to allocate closure capture";let{captureTempVar:h}=m;if(l){let v=`__yo_create_${u}`,T=`__yo_dispose_${u}`;return`${v}(${h}, ${T}, ${p})`}else return n.implClosureCallMap.set(a.id,{functionCName:s,callTypeId:r.isFn.callType.id,callType:r.isFn.callType}),h}else if(l){let g=`__yo_create_${u}`,m=`__yo_dispose_${u}`;return`${g}(NULL, ${m}, ${p})`}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,callType:r.isFn.callType}),`(${H(g.resolvedConcreteType,n)}){}`}return"// Error: Impl(Fn(...)) without captures missing resolvedConcreteType"}}var hl=Z(()=>{mt();qt();Te();Ne();Zr();Wt();yn()});function L_(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=G(a,t,n);s&&n.emitter.emitLine(`${t}${s};`)}}}function ps(e,t,n=""){var a,s,l,u,c,_,f,p,d,g,m,h,v,T,$,b,w,C,k,A,N,x,V,I,D,P,O,J,U;let r=t;if(e.token.value==="continue"){if(r.currentContinueLabel)return L_(r,n,t),`goto ${r.currentContinueLabel}`;if(r.currentLoopLabel)return L_(r,n,t),"continue";if(r.smWhileContinueInfo){if(r.smWhileContinueInfo.emitDropsBeforeGoto&&r.smWhileBodyDrops&&r.smWhileBodyDrops.length>0){let W=t.emitter;for(let q of r.smWhileBodyDrops){let j=G(q,n,t);j&&j.includes("sm->")&&W.emitLine(`${n}${j};`)}}if(r.smWhileContinueInfo.stepExpr){let W=t.emitter,q=G(r.smWhileContinueInfo.stepExpr,n,t);q&&W.emitLine(`${n}${q};`)}return`goto ${r.smWhileContinueInfo.label}`}return"continue"}if(e.token.value==="break"){if(r.currentLoopLabel)return L_(r,n,t),r.insideMatch?`goto ${r.currentLoopLabel}`:"break";if(r.smWhileBreakInfo){let{label:W,activeIndex:q}=r.smWhileBreakInfo;if(r.smWhileBodyDrops&&r.smWhileBodyDrops.length>0){let j=t.emitter;for(let ue of r.smWhileBodyDrops){let ye=G(ue,n,t);ye&&ye.includes("sm->")&&j.emitLine(`${n}${ye};`)}}return q!==void 0?(t.emitter.emitLine(`${n}sm->while_loop_${q}_active = false;`),`goto ${W}`):`goto ${W}`}return"break"}if(e.token.value==="return"){if(r.inAsyncStateMachine){let W=t.emitter,q=r.inAsyncStateMachine.futureType,ue=Wn(q).isFuture.outputType,ye=We(ue);if((a=e.$)!=null&&a.deferredDropExpressions)for(let re of e.$.deferredDropExpressions){let le=G(re,n,t);le&&le.includes("sm->")&&W.emitLine(`${n}${le};`)}if(r.pendingDeferredDrops&&r.pendingDeferredDrops.length>0){W.emitLine(`${n}// Drop local variables before early completion`);for(let re of r.pendingDeferredDrops){let le=G(re,n,t);le&&le.includes("sm->")&&W.emitLine(`${n}${le};`)}}W.emitLine(`${n}// Early return - complete the result Future`);let X=ye?void 0:`(${H(ue,t)}){0}`;return vo({emitter:W,indent:n,resultCode:X,debugLabel:t.currentFunctionName}),""}return"return"}if((s=e.$)!=null&&s.type&&We(e.$.type))return"";if((r.inAsyncStateMachine||r.inEffectStateMachine)&&r.stateMachineVariables){let W=e.token.value;if((l=r.localShadowedVariables)!=null&&l.has(W))return Le(W);let q=!1;if((u=e.$)!=null&&u.env){let j=fe(e.$.env,W);if(j.length>0){let ue=j[j.length-1],ye=ue.isOwningTheSameRcValueAs?ue.isOwningTheSameRcValueAs.id:ue.id;(c=r.variableIdRemapping)!=null&&c.has(ye)&&(ye=r.variableIdRemapping.get(ye));let X=r.stateMachineVariables.get(ye);if(X){let re=(_=r.stateMachineFieldAliases)==null?void 0:_.get(ye);if(re)return q=!0,`sm->${re}`;let le=X.kind==="outer"?`__capture.${W}`:`var_${X.id}`;return q=!0,`sm->${le}`}}}if(!q){for(let[j,ue]of r.stateMachineVariables)if(ue.name===W){let ye=(f=r.stateMachineFieldAliases)==null?void 0:f.get(j);if(ye)return q=!0,`sm->${ye}`;let X=ue.kind==="outer"?`__capture.${W}`:`var_${j}`;return q=!0,`sm->${X}`}}if((p=e.$)!=null&&p.env){let j=fe(e.$.env,W);if(j.length>0){let ue=j[j.length-1];if(ue.isOwningTheSameRcValueAs){let ye=ue.isOwningTheSameRcValueAs.name,X=ue.isOwningTheSameRcValueAs.id;for(let[re,le]of r.stateMachineVariables)if(le.name===ye||re===X)return`sm->${le.kind==="outer"?`__capture.${ye}`:`var_${re}`}`}}}if(r.currentClosureCaptures&&r.currentClosureCaptures.includes(W)&&r.currentClosureCaptureFrameLevel!==void 0){let j=r.currentClosureCaptureTypeCName;return j?`((${j}*)closure_context)->${Qe(W,(d=e.$)==null?void 0:d.env)}`:`closure_context->${Qe(W,(g=e.$)==null?void 0:g.env)}`}if((m=e.$)!=null&&m.variableName){if((h=e.$)!=null&&h.env&&((v=e.$)!=null&&v.value)&&!Me(e.$.value)){let j=fe(e.$.env,e.$.variableName);if(j.length>0&&j[j.length-1].isCompileTimeOnly)return lr(e.$.value,t,e)}return Qe(e.$.variableName,e.$.env)}}if((T=e.$)!=null&&T.variableName){if(($=e.$)!=null&&$.env&&((b=e.$)!=null&&b.value)&&!Me(e.$.value)){let W=fe(e.$.env,e.$.variableName);if(W.length>0&&W[W.length-1].isCompileTimeOnly)return lr(e.$.value,t,e)}if(!(r.currentClosureCaptures&&r.currentClosureCaptures.includes(e.token.value)&&((w=e.$)!=null&&w.env)&&r.currentClosureCaptureFrameLevel!==void 0&&ao(e.token.value,e.$.env,r.currentClosureCaptureFrameLevel)))return Qe(e.$.variableName,(C=e.$)==null?void 0:C.env)}if((k=e.$)!=null&&k.value&&!Me(e.$.value))return lr(e.$.value,t,e);let i=(A=e.$)!=null&&A.env&&r.currentClosureCaptureFrameLevel!==void 0?ao(e.token.value,e.$.env,r.currentClosureCaptureFrameLevel):!1;if(r.currentClosureCaptures&&r.currentClosureCaptures.includes(e.token.value)&&r.currentClosureCaptureFrameLevel!==void 0&&(!((N=e.$)!=null&&N.env)||i)){let W=r.currentClosureCaptureTypeCName;return W?`((${W}*)closure_context)->${Qe(e.token.value,(x=e.$)==null?void 0:x.env)}`:`closure_context->${Qe(e.token.value,(V=e.$)==null?void 0:V.env)}`}if(r.currentFunctionName&&!r.currentClosureCaptures){let W=Object.values(r.functions).find(q=>q.cName===r.currentFunctionName);if(W&&W.value.type.isClosure){let q=Object.values(r.types).find(j=>ne(j.type)&&j.type.isClosure&&j.type===W.value.type);if(q)return`((${`${q.cName}_capture`}*)closure_context->data)->${Qe(e.token.value,(I=e.$)==null?void 0:I.env)}`}}if((D=e.$)!=null&&D.env){let W=fe(e.$.env,e.token.value);if(W.length>0){let q=W[W.length-1];if((P=q.value)!=null&&P[0]&&we(q.value[0])){let j=(O=t.functions[q.value[0].funcId])==null?void 0:O.cName;if(j)return j}else if(ne(q.type)&&(Me((J=q.value)==null?void 0:J[0])||q.value===void 0)){let j=Object.entries(t.functions).find(([ue,ye])=>ye.value.funcName===e.token.value);if(j)return j[1].cName}}}return Qe(e.token.value,(U=e.$)==null?void 0:U.env)}var tc=Z(()=>{mt();qt();Ne();Fe();Wt();ha();hl();ss();yn()});function Dd(e,t,n){var m,h,v,T,$,b,w,C,k,A,N,x,V,I,D,P,O,J,U,W;let r;if(Xn(e)){let q=(h=(m=e.$)==null?void 0:m.runtimeArgExprsInOrder)==null?void 0:h[0],j=(v=q==null?void 0:q.$)==null?void 0:v.closureFunctionValue;j&&we(j)&&(r=j.body)}else r=e.args[0];if(!r)return"/* Error: async requires exactly 1 argument */";let i=(T=e.$)==null?void 0:T.type;if(!i||!ft(i))return"/* Error: async block must have Future type */";let o=Wn(i);if(!o)return"/* Error: Could not extract Future module type */";let a=(($=e.$)==null?void 0:$.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 _=(b=e.$)==null?void 0:b.awaitAnalysis;if(!_)throw new Error("Missing await analysis for async block. This should have been computed during evaluation.");let f=o.isFuture.outputType;if(B(f))if(f.resolvedConcreteType)f=f.resolvedConcreteType;else{let q=(C=(w=e.$)==null?void 0:w.runtimeArgExprsInOrder)==null?void 0:C[0],j=(k=q==null?void 0:q.$)==null?void 0:k.closureFunctionValue;if(j&&we(j)){let ue=(N=(A=j.type)==null?void 0:A.return)==null?void 0:N.type;if(ue&&B(ue)&&ue.resolvedConcreteType)f=ue.resolvedConcreteType;else if((V=(x=j.body)==null?void 0:x.$)!=null&&V.type){let ye=j.body.$.type;B(ye)&&ye.resolvedConcreteType?f=ye.resolvedConcreteType:B(ye)||(f=ye)}}}let p=H(f,n),d=n.emitter;if(d.emitDeclarationLine(`void ${c}(void* sm_ptr); // Dispose function for state machine`),d.emitDeclarationLine(""),d.emitDeclarationLine(`void ${l}(${s}* sm);`),d.emitDeclarationLine(""),(I=e.$)!=null&&I.captureType){let q=e.$.captureType,j=Object.values(n.types).find(ye=>ye.type===q),ue=j?j.cName:`async_capture_${q.id}`;d.emitDeclarationLine(`${s}* ${u}(${ue} __capture);`)}else d.emitDeclarationLine(`${s}* ${u}();`);d.emitDeclarationLine(""),n.deferredAsyncBlocks||(n.deferredAsyncBlocks=[]),n.deferredAsyncBlocks.push({bodyExpr:r,asyncBlockId:a,structName:s,resumeFunctionName:l,constructorName:u,disposeFunctionName:c,futureType:i,futureModuleType:o,resultType:f,resultTypeCName:p,captureType:(D=e.$)==null?void 0:D.captureType,analysis:_});let g=(P=e.$)==null?void 0:P.captureType;if(g){let q=Object.values(n.types).find(ae=>ae.type===g),j=q?q.cName:`async_capture_${g.id}`,ue=n,ye=ue.currentClosureCaptures!==void 0||ue.inAsyncStateMachine!==void 0||ue.inEffectStateMachine!==void 0,X=!1,re=g.fields.map(ae=>{var me,he;if(ae.isEffectParam)return`.${ae.label} = NULL`;let Ae;if(!ye&&((me=e.$)!=null&&me.deferredDupExpressions))for(let Re of e.$.deferredDupExpressions){let _t;if(S(Re)&&(Re.args.length>0&&K(Re.args[0])?_t=Re.args[0].token.value:Re.args.length===0&&S(Re.func)&&E(Re.func,".")&&Re.func.args.length>=2&&K(Re.func.args[0])&&(_t=Re.func.args[0].token.value)),_t===ae.label){Ae=Re;break}}if(Ae)return X=!0,(he=Ae.$)!=null&&he.variableName?(G(Ae,t,n),`.${ae.label} = ${Ae.$.variableName}`):`.${ae.label} = ${G(Ae,t,n)}`;let se={tag:"Atom",token:ae.exprs.expr.token,$:ae.exprs.expr.$};return`.${ae.label} = ${ps(se,n)}`}).join(", "),le=`(${j}){${re}}`;if(!X){let ae=ri(g,n);ae&&(le=`${ae}(${le})`)}let Oe=((O=e.$)==null?void 0:O.variableName)||"async_result",$e=`${u}(${le})`;if(Oe&&((J=e.$)!=null&&J.type)){let ae=an(e.$.type,Oe,n);return n.emitter.emitLine(`${t}${ae} = ${$e};`),Oe}else return $e}else{let q=((U=e.$)==null?void 0:U.variableName)||"async_result",j=`${u}()`;if(q&&((W=e.$)!=null&&W.type)){let ue=an(e.$.type,q,n);return n.emitter.emitLine(`${t}${ue} = ${j};`),q}else return j}}function Md(e,t){var m;let n=t.emitter,{asyncBlockId:r,structName:i,resultType:o,resultTypeCName:a,captureType:s,analysis:l,crossBoundaryIds:u,awaitFutureTempVarAliases:c,overlappingSlotAliases:_,overlappingSlots:f}=e;if(n.emitDeclarationLine(`// State machine for async block ${r} - implements Future(${M(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)"),We(o)?n.emitDeclarationLine(" uint8_t result; // Dummy result for unit type"):n.emitDeclarationLine(` ${a} result; // The result value of type ${M(o)}`),n.emitDeclarationLine(" void (*continuation_fn)(void*); // Resume function of awaiting task"),n.emitDeclarationLine(" void* continuation_sm; // State machine of awaiting task"),n.emitDeclarationLine(""),n.emitDeclarationLine(" void (*__yo_resume_fn)(void*); // Resume function pointer (for lazy start at await/spawn)"),n.emitDeclarationLine(""),s){let h=Object.values(t.types).find(T=>T.type===s),v=h?h.cName:`async_capture_${s.id}`;n.emitDeclarationLine(" // Captured variables from outer scope"),n.emitDeclarationLine(` ${v} __capture;`),n.emitDeclarationLine("")}let p=l.capturedVariables.filter(h=>h.kind!=="outer");if(u&&(p=p.filter(h=>u.has(h.id)&&!(c!=null&&c.has(h.id))&&!(_!=null&&_.has(h.id)))),p.length>0){n.emitDeclarationLine(" // Local variables");for(let h of p){let v=H(h.type,t),T=dr(h.id,"local");n.emitDeclarationLine(` ${v} ${T}; // ${h.name}`)}n.emitDeclarationLine("")}if(f&&f.length>0){n.emitDeclarationLine(" // Overlapping storage slots (Phase 2)");for(let h of f)n.emitDeclarationLine(` ${h.cType} ${h.fieldName}; // shared: ${h.variableNames.join(", ")}`);n.emitDeclarationLine("")}if(l.awaitPoints.length>0){let h=[];for(let v of l.awaitPoints)if(!(We(v.resultType)||B(v.resultType)&&!v.resultType.resolvedConcreteType)&&v.isInsideCond){let b=v.resultType;if(v.futureType){let C=Wn(v.futureType);C&&(b=C.isFuture.outputType)}let w=H(b,t);h.push(` ${w} await_result_${v.index};`)}if(h.length>0){n.emitDeclarationLine(" // Await result temporaries");for(let v of h)n.emitDeclarationLine(v);n.emitDeclarationLine("")}}if(l.awaitPoints.length>0){let h=l.awaitPoints.filter(v=>v.futureVariableId===void 0);if(h.length>0){n.emitDeclarationLine(" // Future references for awaits");for(let v of h){let T=v.expr;if(T.tag!=="FnCall")continue;let $=T.args[0],b=(m=$==null?void 0:$.$)==null?void 0:m.type;if(!b)throw new Error(`Internal error: await expression missing type info for future argument in async block ${r}`);let w=H(b,t);n.emitDeclarationLine(` ${w} await_future_${v.index};`)}n.emitDeclarationLine("")}}let d=l.awaitPoints.filter(h=>h.needsOwnCondBranchField);if(d.length>0){n.emitDeclarationLine(" // Branch tracking for cond expressions with await");for(let h of d)n.emitDeclarationLine(` int cond_branch_${h.index}; // Which branch was taken in cond with await ${h.index}`);n.emitDeclarationLine("")}let g=l.awaitPoints.filter(h=>h.isInsideWhile);if(g.length>0){n.emitDeclarationLine(" // Loop state tracking for while loops with await");let h=l.awaitPoints.length;for(let v of g){n.emitDeclarationLine(` _Bool while_loop_${v.index}_active; // Whether while loop ${v.index} should continue`);let T=(v.whileNestingDepth??1)-1;for(let $=0;$<T;$++)n.emitDeclarationLine(` _Bool while_loop_${h}_active; // Whether outer while loop ${h} should continue`),h++}n.emitDeclarationLine("")}n.emitDeclarationLine("};"),n.emitDeclarationLine("")}function Kb(e){var l;if(!e.deferredAsyncBlocks||e.deferredAsyncBlocks.length===0)return;let t=e.deferredAsyncBlocks,n=new Map;for(let u of t)n.set(u.structName,u);let r=new Map,i=new Map;for(let u of t)r.set(u.structName,new Set),i.set(u.structName,0);for(let u of t){let c=_=>{let f=r.get(_);f.has(u.structName)||(f.add(u.structName),i.set(u.structName,(i.get(u.structName)??0)+1))};for(let _ of u.analysis.capturedVariables){let f;try{f=H(_.type,e)}catch{continue}let p=n.get(f);p&&p.structName!==u.structName&&c(p.structName)}for(let _ of u.analysis.awaitPoints){if(_.futureVariableId!==void 0)continue;let f=_.expr;if(f.tag!=="FnCall")continue;let p=f.args[0],d=(l=p==null?void 0:p.$)==null?void 0:l.type;if(!d)continue;let g;try{g=H(d,e)}catch{continue}let m=n.get(g);m&&m.structName!==u.structName&&c(m.structName)}}let o=[];for(let[u,c]of i.entries())c===0&&o.push(u);let a=[];for(;o.length>0;){let u=o.shift();a.push(u);let c=r.get(u);if(c)for(let _ of c){let f=(i.get(_)??0)-1;i.set(_,f),f===0&&o.push(_)}}let s=a.length===t.length?a.map(u=>n.get(u)).filter(Boolean):t;for(let u of s){let{crossBoundaryIds:c,awaitFutureTempVarAliases:_,variableSegments:f}=Ju(u.bodyExpr,u.analysis),{slotAliases:p,slots:d}=ec(c,f,u.analysis.capturedVariables,_,e);Md({asyncBlockId:u.asyncBlockId,structName:u.structName,resultType:u.resultType,resultTypeCName:u.resultTypeCName,captureType:u.captureType,analysis:u.analysis,crossBoundaryIds:c,awaitFutureTempVarAliases:_,overlappingSlotAliases:p,overlappingSlots:d},e)}}function Xb(e,t,n,r,i,o,a,s,l,u){var _;let c=u.emitter;if(c.emitLine(`// Dispose function for async block ${e} state machine`),c.emitLine("// Called by __yo_decr_rc when refcount hits 0 - do NOT call __yo_free here"),c.emitLine(`void ${n}(void* sm_ptr) {`),c.emitLine(` ${t}* sm = (${t}*)sm_ptr;`),c.emitLine(` ASYNC_DEBUG("${n}: Disposing state machine\\n");`),c.emitLine(""),i&&ht(i)){let f=Object.values(u.types).find(p=>p.type===i);if(!f)c.emitLine(" /* Error: capture struct type not found in context */");else{let p=f.cName,d=i.trait.fields.find(g=>g.label===F.___drop[0]);if(d&&d.assignedValue&&we(d.assignedValue)){let g=(_=u.functions[d.assignedValue.funcId])==null?void 0:_.cName;g&&(c.emitLine(' ASYNC_DEBUG(" Dropping capture struct\\n");'),c.emitLine(` ${g}(sm->__capture);`))}else c.emitLine(` /* Warning: ___drop function not found for capture struct ${p} */`)}}if(c.emitLine(""),!We(r)&&ht(r)){let f=H(r,u);c.emitLine(" // Drop result field if it was set (state == -1 means completed)"),c.emitLine(" int final_state = sm->state;"),c.emitLine(" if (final_state == -1) {"),c.emitLine(' ASYNC_DEBUG(" Dropping result field\\n");');let p=io(r,u);p?c.emitLine(` ${p}(sm->result);`):c.emitLine(` /* Warning: No ___drop function found for result type ${f} */`),c.emitLine(" }")}c.emitLine("");{let f=[];for(let p of o.capturedVariables){if(p.kind!=="local"||!s.has(p.id)||l.has(p.id)||p.isOwningTheSameRcValueAs!==void 0)continue;let g=`sm->${dr(p.id,"local")}`;if(dt(p.type))f.push(` if ((${g}).data != NULL) { __yo_decr_rc((void*)(${g}).data); }`);else if(Vn(p.type)||Nn(p.type))f.push(` if (${g} != NULL) { __yo_decr_rc_atomic((void*)${g}); }`);else if(pn(p.type)||B(p.type)&&br(p.type)){let m=io(p.type,u);m?f.push(` if (${g} != NULL) { ${m}(${g}); }`):f.push(` if (${g} != NULL) { __yo_decr_rc((void*)${g}); }`)}else if(ht(p.type)){let m=io(p.type,u);m&&f.push(` ${m}(${g});`)}}if(f.length>0){c.emitLine(" // Drop local variables on escape (state == -2)"),c.emitLine(" if (sm->state == -2) {");for(let p of f)c.emitLine(p);c.emitLine(" }")}}c.emitLine(" // Memory freed by __yo_decr_rc after this function returns"),c.emitLine("}")}function Qb(e,t,n,r,i,o,a,s,l,u){let c=u.emitter;if(l){let _=Object.values(u.types).find(p=>p.type===l),f=_?_.cName:`async_capture_${l.id}`;c.emitLine(`${t}* ${r}(${f} __capture) {`)}else c.emitLine(`${t}* ${r}() {`);if(c.emitLine(" // Allocate async block state machine (heap-backed, ref-counted)"),c.emitLine(` ${t}* sm = (${t}*)__yo_malloc(sizeof(${t}));`),c.emitLine(` memset(sm, 0, sizeof(${t}));`),c.emitLine(""),c.emitLine(" // Initialize reference counting header"),c.emitLine(" sm->header.ref_count = 1; // Caller owns initial reference"),c.emitLine(` GC_DEBUG("AsyncBlock ${t}: Created ptr=%p RC=1\\n", (void*)sm);`),u.needsCycleGC&&(c.emitLine(" sm->header.gc_flags = 0;"),c.emitLine(" sm->header.gc_mark = __YO_GC_UNMARKED;"),c.emitLine(" sm->header.gc_next = NULL;"),c.emitLine(" sm->header.gc_prev = NULL;")),u.needsCycleGC)c.emitLine(` sm->header.dispose_fn = (void(*)(void*))${i};`);else{u.disposeTypeIds||(u.disposeTypeIds=new Map,u.nextDisposeTypeId=1);let _=u.disposeTypeIds.get(i);_===void 0&&(_=u.nextDisposeTypeId,u.nextDisposeTypeId=_+1,u.disposeTypeIds.set(i,_)),c.emitLine(` sm->header.type_id = ${_};`)}u.needsCycleGC&&c.emitLine(" sm->header.traverse_fn = NULL; // TODO: Add traverse for cycle detection if needed"),c.emitLine(""),c.emitLine(" sm->state = 0;"),c.emitLine(" sm->continuation_fn = NULL;"),c.emitLine(" sm->continuation_sm = NULL;"),c.emitLine(""),l&&(c.emitLine(" // Initialize captured variables"),c.emitLine(" sm->__capture = __capture;"),c.emitLine("")),c.emitLine(" // Initialize result (will be set when async block completes)"),We(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 Od(e){if(!e.deferredAsyncBlocks||e.deferredAsyncBlocks.length===0)return;let t=e.emitter;Kb(e),t.emitLine("// Deferred async block implementations");let n=0;for(;n<e.deferredAsyncBlocks.length;){let r=e.deferredAsyncBlocks[n],i=e.deferredAsyncBlocks.length,{bodyExpr:o,asyncBlockId:a,structName:s,resumeFunctionName:l,constructorName:u,disposeFunctionName:c,futureType:_,resultType:f,resultTypeCName:p,captureType:d,analysis:g}=r,m=e.stateMachineVariables,h=e.currentEvidenceParams,v=new Map,{crossBoundaryIds:T,awaitFutureTempVarAliases:$,variableSegments:b}=Ju(o,g),{slotAliases:w}=ec(T,b,g.capturedVariables,$,e),C=g.capturedVariables.filter(V=>V.kind==="outer"||T.has(V.id)||$.has(V.id)||w.has(V.id)),k={...g,capturedVariables:C};for(let V of C)v.set(V.id,V);if(d)for(let V of d.fields)v.set(V.label,{id:V.label,name:V.label,type:V.type,kind:"outer",isOwningTheSameRcValueAs:void 0});e.stateMachineVariables=v;let A=e.stateMachineFieldAliases,N=new Map($);for(let[V,I]of w)N.set(V,I);e.stateMachineFieldAliases=N;let x=Ld(o,a,s,l,k,_,d,e);if(e.stateMachineVariables=m,e.currentEvidenceParams=h,e.stateMachineFieldAliases=A,t.emitLine(""),Xb(a,s,c,f,d,k,x,T,$,e),t.emitLine(""),Qb(a,s,l,u,c,_,f,p,d,e),t.emitLine(""),e.deferredAsyncBlocks.length>i){let V=e.deferredAsyncBlocks.slice(i);for(let I of V){let{crossBoundaryIds:D,awaitFutureTempVarAliases:P,variableSegments:O}=Ju(I.bodyExpr,I.analysis),{slotAliases:J,slots:U}=ec(D,O,I.analysis.capturedVariables,P,e);Md({asyncBlockId:I.asyncBlockId,structName:I.structName,resultType:I.resultType,resultTypeCName:I.resultTypeCName,captureType:I.captureType,analysis:I.analysis,crossBoundaryIds:D,awaitFutureTempVarAliases:P,overlappingSlotAliases:J,overlappingSlots:U},e)}}n++}}function Rd(e){for(let t in e.functions){let{value:n}=e.functions[t];n.body&&Pd(n.body,e)}}function Jb(e){return Zb.some(t=>e.startsWith(t))}function Pd(e,t){var n,r,i,o,a,s,l;if(e&&S(e)){let u=e;if(Xn(e)){t.usesAsync=!0;let c=(n=e.$)==null?void 0:n.type;if(c&&ft(c)&&Wn(c)){let p=`${((r=e.$)==null?void 0:r.variableName)||`async_block_${Date.now()}`}_state_t`;e.$&&(e.$.asyncStateMachineStructName=p),t.types[c.id]={type:c,cName:p},t.emitter.emitDeclarationLine(`typedef struct ${p}_struct ${p}; // Forward declaration for async state machine`)}}if(Xn(e)){let c=(i=e.$)==null?void 0:i.type;if(c&&ft(c)&&Wn(c)){let f=((o=e.$)==null?void 0:o.variableName)||`io_async_block_${Date.now()}`,p=!!((a=e.$)!=null&&a.awaitAnalysis),d=p?`${f}_state_t`:`${f}_sync_fut_t`;e.$&&(e.$.asyncStateMachineStructName=d),t.types[c.id]={type:c,cName:d},t.emitter.emitDeclarationLine(`typedef struct ${d}_struct ${d}; // Forward declaration for io.async ${p?"state machine":"sync future"}`)}}(Vr(e)||zu(e))&&(t.usesAsync=!0);{let c=(s=u.func.$)==null?void 0:s.type;c&&"isExtern"in c&&c.isExtern==="yo"&&"externName"in c&&typeof c.externName=="string"&&Jb(c.externName)&&(t.usesAsync=!0)}{let c=(l=u.func.$)==null?void 0:l.type;c&&"isExtern"in c&&c.isExtern==="yo"&&"externName"in c&&typeof c.externName=="string"&&(c.externName==="__yo_thread_spawn"||c.externName==="__yo_worker_spawn")&&(t.usesParallelism=!0)}for(let c of u.args)Pd(c,t)}}function zd(e,t,n){var C,k,A,N,x,V,I,D,P,O,J,U;let r=(C=e.$)==null?void 0:C.type;if(!r||!ft(r))return"/* Error: io.async must return a Future type */";let i=Wn(r);if(!i)return"/* Error: Could not extract Future module type */";let o=i.isFuture.outputType;if(B(o))if(o.resolvedConcreteType)o=o.resolvedConcreteType;else{let W=(A=(k=e.$)==null?void 0:k.runtimeArgExprsInOrder)==null?void 0:A[0],q=(N=W==null?void 0:W.$)==null?void 0:N.closureFunctionValue;if(q&&we(q)){let j=(V=(x=q.type)==null?void 0:x.return)==null?void 0:V.type;if(j&&B(j)&&j.resolvedConcreteType)o=j.resolvedConcreteType;else if((D=(I=q.body)==null?void 0:I.$)!=null&&D.type){let ue=q.body.$.type;B(ue)&&ue.resolvedConcreteType?o=ue.resolvedConcreteType:B(ue)||(o=ue)}}}let a=H(o,n),s=(P=e.$)==null?void 0:P.asyncStateMachineStructName;if(!s)return"/* Error: Missing sync future struct name */";let l=`${s}_dispose`,u=`${s}_resume`,c=n.emitter,_=(J=(O=e.$)==null?void 0:O.runtimeArgExprsInOrder)==null?void 0:J[0];if(!(_!=null&&_.$))return"/* Error: Missing closure argument for io.async */";let f=G(_,t,n),p=_.$.type,d,g;if(B(p)&&p.resolvedConcreteType){let W=p.resolvedConcreteType,q=n.implClosureCallMap.get(W.id);q&&(d=q.functionCName);let j=n.types[W.id];j&&(g=j.cName)}if(!d||!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;"),We(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 m="";for(let W in n.functions){let q=n.functions[W];if(q.cName===d){let j=An(q.value.type);j.length>0&&(m=", "+j.map(ue=>`(void*)sm->__capture.${ue.fieldPath.join(".")}`).join(", "));break}}c.emitDeclarationLine(`void ${u}(void* ptr) {`),c.emitDeclarationLine(` ${s}* sm = (${s}*)ptr;`),We(o)?c.emitDeclarationLine(` ${d}(&sm->__capture${m});`):c.emitDeclarationLine(` sm->result = ${d}(&sm->__capture${m});`),m&&(c.emitDeclarationLine(" if (__yo_effect_escaped) {"),c.emitDeclarationLine(" __yo_effect_escaped = 0;"),c.emitDeclarationLine(" sm->state = -2;"),c.emitDeclarationLine(" __yo_decr_rc(ptr);"),c.emitDeclarationLine(" return;"),c.emitDeclarationLine(" }")),c.emitDeclarationLine(" sm->state = -1;"),c.emitDeclarationLine(" void (*continuation)(void*) = sm->continuation_fn;"),c.emitDeclarationLine(" if (continuation) {"),c.emitDeclarationLine(" void* cont_sm = sm->continuation_sm;"),c.emitDeclarationLine(" continuation(cont_sm);"),c.emitDeclarationLine(" }"),c.emitDeclarationLine(" __yo_decr_rc(ptr);"),c.emitDeclarationLine("}"),c.emitDeclarationLine("");let h=_.$.captureType,v=h&&ht(h)?io(h,n):void 0,T=h&&ht(h)?ri(h,n):void 0,$=io(o,n);c.emitDeclarationLine(`void ${l}(void* ptr) {`),(v||$)&&(c.emitDeclarationLine(` ${s}* sm = (${s}*)ptr;`),v&&(c.emitDeclarationLine(" // Drop captured variables (future owns its references)"),c.emitDeclarationLine(` ${v}(sm->__capture);`)),$&&(c.emitDeclarationLine(" if (sm->state == -1) {"),c.emitDeclarationLine(` ${$}(sm->result);`),c.emitDeclarationLine(" }"))),c.emitDeclarationLine("}"),c.emitDeclarationLine("");let b=((U=e.$)==null?void 0:U.variableName)||"__io_async_result",w=an(r,b,n);if(c.emitLine(`${t}${w} = (${s}*)__yo_malloc(sizeof(${s}));`),c.emitLine(`${t}memset(${b}, 0, sizeof(${s}));`),c.emitLine(`${t}${b}->header.ref_count = 1;`),n.needsCycleGC&&(c.emitLine(`${t}${b}->header.gc_flags = 0;`),c.emitLine(`${t}${b}->header.gc_mark = __YO_GC_UNMARKED;`),c.emitLine(`${t}${b}->header.gc_next = NULL;`),c.emitLine(`${t}${b}->header.gc_prev = NULL;`)),n.needsCycleGC)c.emitLine(`${t}${b}->header.dispose_fn = (void(*)(void*))${l};`);else{n.disposeTypeIds||(n.disposeTypeIds=new Map,n.nextDisposeTypeId=1);let W=n.disposeTypeIds.get(l);W===void 0&&(W=n.nextDisposeTypeId,n.nextDisposeTypeId=W+1,n.disposeTypeIds.set(l,W)),c.emitLine(`${t}${b}->header.type_id = ${W};`)}return n.needsCycleGC&&c.emitLine(`${t}${b}->header.traverse_fn = NULL;`),c.emitLine(`${t}${b}->__capture = ${f};`),T&&c.emitLine(`${t}${b}->__capture = ${T}(${b}->__capture);`),c.emitLine(`${t}${b}->state = 0;`),c.emitLine(`${t}${b}->__yo_resume_fn = ${u};`),c.emitLine(`${t}${b}->continuation_fn = NULL;`),c.emitLine(`${t}${b}->continuation_sm = NULL;`),b}var Zb,A_=Z(()=>{fi();qt();Te();Ne();at();Fe();zo();Ea();Wt();tc();kr();yn();Zb=["__yo_poll_","__yo_fs_event_","__yo_async_"]});function Ud(e,t){for(let i=0;i<e.fields.length;i++){let o=e.fields[i];we(o)&&(Eo(o.type,t),Uo(o.body,t))}if(t.moduleLevelInitExprs)for(let i of t.moduleLevelInitExprs)Uo(i,t);let n=new Set,r=!0;for(;r;){r=!1;for(let i in t.functions){if(n.has(i))continue;n.add(i),r=!0;let o=t.functions[i];if(Eo(o.value.type,t),o.value.specializedType&&Eo(o.value.specializedType,t),Uo(o.value.body,t),o.value.calledComptimeFunctionCaches)for(let a of o.value.calledComptimeFunctionCaches)a.value&&a.value.type&&Yn(a.value.type,t),Uo(a.body,t)}}}function Eo(e,t){for(let n of e.parameters)Yn(n.type,t);for(let n of e.forallParameters)Yn(n.type,t);Yn(e.return.type,t)}function Uo(e,t){var n;if(e.$&&e.$.type&&Yn(e.$.type,t),e.$&&e.$.value&&we(e.$.value)){let r=e.$.value;r.isControlFunction?(Eo(r.type,t),qn(r.body,t)):t.functions[r.funcId]||r.type.parameters.map(a=>a.type).some(a=>B(a)&&ft(a)&&!a.resolvedConcreteType)||(t.functions[r.funcId]={value:r,cName:Le(r.funcId)},Eo(r.type,t),qn(r.body,t))}if(e.$&&e.$.deferredDropExpressions&&e.$.deferredDropExpressions.length>0)for(let r of e.$.deferredDropExpressions)Uo(r,t);if(e.$&&e.$.macroExpansion&&Uo(e.$.macroExpansion,t),e.$&&e.$.runtimeDestructurings)for(let{type:r}of e.$.runtimeDestructurings)Yn(r,t);if(e.$&&e.$.captureType&&Ue(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)Yn(i.type,t);for(let i of r.trait.fields)if(i.assignedValue&&we(i.assignedValue)){let o=i.assignedValue;t.functions[o.funcId]||(t.functions[o.funcId]={value:o,cName:o.funcId},Eo(o.type,t),qn(o.body,t))}}}switch(e.tag){case"FnCall":if(E(e,R.test))break;Uo(e.func,t);for(let r of e.args)Uo(r,t);break;case"Atom":(n=e.$)!=null&&n.value&&Y(e.$.value)&&Yn(e.$.value.value,t);break}}function Yn(e,t){if(!t.types[e.id]){if(B(e)&&tr(e)){if(e.resolvedConcreteType){Yn(e.resolvedConcreteType,t);return}let n=pr(e);n&&Yn(n,t);return}if(B(e)&&ft(e)){let n=Wn(e);n&&Yn(n.isFuture.outputType,t);return}if(B(e)&&e.resolvedConcreteType){Yn(e.resolvedConcreteType,t);return}if(!Ye(e)){if(Ue(e)||Kt(e)||Ze(e)||gt(e)||dt(e)||it(e)||$t(e)||Vt(e)||Vn(e)||Nn(e)){let n=Vt(e)?H(e,t):e.isExtern==="c"&&e.externName?e.externName:`__yo_${e.id}`;if(t.types[e.id]={type:e,cName:n},Ue(e))for(let r of e.fields)Yn(r.type,t);if(Ze(e)){for(let r of e.variants)if(r.fields)for(let i of r.fields)Yn(i.type,t)}if(Kt(e))for(let r of e.fields)Yn(r.type,t);if(dt(e)){let r=e;for(let i of r.requiredTraits)Yn(i.traitType,t)}if(Vn(e)){let r=e;Yn(r.childType,t),H(r,t)}if(Nn(e)){let r=e;Yn(r.childType,t),H(r,t)}if(Vt(e)&&Yn(e.childType,t),it(e)||$t(e)){for(let r of e.fields)Yn(r.type,t);for(let r of e.fields)if(r.assignedValue&&we(r.assignedValue)){let i=r.assignedValue;t.functions[i.funcId]||(t.functions[i.funcId]={value:i,cName:Le(i.funcId)},Eo(i.type,t),qn(i.body,t))}else if(r.assignedValue&&(xt(r.assignedValue)||vn(r.assignedValue))){let i=r.assignedValue;vl(i,t,!1)}}}else if(ut(e)){let n=e,r=n.childType,i=n.length;if(Rt(i)){Yn(r,t);let o=H(r,t),a=`Array_${Le(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(ot(e)){if(Yn(e.childType,t),Vt(e.childType)){let r=e.childType.childType;Yn(r,t);let i=H(r,t),o=`Slice_${Le(i)}`;t.sliceStructTypes.has(o)||t.sliceStructTypes.set(o,{childType:i})}t.types[e.id]={type:e,cName:H(e,t)}}else Td.has(e.tag)&&(t.types[e.id]={type:e,cName:H(e,t)});e.trait&&Yn(e.trait,t)}}}var S_=Z(()=>{qt();Te();Ne();at();Fe();pl();I_();Wt()});function $a(e){var t,n,r;if(e.$&&e.$.value&&Me(e.$.value)&&!(ne(e.$.type)&&e.$.type.isExtern)){if(!We(e.$.type))return!0}if(S(e)){if($a(e.func))return!0;for(let i of e.args)if(!((t=i.$)!=null&&t.type&&We(i.$.type))&&$a(i))return!0}if(e.$&&e.$.macroExpansion){if(e.$.type&&We(e.$.type))return!1;if($a(e.$.macroExpansion))return!0}if((n=e.$)!=null&&n.deferredDupExpressions){for(let i of e.$.deferredDupExpressions)if($a(i))return!0}if((r=e.$)!=null&&r.deferredDropExpressions){for(let i of e.$.deferredDropExpressions)if($a(i))return!0}return!1}function vl(e,t,n=!0){for(let r=0;r<e.fields.length;r++){let i=e.fields[r],o=e.type.fields[r];if(we(i)){let a=o.label;if(a==="main")t.functions[i.funcId]={value:i,cName:"__yo_user_main"};else if(t.isLibrary)if(n&&t.currentModuleId&&i.funcId.startsWith(`fn_${t.currentModuleId}_`)){let l=Le(a);Object.values(t.functions).some(c=>c.cName===l)?t.functions[i.funcId]={value:i,cName:Le(i.funcId)}:(t.functions[i.funcId]={value:i,cName:l},t.exportedFunctionLabels||(t.exportedFunctionLabels=new Map),t.exportedFunctionLabels.set(i.funcId,a))}else t.functions[i.funcId]={value:i,cName:Le(i.funcId)};else if(n&&t.currentModuleId&&i.funcId.startsWith(`fn_${t.currentModuleId}_`)){let l=Le(a);Object.values(t.functions).some(c=>c.cName===l)?t.functions[i.funcId]={value:i,cName:Le(i.funcId)}:(t.functions[i.funcId]={value:i,cName:l},t.exportedFunctionLabels||(t.exportedFunctionLabels=new Map),t.exportedFunctionLabels.set(i.funcId,a))}else t.functions[i.funcId]={value:i,cName:Le(i.funcId)};qn(i.body,t)}}}function Bd(e,t){for(let n=0;n<e.fields.length;n++){let r=e.fields[n];r&&we(r)?t.functions[r.funcId]||(r.isModuleEffectMember=!0,t.functions[r.funcId]={value:r,cName:Le(r.funcId)},qn(r.body,t)):r&&xt(r)&&Bd(r,t)}}function qn(e,t){var i,o,a,s,l,u,c,_,f,p,d,g;if((i=e.$)!=null&&i.value&&xt(e.$.value)){let m=e.$.value;Bd(m,t)}if(S(e)&&E(e,R.test)||S(e)&&E(e,F.comptime_expect_error))return;if(e.$&&e.$.macroExpansion&&qn(e.$.macroExpansion,t),(o=e.$)!=null&&o.effectAnalysis){let m=e.$.effectAnalysis.handlerValue;m&&we(m)&&qn(m.body,t)}if(e.$&&e.$.closureFunctionValue){let m=e.$.closureFunctionValue;t.functions[m.funcId]||(t.functions[m.funcId]={value:m,cName:Le(m.funcId)},qn(m.body,t))}if((a=e.$)!=null&&a.indexMethodValue&&we(e.$.indexMethodValue)){let m=e.$.indexMethodValue;t.functions[m.funcId]||(t.functions[m.funcId]={value:m,cName:Le(m.funcId)},qn(m.body,t))}if(S(e)&&e.$&&e.$.dynCallTraitValues&&e.$.dynCallTraitValues.length>0){let m=e.$.type,h=e.args[0];if(dt(m)&&h&&((s=h.$)!=null&&s.type)){let v=h.$.type,T=e.$.dynCallTraitValues;if(T.length>0&&(pn(v)||Yr(v))){let $=Yr(v)?v.fields[0].type:v,b=`${$.id}_${m.id}`;t.dynImpls.set(b,{dynType:m,concreteType:$,dataType:v,traitValues:T})}}}if(S(e)){let m=(l=e.func.$)==null?void 0:l.type,h=(u=e.func.$)==null?void 0:u.value;if(e.func.token.value==="?=")return;if(ne(m)){if(we(h)&&h.isControlFunction){qn(h.body,t);for(let v of e.args)qn(v,t);return}if(we(h)){if(h.type.return.isCompileTimeOnly||T_(h)&&!h.specializedType)return;if(h.specializedType&&no(h.specializedType)&&An(h.specializedType).length===0){qn(e.func,t);for(let T of e.args)qn(T,t);return}if(!t.functions[h.funcId]){let v=!1;if($a(h.body)){let T=h.specializedType??h.type;if(v=T.implicitParameters.length>0&&(An(T).length>0||!no(h.type)&&h.type.implicitParameters.length>0),!v)return}if(!v&&!(An(h.specializedType??h.type).length>0)&&(h.specializedType??h.type).parameters.map(w=>w.type).some(w=>B(w)&&ft(w)&&!w.resolvedConcreteType))return;t.functions[h.funcId]={value:h,cName:Le(h.funcId)},qn(h.body,t)}}else if(m.isExtern==="c"){let v=m.externName?m.externName:K(e.func)?e.func.token.value:m.id;t.externFunctions[m.id]={type:m,cName:v}}else if(m.isExtern==="yo"){let v=m.externName;if(!(v&&v.startsWith("__yo_"))){let T=v?Le(v):K(e.func)?Le(e.func.token.value):Le(m.id);t.externFunctions[m.id]={type:m,cName:T}}}}qn(e.func,t);for(let v of e.args)qn(v,t)}let n=(c=e.$)==null?void 0:c.type,r=(_=e.$)==null?void 0:_.value;if(ne(n)){if(we(r)&&r.isControlFunction){if(r.isModuleEffectMember=!0,t.functions[r.funcId]||(t.functions[r.funcId]={value:r,cName:Le(r.funcId)}),r.specializedFunctionCaches)for(let m of r.specializedFunctionCaches){let h=m.specializedFunction;h&&!t.functions[h.funcId]&&(h.isModuleEffectMember=!0,t.functions[h.funcId]={value:h,cName:Le(h.funcId)},qn(h.body,t))}qn(r.body,t);return}if(we(r)){if(T_(r)&&!r.specializedFunctionCaches||t.functions[r.funcId])return;if($a(r.body))return;t.functions[r.funcId]={value:r,cName:Le(r.funcId)},qn(r.body,t)}}if(Y((f=e.$)==null?void 0:f.value)&&Yn(e.$.value.value,t),(p=e.$)!=null&&p.deferredDupExpressions)for(let m of e.$.deferredDupExpressions)qn(m,t);if((d=e.$)!=null&&d.deferredDropExpressions)for(let m of e.$.deferredDropExpressions)qn(m,t);if((g=e.$)!=null&&g.dynCallTraitValues)for(let m of e.$.dynCallTraitValues)vl(m,t,!1)}function Gd(e){let t=F.dispose[0];for(let n in e.types){let{type:r}=e.types[n];if(!Ue(r)||!r.isReferenceSemantics)continue;let i=pi({concreteType:r,methodName:t,env:r.env});for(let o of i)if(o.value&&we(o.value)){let a=o.value;if(e.functions[a.funcId])continue;a.funcName||(a.funcName=t),e.functions[a.funcId]={value:a,cName:Le(a.funcId)},Eo(a.type,e),qn(a.body,e)}}}var I_=Z(()=>{qt();to();Te();Ne();Fe();S_();Wt();Ea()});function Wd(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 Yd(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=B(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(`static ${u}* __yo_new_${u}(${c} value) {`),t.emitLine(` ${u}* box = (${u}*)__yo_malloc(sizeof(${u}));`),t.emitLine(" box->header.ref_count = 1;"),e.needsCycleGC&&(t.emitLine(" box->header.gc_flags = 0;"),t.emitLine(" box->header.gc_mark = __YO_GC_UNMARKED;"),t.emitLine(" box->header.gc_next = NULL;"),t.emitLine(" box->header.gc_prev = NULL;"));let _=`__yo_dispose_${u}`;if(e.needsCycleGC)t.emitLine(` box->header.dispose_fn = ${_};`);else{e.disposeTypeIds||(e.disposeTypeIds=new Map,e.nextDisposeTypeId=1);let d=e.disposeTypeIds.get(_);d===void 0&&(d=e.nextDisposeTypeId,e.nextDisposeTypeId=d+1,e.disposeTypeIds.set(_,d)),t.emitLine(` box->header.type_id = ${d};`)}e.needsCycleGC&&t.emitLine(" box->header.traverse_fn = NULL; // TODO: Set if value contains GC types"),t.emitLine(" box->value = value;"),t.emitLine(" return box;"),t.emitLine("}"),t.emitLine(""),t.emitLine(`static void __yo_dispose_${u}(void* ptr) {`),t.emitLine(` ${u}* box = (${u}*)ptr;`);let p=(i=(B(a.concreteType)&&a.concreteType.resolvedConcreteType?a.concreteType.resolvedConcreteType:a.concreteType).trait)==null?void 0:i.fields.find(d=>d.label===F.___drop[0]);if(p&&p.assignedValue&&we(p.assignedValue)){let d=(o=e.functions[p.assignedValue.funcId])==null?void 0:o.cName;d&&t.emitLine(` ${d}(box->value);`)}t.emitLine("}"),t.emitLine("")}}function qd(e){var n,r,i,o;let t=e.emitter;if(e.dynImpls.size!==0){t.emitDeclarationLine(""),t.emitDeclarationLine("// === Dyn Wrapper Functions ==="),t.emitDeclarationLine("// Wrappers that unwrap boxed values and call impl methods"),t.emitDeclarationLine("");for(let[a,s]of e.dynImpls){let l=s.dataType,u=new Set([F.___dup[0],F.___drop[0],F.___dispose[0],F.dispose[0]]);for(let{traitType:c}of s.dynType.requiredTraits){if(!xn(c))continue;let _=c.isFn.callType,f=H(_.return.type,e),p=`__yo_wrap_${a}_call`,d=["void* self_ptr"];for(let g=0;g<_.parameters.length;g++){let m=_.parameters[g],h=H(m.type,e);d.push(`${h} arg${g+1}`)}if(t.emitDeclarationLine(`static ${f} ${p}(${d.join(", ")}) {`),Yr(l)){let g=((n=e.types[l.id])==null?void 0:n.cName)||`unknown_${l.id}`,m=Le(l.fields[0].label);t.emitDeclarationLine(` ${g}* box = (${g}*)self_ptr;`);let h=l.fields[0].type,v=B(h)&&h.resolvedConcreteType?h.resolvedConcreteType:h,T=e.implClosureCallMap.get(v.id),$=(()=>{var w;if(T)return T.functionCName;for(let[,C]of Object.entries(e.functions)){let A=C.value.closureInfo;if(((w=A==null?void 0:A.captureType)==null?void 0:w.id)===v.id)return C.cName}})(),b=[];if($){b.push(`(void*)&box->${m}`);for(let w=0;w<_.parameters.length;w++)b.push(`arg${w+1}`);uo(_.return.type)?t.emitDeclarationLine(` ${$}(${b.join(", ")});`):t.emitDeclarationLine(` return ${$}(${b.join(", ")});`)}else{b.push(`box->${m}.data`);for(let w=0;w<_.parameters.length;w++)b.push(`arg${w+1}`);uo(_.return.type)?t.emitDeclarationLine(` box->${m}.call(${b.join(", ")});`):t.emitDeclarationLine(` return box->${m}.call(${b.join(", ")});`)}}else{t.emitDeclarationLine(" (void)self_ptr; /* Dyn(Fn): expected Box(...) data */");for(let g=0;g<_.parameters.length;g++)t.emitDeclarationLine(` (void)arg${g+1};`);uo(_.return.type)?t.emitDeclarationLine(" return;"):(t.emitDeclarationLine(` ${f} zero = (${f})0;`),t.emitDeclarationLine(" return zero;"))}t.emitDeclarationLine("}"),t.emitDeclarationLine("")}for(let c=0;c<s.dynType.requiredTraits.length;c++){let{traitType:_}=s.dynType.requiredTraits[c];if(xn(_))continue;let f=s.traitValues[c];if(!f){t.emitDeclarationLine(`/* Warning: Module value missing for module ${c} */`);continue}let d=f.type.fields;for(let g=0;g<d.length;g++){let m=d[g];if(m.label==="Self"||u.has(m.label))continue;let h=f.fields[g];if(!h||!we(h)){t.emitDeclarationLine(`/* Warning: Module field ${m.label} is not a function value */`);continue}let v=m.type;if(!ne(v)){t.emitDeclarationLine(`/* Warning: Module field ${m.label} is not a function type */`);continue}let T=h.funcId,$=(r=e.functions[T])==null?void 0:r.cName;if(!$){t.emitDeclarationLine(`/* Warning: Impl function for ${m.label} not found */`);continue}let b=`__yo_wrap_${a}_${m.label}`,w=H(v.return.type,e),C=["void* self_ptr"];for(let x=1;x<v.parameters.length;x++){let V=v.parameters[x],I=H(V.type,e);C.push(`${I} arg${x}`)}t.emitDeclarationLine(`static ${w} ${b}(${C.join(", ")}) {`);let k=(i=v.parameters[0])==null?void 0:i.type,A;if(Yr(l)){let x=((o=e.types[l.id])==null?void 0:o.cName)||`unknown_${l.id}`,V=Le(l.fields[0].label);t.emitDeclarationLine(` ${x}* box = (${x}*)self_ptr;`),k&&ot(k)?A=`&box->${V}`:A=`box->${V}`}else{let x=H(s.concreteType,e);t.emitDeclarationLine(` ${x} concrete_value = (${x})self_ptr;`),k&&ot(k)?A="&concrete_value":A="concrete_value"}let N=[A];for(let x=1;x<v.parameters.length;x++)N.push(`arg${x}`);uo(v.return.type)?t.emitDeclarationLine(` ${$}(${N.join(", ")});`):t.emitDeclarationLine(` return ${$}(${N.join(", ")});`),t.emitDeclarationLine("}"),t.emitDeclarationLine("")}}}}}function Hd(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=B(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=B(s.concreteType)&&s.concreteType.resolvedConcreteType?s.concreteType.resolvedConcreteType:s.concreteType,c=((o=e.types[u.id])==null?void 0:o.cName)||`unknown_${u.id}`,_=`__yo_vtable_${a}`,f=`${l}_vtable`,p=`__yo_typeid_${c}`;t.emitDeclarationLine(`// Vtable for impl(${c}, ${s.dynType.requiredTraits.map(({traitType:m})=>m.typeName||"?").join(" + ")})`),t.emitDeclarationLine(`static const ${f} ${_} = {`),t.emitDeclarationLine(` .__yo_type_id = (uintptr_t)&${p},`);let d=new Set,g=new Set([F.___dup[0],F.___drop[0],F.___dispose[0],F.dispose[0]]);for(let{traitType:m}of s.dynType.requiredTraits){if(xn(m)){let h=`__yo_wrap_${a}_call`;t.emitDeclarationLine(` .call = ${h},`),d.add("call");continue}for(let h of m.fields)if(h.label!=="Self"&&!g.has(h.label)&&!d.has(h.label)&&(d.add(h.label),ne(h.type))){let v=h.type;if(v.parameters.length>0){let T=v.parameters[0];if(T&&T.label==="self"){let $=`__yo_wrap_${a}_${h.label}`;t.emitDeclarationLine(` .${Le(h.label)} = ${$},`)}}}}t.emitDeclarationLine("};"),t.emitDeclarationLine("")}}var jd=Z(()=>{Te();Ne();Fe();Wt()});function Kd(e,t){let r=ln(t)?"__declspec(thread)":"_Thread_local";e.emitLine(`
200
200
  // ============================================================================
201
201
  // Async/Await Runtime - Per-Thread Cooperative Scheduler
202
202
  // ============================================================================
@@ -9948,7 +9948,7 @@ ${o?` {
9948
9948
 
9949
9949
  return count;
9950
9950
  }
9951
- `))}var M_=Z(()=>{Sr();N_();x_();V_();D_()});function sm(e,t,n,r){Kd(e,t),zi(t)?em(e):hi(t)?Zd(e):ln(t)?nm(e):Zn(t)&&im(e,t),Zn(t)||am(e,t,r)}var lm=Z(()=>{Sr();Xd();M_();x_();N_();V_();D_()});function eC(e,t,n,r){var i,o;if((i=e.$)!=null&&i.deferredDupExpressions&&e.$.deferredDupExpressions.length>0){Jt(e,n,r);let a=e.$.deferredDupExpressions[0];if(S(a)&&((o=a.$)!=null&&o.variableName))return Qe(a.$.variableName,a.$.env)}return t}function tC(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=G(e,t,n);e.$.variableName=s;let u=H(e.$.type,n),c=Ae(s);c!==l&&n.emitter.emitLine(`${t}${u} ${c} = ${l};`)}else{let s=G(e,t,n);n.emitter.emitLine(`${t}${s};`)}Jt(e,t,n);let a=e.$.deferredDupExpressions[0];if(S(a)&&((o=a.$)!=null&&o.variableName))return Qe(a.$.variableName,a.$.env)}return G(e,t,n)}function nC(e){var t,n;if(S(e)&&E(e,F.___drop)&&e.args.length>=1){let r=e.args[0];if(r&&K(r))return Qe(r.token.value,(t=r.$)==null?void 0:t.env)}if(S(e)&&e.args.length===0&&S(e.func)&&E(e.func,".",2)&&K(e.func.args[1])&&e.func.args[1].token.value===F.___drop[0]&&K(e.func.args[0])){let r=e.func.args[0];return Qe(r.token.value,(n=r.$)==null?void 0:n.env)}}function wr(e,t,n,r=!1,i=!1,o=!1){var a,s;if(t.pendingDeferredDrops&&t.pendingDeferredDrops.length>0){let l=new Set;if(!i&&((a=n.$)!=null&&a.deferredDropExpressions))for(let _ of n.$.deferredDropExpressions){let f=qr(_);f&&l.add(f)}let u=t.effectSmConsumedArgCNames,c=(s=n.$)!=null&&s.env&&!o?t.pendingDeferredDrops.filter(_=>{let f=qr(_);return!f||l.has(f)?!1:fe(n.$.env,f).length>0}):t.pendingDeferredDrops.filter(_=>{let f=qr(_);if(!f||l.has(f))return!1;if(u&&u.size>0){let p=nC(_);if(p&&u.has(p))return!1}return!0});if(c.length>0){let _=r?"Drop local variables before early completion":"Drop local variables before early return";t.emitter.emitLine(`${e}// ${_}`);for(let f of c){let p=G(f,e,t);p&&t.emitter.emitLine(`${e}${p};`)}}}}function wi(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=qr(a);return s?fe(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=G(a,e,t);s&&t.emitter.emitLine(`${e}${s};`)}}}function um(e,t,n){var o,a,s,l,u,c;let r=n;if(r.continuationVariables){let _=r.continuationVariables.get("resume");if(_&&"directReturnVar"in _){if(!_.isUnitReturn){let f=e.args[0];if(f){let p=G(f,t,n);p&&n.emitter.emitLine(`${t}${_.directReturnVar} = ${p};`)}}return wr(t,r,e,!1,!0),_.directExitLabel&&n.emitter.emitLine(`${t}goto ${_.directExitLabel};`),""}}let i=e.args[0];if(i){if(!e.$)throw new Error("Internal error: return expression missing metadata");if(!e.$.variableName&&!We(e.$.type))return"// Error: return expression missing temporary variable name";let _,f=!1;if(r.inAsyncStateMachine&&((o=i.$)!=null&&o.variableName)){let h=i.$.variableName;i.$.variableName=void 0,_=G(i,t,n),i.$.variableName=h,f=!0}else if((a=i.$)!=null&&a.variableName&&((s=i.$)!=null&&s.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){let h=i.$.variableName;i.$.variableName=void 0;let v=G(i,t,n);i.$.variableName=h;let T=H(i.$.type,n),$=Qe(h,i.$.env);$!==v&&n.emitter.emitLine(`${t}${T} ${$} = ${v};`),_=$}else _=G(i,t,n);let p=!1;if((l=i.$)!=null&&l.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){Jt(i,t,r);let h=i.$.deferredDupExpressions[0];S(h)&&((u=h.$)!=null&&u.variableName)&&(_=Qe(h.$.variableName,h.$.env),p=!0)}let d=H(e.$.type,n),g=e.$.variableName?Qe(e.$.variableName,e.$.env):void 0;if(!p&&!We(e.$.type)&&g&&g!==_&&n.emitter.emitLine(`${t}${d} ${g} = ${_};`),e.$.deferredDropExpressions&&Ln(e,t,n),r.inAsyncStateMachine){let h=r.inAsyncStateMachine.futureType,T=Wn(h).isFuture.outputType,$=We(T);wr(t,r,e,!0),n.emitter.emitLine(`${t}// Final state - complete the result Future`);let b;return $||(b=e.$.variableName&&f?e.$.variableName:e.$.variableName||_),vo({emitter:n.emitter,indent:t,resultCode:b,debugLabel:n.currentFunctionName}),""}return wr(t,r,e),We(e.$.type)?"return":`return ${p?_:g??_}`}else{if((c=e.$)!=null&&c.deferredDropExpressions&&Ln(e,t,n),r.inAsyncStateMachine){let _=r.inAsyncStateMachine.futureType,p=Wn(_).isFuture.outputType,d=We(p);wr(t,r,e,!0),n.emitter.emitLine(`${t}// Final state - complete the result Future (early unit return)`);let g=d?void 0:`(${H(p,n)}){0}`;return vo({emitter:n.emitter,indent:t,resultCode:g,debugLabel:n.currentFunctionName}),""}return wr(t,r,e),"return"}}function cm(e,t,n){let r=n;switch(e.tag){case"Atom":{let i=ps(e,n),o=eC(e,i,t,r);n.emitter.emitLine(`${t}return ${o};`);break}case"FnCall":{if(E(e,R.return)){let i=G(e,t,n);n.emitter.emitLine(`${t}${i};`)}else{let i=tC(e,t,r);n.emitter.emitLine(`${t}return ${i};`)}break}}}var Tl=Z(()=>{mt();qt();Te();Ne();Wt();ha();tc();kr();yn()});function _m(e,t,n,r){let i=ln(n),o=zi(n),a=hi(n),s=i?"static unsigned __stdcall __yo_thread_entry(void* arg) {":"static void* __yo_thread_entry(void* arg) {",l=i?"return 0;":"return NULL;",u=i?"static unsigned __stdcall __yo_worker_thread_entry(void* arg) {":"static void* __yo_worker_thread_entry(void* arg) {",c=i?"return 0;":"return NULL;",_=i?"SwitchToThread();":"sched_yield();",f=i?`static __YO_THREAD_SYNC_TYPE __yo_worker_pool_mutex; // Pool-level mutex (initialized in __yo_worker_init_mutex)
9951
+ `))}var M_=Z(()=>{Sr();N_();x_();V_();D_()});function sm(e,t,n,r){Kd(e,t),zi(t)?em(e):hi(t)?Zd(e):ln(t)?nm(e):Zn(t)&&im(e,t),Zn(t)||am(e,t,r)}var lm=Z(()=>{Sr();Xd();M_();x_();N_();V_();D_()});function eC(e,t,n,r){var i,o;if((i=e.$)!=null&&i.deferredDupExpressions&&e.$.deferredDupExpressions.length>0){Jt(e,n,r);let a=e.$.deferredDupExpressions[0];if(S(a)&&((o=a.$)!=null&&o.variableName))return Qe(a.$.variableName,a.$.env)}return t}function tC(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=G(e,t,n);e.$.variableName=s;let u=H(e.$.type,n),c=Le(s);c!==l&&n.emitter.emitLine(`${t}${u} ${c} = ${l};`)}else{let s=G(e,t,n);n.emitter.emitLine(`${t}${s};`)}Jt(e,t,n);let a=e.$.deferredDupExpressions[0];if(S(a)&&((o=a.$)!=null&&o.variableName))return Qe(a.$.variableName,a.$.env)}return G(e,t,n)}function nC(e){var t,n;if(S(e)&&E(e,F.___drop)&&e.args.length>=1){let r=e.args[0];if(r&&K(r))return Qe(r.token.value,(t=r.$)==null?void 0:t.env)}if(S(e)&&e.args.length===0&&S(e.func)&&E(e.func,".",2)&&K(e.func.args[1])&&e.func.args[1].token.value===F.___drop[0]&&K(e.func.args[0])){let r=e.func.args[0];return Qe(r.token.value,(n=r.$)==null?void 0:n.env)}}function wr(e,t,n,r=!1,i=!1,o=!1){var a,s;if(t.pendingDeferredDrops&&t.pendingDeferredDrops.length>0){let l=new Set;if(!i&&((a=n.$)!=null&&a.deferredDropExpressions))for(let _ of n.$.deferredDropExpressions){let f=qr(_);f&&l.add(f)}let u=t.effectSmConsumedArgCNames,c=(s=n.$)!=null&&s.env&&!o?t.pendingDeferredDrops.filter(_=>{let f=qr(_);return!f||l.has(f)?!1:fe(n.$.env,f).length>0}):t.pendingDeferredDrops.filter(_=>{let f=qr(_);if(!f||l.has(f))return!1;if(u&&u.size>0){let p=nC(_);if(p&&u.has(p))return!1}return!0});if(c.length>0){let _=r?"Drop local variables before early completion":"Drop local variables before early return";t.emitter.emitLine(`${e}// ${_}`);for(let f of c){let p=G(f,e,t);p&&t.emitter.emitLine(`${e}${p};`)}}}}function wi(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=qr(a);return s?fe(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=G(a,e,t);s&&t.emitter.emitLine(`${e}${s};`)}}}function um(e,t,n){var o,a,s,l,u,c;let r=n;if(r.continuationVariables){let _=r.continuationVariables.get("resume");if(_&&"directReturnVar"in _){if(!_.isUnitReturn){let f=e.args[0];if(f){let p=G(f,t,n);p&&n.emitter.emitLine(`${t}${_.directReturnVar} = ${p};`)}}return wr(t,r,e,!1,!0),_.directExitLabel&&n.emitter.emitLine(`${t}goto ${_.directExitLabel};`),""}}let i=e.args[0];if(i){if(!e.$)throw new Error("Internal error: return expression missing metadata");if(!e.$.variableName&&!We(e.$.type))return"// Error: return expression missing temporary variable name";let _,f=!1;if(r.inAsyncStateMachine&&((o=i.$)!=null&&o.variableName)){let h=i.$.variableName;i.$.variableName=void 0,_=G(i,t,n),i.$.variableName=h,f=!0}else if((a=i.$)!=null&&a.variableName&&((s=i.$)!=null&&s.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){let h=i.$.variableName;i.$.variableName=void 0;let v=G(i,t,n);i.$.variableName=h;let T=H(i.$.type,n),$=Qe(h,i.$.env);$!==v&&n.emitter.emitLine(`${t}${T} ${$} = ${v};`),_=$}else _=G(i,t,n);let p=!1;if((l=i.$)!=null&&l.deferredDupExpressions&&i.$.deferredDupExpressions.length>0){Jt(i,t,r);let h=i.$.deferredDupExpressions[0];S(h)&&((u=h.$)!=null&&u.variableName)&&(_=Qe(h.$.variableName,h.$.env),p=!0)}let d=H(e.$.type,n),g=e.$.variableName?Qe(e.$.variableName,e.$.env):void 0;if(!p&&!We(e.$.type)&&g&&g!==_&&n.emitter.emitLine(`${t}${d} ${g} = ${_};`),e.$.deferredDropExpressions&&Ln(e,t,n),r.inAsyncStateMachine){let h=r.inAsyncStateMachine.futureType,T=Wn(h).isFuture.outputType,$=We(T);wr(t,r,e,!0),n.emitter.emitLine(`${t}// Final state - complete the result Future`);let b;return $||(b=e.$.variableName&&f?e.$.variableName:e.$.variableName||_),vo({emitter:n.emitter,indent:t,resultCode:b,debugLabel:n.currentFunctionName}),""}return wr(t,r,e),We(e.$.type)?"return":`return ${p?_:g??_}`}else{if((c=e.$)!=null&&c.deferredDropExpressions&&Ln(e,t,n),r.inAsyncStateMachine){let _=r.inAsyncStateMachine.futureType,p=Wn(_).isFuture.outputType,d=We(p);wr(t,r,e,!0),n.emitter.emitLine(`${t}// Final state - complete the result Future (early unit return)`);let g=d?void 0:`(${H(p,n)}){0}`;return vo({emitter:n.emitter,indent:t,resultCode:g,debugLabel:n.currentFunctionName}),""}return wr(t,r,e),"return"}}function cm(e,t,n){let r=n;switch(e.tag){case"Atom":{let i=ps(e,n),o=eC(e,i,t,r);n.emitter.emitLine(`${t}return ${o};`);break}case"FnCall":{if(E(e,R.return)){let i=G(e,t,n);n.emitter.emitLine(`${t}${i};`)}else{let i=tC(e,t,r);n.emitter.emitLine(`${t}return ${i};`)}break}}}var Tl=Z(()=>{mt();qt();Te();Ne();Wt();ha();tc();kr();yn()});function _m(e,t,n,r){let i=ln(n),o=zi(n),a=hi(n),s=i?"static unsigned __stdcall __yo_thread_entry(void* arg) {":"static void* __yo_thread_entry(void* arg) {",l=i?"return 0;":"return NULL;",u=i?"static unsigned __stdcall __yo_worker_thread_entry(void* arg) {":"static void* __yo_worker_thread_entry(void* arg) {",c=i?"return 0;":"return NULL;",_=i?"SwitchToThread();":"sched_yield();",f=i?`static __YO_THREAD_SYNC_TYPE __yo_worker_pool_mutex; // Pool-level mutex (initialized in __yo_worker_init_mutex)
9952
9952
  static volatile int __yo_worker_pool_mutex_initialized = 0;`:"static __YO_THREAD_SYNC_TYPE __yo_worker_pool_mutex = __YO_THREAD_SYNC_INIT; // Pool-level mutex",p=i?`
9953
9953
  // Initialize the worker pool mutex on Windows (must be called before any use)
9954
9954
  static void __yo_worker_init_mutex(void) {
@@ -10330,7 +10330,7 @@ static void __yo_worker_spawn(__yo_thread_fn fn, void* closure) {
10330
10330
  __yo_cond_signal(&worker->cond);
10331
10331
  __yo_mutex_unlock(&worker->mutex);
10332
10332
  }
10333
- `)}var fm=Z(()=>{Sr()});function O_(e){let t=e.emitter,n=!1;for(let r in e.types){let{type:i,cName:o}=e.types[r];if(!("requiredTraits"in i&&"negativeTraits"in i))continue;n||(t.emitDeclarationLine(""),t.emitDeclarationLine("// === Dyn Type Forward Declarations ==="),n=!0);let a=`${o}_vtable`;t.emitDeclarationLine(`typedef struct ${a}_s ${a};`),t.emitDeclarationLine(`typedef struct { // ${i.typeName||"Dyn"} : ${M(i)} (value type - fat pointer)`),t.emitDeclarationLine(" void* data; // Pointer to boxed data (with __yo_ref_header_t)"),t.emitDeclarationLine(` const ${a}* vtable; // Pointer to static vtable (no allocation needed)`),t.emitDeclarationLine(`} ${o};`),t.emitDeclarationLine("")}}function R_(e,t,n){let r=n.emitter,i=`${t}_vtable`;r.emitDeclarationLine(`typedef struct ${i}_s { // Vtable for ${M(e)}`),r.emitDeclarationLine(" uintptr_t __yo_type_id; // Runtime type identity (address of unique static per concrete type)");let o=new Set,a=new Set([F.___dup[0],F.___drop[0],F.___dispose[0],F.dispose[0]]);for(let{traitType:s}of e.requiredTraits){if(xn(s)){let l=s.isFn.callType,u=H(l.return.type,n),c=l.parameters.map(_=>{let f=H(_.type,n),p=Ae(_.label);return`${f} ${p}`}).join(", ");r.emitDeclarationLine(` ${u} (*call)(void* self${c?", "+c:""}); // Call function pointer`),o.add("call");continue}for(let l of s.fields){if(l.label==="Self"||a.has(l.label)||o.has(l.label))continue;o.add(l.label);let u=Ae(l.label);if(ne(l.type)){let c=l.type;if(c.parameters.length>0){let _=c.parameters[0];if(_&&_.label==="self"){let f=H(c.return.type,n),p=c.parameters.map((d,g)=>{if(g===0)return"void* self";{let m=H(d.type,n),h=Ae(d.label);return`${m} ${h}`}}).join(", ");r.emitDeclarationLine(` ${f} (*${u})(${p}); // Method pointer for ${l.label}`)}}}else{let c=H(l.type,n);r.emitDeclarationLine(` ${c} ${u}; // Non-function member ${l.label}`)}}}r.emitDeclarationLine(`} ${i};`),r.emitDeclarationLine("")}function P_(e){var r;let t=e.emitter;if(e.dynImpls.size===0)return;t.emitDeclarationLine(""),t.emitDeclarationLine("// === Dyn Box Types ==="),t.emitDeclarationLine("// These structs wrap concrete types for dynamic dispatch"),t.emitDeclarationLine("");let n=new Set;for(let[,i]of e.dynImpls){let o=B(i.concreteType)&&i.concreteType.resolvedConcreteType?i.concreteType.resolvedConcreteType:i.concreteType,s=`__yo_dyn_box_${((r=e.types[o.id])==null?void 0:r.cName)||`unknown_${o.id}`}`;if(n.has(s))continue;n.add(s);let l=H(o,e);t.emitDeclarationLine("typedef struct {"),t.emitDeclarationLine(" __yo_ref_header_t header;"),t.emitDeclarationLine(` ${l} value;`),t.emitDeclarationLine(`} ${s};`),t.emitDeclarationLine(""),t.emitDeclarationLine(`static ${s}* __yo_new_${s}(${l} value);`),t.emitDeclarationLine(`static void __yo_dispose_${s}(void* ptr);`),t.emitDeclarationLine("")}}var z_=Z(()=>{Te();Ne();at();Wt()});function pm(e){let t=e.debugGc?"#define __YO_DEBUG_GC 1":"// #define __YO_DEBUG_GC 1",n=e.debugParallelism?"#define __YO_DEBUG_PARALLELISM 1":"// #define __YO_DEBUG_PARALLELISM 1",r=e.debugAsyncAwait?"#define __YO_DEBUG_ASYNC_AWAIT 1":"// #define __YO_DEBUG_ASYNC_AWAIT 1";e.emitter.emitDeclarationLine(`// Non-atomic Reference Counting with Thread-Local Cycle Collection
10333
+ `)}var fm=Z(()=>{Sr()});function O_(e){let t=e.emitter,n=!1;for(let r in e.types){let{type:i,cName:o}=e.types[r];if(!("requiredTraits"in i&&"negativeTraits"in i))continue;n||(t.emitDeclarationLine(""),t.emitDeclarationLine("// === Dyn Type Forward Declarations ==="),n=!0);let a=`${o}_vtable`;t.emitDeclarationLine(`typedef struct ${a}_s ${a};`),t.emitDeclarationLine(`typedef struct { // ${i.typeName||"Dyn"} : ${M(i)} (value type - fat pointer)`),t.emitDeclarationLine(" void* data; // Pointer to boxed data (with __yo_ref_header_t)"),t.emitDeclarationLine(` const ${a}* vtable; // Pointer to static vtable (no allocation needed)`),t.emitDeclarationLine(`} ${o};`),t.emitDeclarationLine("")}}function R_(e,t,n){let r=n.emitter,i=`${t}_vtable`;r.emitDeclarationLine(`typedef struct ${i}_s { // Vtable for ${M(e)}`),r.emitDeclarationLine(" uintptr_t __yo_type_id; // Runtime type identity (address of unique static per concrete type)");let o=new Set,a=new Set([F.___dup[0],F.___drop[0],F.___dispose[0],F.dispose[0]]);for(let{traitType:s}of e.requiredTraits){if(xn(s)){let l=s.isFn.callType,u=H(l.return.type,n),c=l.parameters.map(_=>{let f=H(_.type,n),p=Le(_.label);return`${f} ${p}`}).join(", ");r.emitDeclarationLine(` ${u} (*call)(void* self${c?", "+c:""}); // Call function pointer`),o.add("call");continue}for(let l of s.fields){if(l.label==="Self"||a.has(l.label)||o.has(l.label))continue;o.add(l.label);let u=Le(l.label);if(ne(l.type)){let c=l.type;if(c.parameters.length>0){let _=c.parameters[0];if(_&&_.label==="self"){let f=H(c.return.type,n),p=c.parameters.map((d,g)=>{if(g===0)return"void* self";{let m=H(d.type,n),h=Le(d.label);return`${m} ${h}`}}).join(", ");r.emitDeclarationLine(` ${f} (*${u})(${p}); // Method pointer for ${l.label}`)}}}else{let c=H(l.type,n);r.emitDeclarationLine(` ${c} ${u}; // Non-function member ${l.label}`)}}}r.emitDeclarationLine(`} ${i};`),r.emitDeclarationLine("")}function P_(e){var r;let t=e.emitter;if(e.dynImpls.size===0)return;t.emitDeclarationLine(""),t.emitDeclarationLine("// === Dyn Box Types ==="),t.emitDeclarationLine("// These structs wrap concrete types for dynamic dispatch"),t.emitDeclarationLine("");let n=new Set;for(let[,i]of e.dynImpls){let o=B(i.concreteType)&&i.concreteType.resolvedConcreteType?i.concreteType.resolvedConcreteType:i.concreteType,s=`__yo_dyn_box_${((r=e.types[o.id])==null?void 0:r.cName)||`unknown_${o.id}`}`;if(n.has(s))continue;n.add(s);let l=H(o,e);t.emitDeclarationLine("typedef struct {"),t.emitDeclarationLine(" __yo_ref_header_t header;"),t.emitDeclarationLine(` ${l} value;`),t.emitDeclarationLine(`} ${s};`),t.emitDeclarationLine(""),t.emitDeclarationLine(`static ${s}* __yo_new_${s}(${l} value);`),t.emitDeclarationLine(`static void __yo_dispose_${s}(void* ptr);`),t.emitDeclarationLine("")}}var z_=Z(()=>{Te();Ne();at();Wt()});function pm(e){let t=e.debugGc?"#define __YO_DEBUG_GC 1":"// #define __YO_DEBUG_GC 1",n=e.debugParallelism?"#define __YO_DEBUG_PARALLELISM 1":"// #define __YO_DEBUG_PARALLELISM 1",r=e.debugAsyncAwait?"#define __YO_DEBUG_ASYNC_AWAIT 1":"// #define __YO_DEBUG_ASYNC_AWAIT 1";e.emitter.emitDeclarationLine(`// Non-atomic Reference Counting with Thread-Local Cycle Collection
10334
10334
  // Based on QuickJS trial deletion algorithm
10335
10335
  // See CYCLE_COLLECTION.md for design details
10336
10336
 
@@ -10558,7 +10558,7 @@ void __yo_arc_dispose_${r}(${r} arc) {
10558
10558
  }`),t.emitLine(`
10559
10559
  static void __yo_dispose_arc_${r}(void* ptr) {
10560
10560
  __yo_arc_dispose_${r}((${r})ptr);
10561
- }`),i.disposeGenerated=!0}}}function sC(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} : ${M(e)} (newtype - zero-cost abstraction)`),r.emitDeclarationLine("");return}if(e.isReferenceSemantics){r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${M(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=Ae(i.label);r.emitDeclarationLine(` ${o} ${a};`)}r.emitDeclarationLine("};")}else{r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${M(e)}`);for(let i of e.fields){let o=H(i.type,n),a=Ae(i.label);r.emitDeclarationLine(` ${o} ${a};`)}r.emitDeclarationLine("};")}r.emitDeclarationLine("")}function lC(e,t,n){let r=n.emitter;if(r.emitDeclarationLine(`typedef struct { // ${e.typeName} : ${M(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 uC(e,t,n){let r=n.emitter;r.emitDeclarationLine(`typedef union { // ${e.typeName} : ${M(e)}`);for(let i of e.fields){let o=H(i.type,n),a=Ae(i.label);r.emitDeclarationLine(` ${o} ${a};`)}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("")}function U_(e,t,n){let r=n.emitter,i=rr(e);if(i){let l=H(i,n);r.emitDeclarationLine(`typedef ${l} ${t}; // ${e.typeName} : ${M(e)} (optimized as nullable pointer)`),r.emitDeclarationLine("");return}if(ni(e)){r.emitDeclarationLine(`typedef enum { // ${e.typeName} : ${M(e)} (optimized as simple enum)`);for(let l=0;l<e.variants.length;l++){let u=e.variants[l];if(u){let c=er(e,u.name,n),_=l<e.variants.length-1?",":"",f=u.discriminant??BigInt(l);r.emitDeclarationLine(` ${c} = ${f}${_}`)}}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("");return}let a=`${t}_tag`;r.emitDeclarationLine("typedef enum {");for(let l=0;l<e.variants.length;l++){let u=e.variants[l];if(u){let c=er(e,u.name,n),_=l<e.variants.length-1?",":"",f=u.discriminant??BigInt(l);r.emitDeclarationLine(` ${c} = ${f}${_}`)}}r.emitDeclarationLine(`} ${a};`),r.emitDeclarationLine("");let s=`${t}_data`;r.emitDeclarationLine("typedef union {");for(let l of e.variants)if(l.fields&&l.fields.length>0){let u=l.fields.filter(c=>!We(c.type));if(u.length>0){let c=l.name;r.emitDeclarationLine(" struct {");for(let _ of u){let f=H(_.type,n),p=Ae(_.label);r.emitDeclarationLine(` ${f} ${p};`)}r.emitDeclarationLine(` } ${c};`)}}r.emitDeclarationLine(`} ${s};`),r.emitDeclarationLine(""),r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${M(e)}`),r.emitDeclarationLine(` ${a} tag;`),r.emitDeclarationLine(` ${s} data;`),r.emitDeclarationLine("};"),r.emitDeclarationLine("")}var G_=Z(()=>{Te();Sr();Ne();at();Wt();z_();z_()});function cC(e,t){let n=oi(t,"Dispose");if(!n)return;let r={...n,receiverType:e};if(e.trait)for(let o of e.trait.fields){if(!o.assignedValue||!vn(o.assignedValue))continue;let a=o.assignedValue,s=a.type;if(ce({type:r,env:t},{type:s,env:t}))return a}let i=Hu({concreteType:e,traitType:n,env:t});if(i)return i.traitValue}function _C(e,t,n){var s;let r=cC(e,t);if(!r)return;let i=r.type.fields.findIndex(l=>l.label===F.dispose[0]);if(i<0)return;let o=r.fields[i];if(!we(o))return;let a=(s=n.functions[o.funcId])==null?void 0:s.cName;if(a)return a;for(let l in n.functions){let u=n.functions[l],c=u.value,_=c.specializedType??c.type;if(c.funcName===F.dispose[0]&&_.SelfType&&ce({type:_.SelfType,env:t},{type:e,env:t}))return u.cName}}function dm(e){var t,n,r,i,o,a,s,l;e.emitter.emitLine("// Function implementations"),om(e.emitter,e.targetInfo),e.usesAsync&&sm(e.emitter,e.targetInfo,e.debugAsyncAwait,{needsCycleGC:e.needsCycleGC??!1,registerDisposeTypeId:u=>{e.disposeTypeIds||(e.disposeTypeIds=new Map,e.nextDisposeTypeId=1);let c=e.disposeTypeIds.get(u);return c===void 0&&(c=e.nextDisposeTypeId,e.nextDisposeTypeId=c+1,e.disposeTypeIds.set(u,c)),c}}),e.usesParallelism&&_m(e.emitter,e.debugParallelism,e.targetInfo,e.usesAsync??!1),pC(e),gC(e);for(let u in e.functions){let{value:c,cName:_}=e.functions[u],f=_==="__yo_user_main",p=(n=(t=c.body)==null?void 0:t.$)==null?void 0:n.effectAnalysis,d=p&&p.hasEffects;if(!f&&!c.type.isClosure&&((r=c.specializedFunctionCaches)==null?void 0:r.length)>0||!f&&!d&&!c.isModuleEffectMember&&!c.type.isClosure&&!c.specializedType&&(((i=c.specializedFunctionCaches)==null?void 0:i.length)??0)===0&&An(c.specializedType??c.type).length===0&&[...c.type.implicitParameters,...c.type.parameters.filter(A=>A.isImplicit)].some(A=>ne(A.type)))continue;let m=c.specializedType&&!ki(c.type),h=c.specializedType??c.type,v=An(h).length>0,T=c.type.parameters.some(A=>A.isCompileTimeOnly);if(!f&&(!c.isModuleEffectMember||T)&&!c.specializedType&&(((o=c.specializedFunctionCaches)==null?void 0:o.length)??0)===0&&(no(c.type)||Ro(c))||!f&&c.isIoAsyncStateMachineClosure||!f&&!d&&!v&&!c.isModuleEffectMember&&(no(c.type)&&!c.type.isClosure||((a=c.specializedFunctionCaches)==null?void 0:a.length)>0&&!c.type.isClosure||c.specializedType&&!m||Ro(c)||ro(c)||c.isIoAsyncStateMachineClosure))continue;let $=c.specializedType??c.type,b=!d&&!c.isModuleEffectMember&&($.parameters.some(A=>Ye(A.type))||$.forallParameters.length>0),w=Ye($.return.type),C=B($.return.type)&&$.return.type.requiredTraits.length>0;if(b||w&&!C&&!c.isModuleEffectMember)continue;let k=(l=(s=c.body)==null?void 0:s.$)==null?void 0:l.effectAnalysis;k&&k.hasEffects,vm(c,_,e)}B_(e)}function mm(e){var r,i,o,a;let t=e.emitter,n=[];if(!e.moduleLevelInitExprs||e.moduleLevelInitExprs.length===0)return n;for(let s of e.moduleLevelInitExprs){if(!S(s)||s.args.length<2)continue;let l=s.args[0],u=s.args[1],c;if(K(l)&&((r=l.$)!=null&&r.type))c=l;else if(S(l)&&E(l,":",2)){let d=l.args[0];K(d)&&((i=d.$)!=null&&i.type)&&(c=d)}if(!c||!((o=c.$)!=null&&o.type))continue;let _=((a=c.$)==null?void 0:a.variableName)??c.token.value,f=Qe(_,c.$.env),p=H(c.$.type,e);t.emitDeclarationLine(`static ${p} ${f}; // module-level mutable variable`),n.push({cVarName:f,cTypeStr:p,rhs:u})}return n}function ym(e,t){if(t.length===0)return;let n=e.emitter;n.emitLine(`
10561
+ }`),i.disposeGenerated=!0}}}function sC(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} : ${M(e)} (newtype - zero-cost abstraction)`),r.emitDeclarationLine("");return}if(e.isReferenceSemantics){r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${M(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=Le(i.label);r.emitDeclarationLine(` ${o} ${a};`)}r.emitDeclarationLine("};")}else{r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${M(e)}`);for(let i of e.fields){let o=H(i.type,n),a=Le(i.label);r.emitDeclarationLine(` ${o} ${a};`)}r.emitDeclarationLine("};")}r.emitDeclarationLine("")}function lC(e,t,n){let r=n.emitter;if(r.emitDeclarationLine(`typedef struct { // ${e.typeName} : ${M(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 uC(e,t,n){let r=n.emitter;r.emitDeclarationLine(`typedef union { // ${e.typeName} : ${M(e)}`);for(let i of e.fields){let o=H(i.type,n),a=Le(i.label);r.emitDeclarationLine(` ${o} ${a};`)}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("")}function U_(e,t,n){let r=n.emitter,i=rr(e);if(i){let l=H(i,n);r.emitDeclarationLine(`typedef ${l} ${t}; // ${e.typeName} : ${M(e)} (optimized as nullable pointer)`),r.emitDeclarationLine("");return}if(ni(e)){r.emitDeclarationLine(`typedef enum { // ${e.typeName} : ${M(e)} (optimized as simple enum)`);for(let l=0;l<e.variants.length;l++){let u=e.variants[l];if(u){let c=er(e,u.name,n),_=l<e.variants.length-1?",":"",f=u.discriminant??BigInt(l);r.emitDeclarationLine(` ${c} = ${f}${_}`)}}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("");return}let a=`${t}_tag`;r.emitDeclarationLine("typedef enum {");for(let l=0;l<e.variants.length;l++){let u=e.variants[l];if(u){let c=er(e,u.name,n),_=l<e.variants.length-1?",":"",f=u.discriminant??BigInt(l);r.emitDeclarationLine(` ${c} = ${f}${_}`)}}r.emitDeclarationLine(`} ${a};`),r.emitDeclarationLine("");let s=`${t}_data`;r.emitDeclarationLine("typedef union {");for(let l of e.variants)if(l.fields&&l.fields.length>0){let u=l.fields.filter(c=>!We(c.type));if(u.length>0){let c=l.name;r.emitDeclarationLine(" struct {");for(let _ of u){let f=H(_.type,n),p=Le(_.label);r.emitDeclarationLine(` ${f} ${p};`)}r.emitDeclarationLine(` } ${c};`)}}r.emitDeclarationLine(`} ${s};`),r.emitDeclarationLine(""),r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${M(e)}`),r.emitDeclarationLine(` ${a} tag;`),r.emitDeclarationLine(` ${s} data;`),r.emitDeclarationLine("};"),r.emitDeclarationLine("")}var G_=Z(()=>{Te();Sr();Ne();at();Wt();z_();z_()});function cC(e,t){let n=oi(t,"Dispose");if(!n)return;let r={...n,receiverType:e};if(e.trait)for(let o of e.trait.fields){if(!o.assignedValue||!vn(o.assignedValue))continue;let a=o.assignedValue,s=a.type;if(ce({type:r,env:t},{type:s,env:t}))return a}let i=Hu({concreteType:e,traitType:n,env:t});if(i)return i.traitValue}function _C(e,t,n){var s;let r=cC(e,t);if(!r)return;let i=r.type.fields.findIndex(l=>l.label===F.dispose[0]);if(i<0)return;let o=r.fields[i];if(!we(o))return;let a=(s=n.functions[o.funcId])==null?void 0:s.cName;if(a)return a;for(let l in n.functions){let u=n.functions[l],c=u.value,_=c.specializedType??c.type;if(c.funcName===F.dispose[0]&&_.SelfType&&ce({type:_.SelfType,env:t},{type:e,env:t}))return u.cName}}function dm(e){var t,n,r,i,o,a,s,l;e.emitter.emitLine("// Function implementations"),om(e.emitter,e.targetInfo),e.usesAsync&&sm(e.emitter,e.targetInfo,e.debugAsyncAwait,{needsCycleGC:e.needsCycleGC??!1,registerDisposeTypeId:u=>{e.disposeTypeIds||(e.disposeTypeIds=new Map,e.nextDisposeTypeId=1);let c=e.disposeTypeIds.get(u);return c===void 0&&(c=e.nextDisposeTypeId,e.nextDisposeTypeId=c+1,e.disposeTypeIds.set(u,c)),c}}),e.usesParallelism&&_m(e.emitter,e.debugParallelism,e.targetInfo,e.usesAsync??!1),pC(e),gC(e);for(let u in e.functions){let{value:c,cName:_}=e.functions[u],f=_==="__yo_user_main",p=(n=(t=c.body)==null?void 0:t.$)==null?void 0:n.effectAnalysis,d=p&&p.hasEffects;if(!f&&!c.type.isClosure&&((r=c.specializedFunctionCaches)==null?void 0:r.length)>0||!f&&!d&&!c.isModuleEffectMember&&!c.type.isClosure&&!c.specializedType&&(((i=c.specializedFunctionCaches)==null?void 0:i.length)??0)===0&&An(c.specializedType??c.type).length===0&&[...c.type.implicitParameters,...c.type.parameters.filter(A=>A.isImplicit)].some(A=>ne(A.type)))continue;let m=c.specializedType&&!ki(c.type),h=c.specializedType??c.type,v=An(h).length>0,T=c.type.parameters.some(A=>A.isCompileTimeOnly);if(!f&&(!c.isModuleEffectMember||T)&&!c.specializedType&&(((o=c.specializedFunctionCaches)==null?void 0:o.length)??0)===0&&(no(c.type)||Ro(c))||!f&&c.isIoAsyncStateMachineClosure||!f&&!d&&!v&&!c.isModuleEffectMember&&(no(c.type)&&!c.type.isClosure||((a=c.specializedFunctionCaches)==null?void 0:a.length)>0&&!c.type.isClosure||c.specializedType&&!m||Ro(c)||ro(c)||c.isIoAsyncStateMachineClosure))continue;let $=c.specializedType??c.type,b=!d&&!c.isModuleEffectMember&&($.parameters.some(A=>Ye(A.type))||$.forallParameters.length>0),w=Ye($.return.type),C=B($.return.type)&&$.return.type.requiredTraits.length>0;if(b||w&&!C&&!c.isModuleEffectMember)continue;let k=(l=(s=c.body)==null?void 0:s.$)==null?void 0:l.effectAnalysis;k&&k.hasEffects,vm(c,_,e)}B_(e)}function mm(e){var r,i,o,a;let t=e.emitter,n=[];if(!e.moduleLevelInitExprs||e.moduleLevelInitExprs.length===0)return n;for(let s of e.moduleLevelInitExprs){if(!S(s)||s.args.length<2)continue;let l=s.args[0],u=s.args[1],c;if(K(l)&&((r=l.$)!=null&&r.type))c=l;else if(S(l)&&E(l,":",2)){let d=l.args[0];K(d)&&((i=d.$)!=null&&i.type)&&(c=d)}if(!c||!((o=c.$)!=null&&o.type))continue;let _=((a=c.$)==null?void 0:a.variableName)??c.token.value,f=Qe(_,c.$.env),p=H(c.$.type,e);t.emitDeclarationLine(`static ${p} ${f}; // module-level mutable variable`),n.push({cVarName:f,cTypeStr:p,rhs:u})}return n}function ym(e,t){if(t.length===0)return;let n=e.emitter;n.emitLine(`
10562
10562
  // Library initialization - call before using library functions
10563
10563
  void __yo_module_init(void) {`),n.emitLine(" // Initialize module-level mutable variables");for(let{cVarName:r,rhs:i}of t){let o=G(i," ",e);n.emitLine(` ${r} = ${o};`)}n.emitLine(`}
10564
10564
  `)}function gm(e){var a,s,l,u;let t=e.emitter,n=!1,r=null;for(let c in e.functions){let{cName:_,value:f}=e.functions[c];if(_==="__yo_user_main"){n=!0,r=f;break}}if(!n||!r)return;let i=r.type.return.type;if(!We(i))throw new Error(`main function must return unit , but it returns ${M(i)}. Use 'main :: (fn() -> unit)' instead. For exit codes, use 'exit(code)' from std/libc/stdlib.yo`);{let _=An(r.type).map(()=>"NULL").join(", "),f=_?`(${_})`:"()",p=e.usesAsync?`
@@ -10577,7 +10577,7 @@ int main(int argc, char** argv) {
10577
10577
  ${d}
10578
10578
  return 0;
10579
10579
  }
10580
- `)}}function hm(e){var t,n;for(let r in e.functions){let{value:i}=e.functions[r];if(Ro(i))continue;let o=(n=(t=i.body)==null?void 0:t.$)==null?void 0:n.effectAnalysis;if(!o||!o.hasEffects)continue;if(i.specializedType){let l=i.specializedType,u=l.forallParameters.length>0||l.parameters.some(p=>p.isCompileTimeOnly),c=l.parameters.some(p=>!p.isCompileTimeOnly&&B(p.type)&&!ft(p.type));if(u||c)continue;let _=i.specializedType.parameters.some(p=>Ye(p.type)),f=Ye(i.specializedType.return.type);if(_||f)continue}let a=An(i.specializedType??i.type);if(a.length===0&&i.specializedType){let l=An(i.type);l.some(u=>u.fieldFunctionType.forallParameters&&u.fieldFunctionType.forallParameters.length>0)&&(a=l)}a.length>0}}function vm(e,t,n){var C,k,A,N,x,V,I;let r=n.emitter,i=t,o=e.specializedType??e.type,a;if(e.body&&ft(o.return.type)){let D=dl(e.body);(C=D==null?void 0:D.$)!=null&&C.asyncStateMachineStructName?a=`${D.$.asyncStateMachineStructName}*`:(k=e.body.$)!=null&&k.type&&B(e.body.$.type)&&ft(e.body.$.type)&&(a=H(e.body.$.type,n))}e.body&&B(o.return.type)&&!ft(o.return.type)&&!e.specializedType&&!e.isModuleEffectMember&&(A=e.body.$)!=null&&A.type&&(a=H(e.body.$.type,n));let s=e.specializedType&&An(o).length===0&&An(e.type).some(D=>D.fieldFunctionType.forallParameters&&D.fieldFunctionType.forallParameters.length>0)?e.type:void 0,l=a?oo(o,t,n,a,s):oo(o,t,n,void 0,s),u=t==="__yo_user_main"||((N=n.exportedFunctionLabels)==null?void 0:N.has(e.funcId)),c=!u&&(t.includes("___drop")||t.includes("___dup")||t.includes("___dispose")),_=u?"":c?"static inline __attribute__((always_inline)) ":"static inline ";r.emitLine(`${_}${l} {`);let f=n.currentFunctionName,p=n.currentFunctionType;n.currentFunctionName=i,n.currentFunctionType=o;let d=n.isModuleEffectMemberFunction,g=n.overrideReturnTypeStr;e.isModuleEffectMember&&(n.isModuleEffectMemberFunction=!0),n.overrideReturnTypeStr=a;let m=n.currentEvidenceParams,h=An(o);if(h.length===0&&e.specializedType){let D=An(e.type);D.some(P=>P.fieldFunctionType.forallParameters&&P.fieldFunctionType.forallParameters.length>0)&&(h=D)}if(h.length>0){let D=new Map;for(let P of h)D.set(`${P.implicitLabel}.${P.fieldLabel}`,P);n.currentEvidenceParams=D}let v=n.currentClosureCaptures,T=n.currentClosureCaptureFrameLevel,$=n.currentClosureType,b=n.currentClosureCaptureTypeCName;if(o.isClosure){let D=e.closureInfo;if(D){let P=D.closureType.isFn,O=D.captureType;if(n.currentClosureType=P.callType,O&&Ue(O)&&O.fields.length>0){let J=O.fields.map(W=>W.label);n.currentClosureCaptures=J,n.currentClosureCaptureFrameLevel=e.frameLevel;let U=(x=n.types[O.id])==null?void 0:x.cName;U&&(n.currentClosureCaptureTypeCName=U)}}}if(e.funcName===F.___dispose[0]&&o.SelfType){let D=_C(o.SelfType,e.type.env,n);if(D){let P=((V=o.parameters[0])==null?void 0:V.label)==="__yo_self"?"__yo_self":((I=o.parameters[0])==null?void 0:I.label)??"__yo_self";r.emitLine(` ${D}(${P}); // Call user's dispose method`)}}fC(e.body,o," ",n),n.currentFunctionName=f,n.currentFunctionType=p,n.isModuleEffectMemberFunction=d,n.overrideReturnTypeStr=g,n.currentEvidenceParams=m,n.currentClosureCaptures=v,n.currentClosureCaptureFrameLevel=T,n.currentClosureType=$,n.currentClosureCaptureTypeCName=b,r.emitLine("}")}function fC(e,t,n,r){var o,a,s,l,u,c,_,f,p,d,g,m;let i=r.emitter;if(S(e)&&E(e,R.begin)){let h=e.args;r.pendingDeferredDrops=[...((o=e.$)==null?void 0:o.deferredDropExpressions)??[]],r.consumedVarPendingDrops=[...((a=e.$)==null?void 0:a.consumedVariableDropExpressions)??[]];let v=!1;for(let T=0;T<h.length-1;T++){let $=h[T];E($,R.return)&&(v=!0);let b=G($,n,r);if(b&&(!$.$||!tn($.$.env.modulePath,b))&&i.emitLine(`${n}${b};`),v)break;if(Zt((s=$.$)==null?void 0:s.controlFlow)){v=!0;break}}if(!v&&h.length>0){let T=h[h.length-1];if(ft(t.return.type)&&T){let b=Xn(T),w=(l=T.$)==null?void 0:l.type,C=w&&ft(w);if(b||C){let k=G(T,n,r);if((u=e.$)!=null&&u.deferredDropExpressions&&e.$.deferredDropExpressions.length>0&&w){let A=H(w,r),N=`_yo_async_return_${Math.random().toString(36).substr(2,9)}`;i.emitLine(`${n}${A} ${N} = ${k};`),Ln(e,n,r),i.emitLine(`${n}return ${N};`)}else i.emitLine(`${n}return ${k};`);return}}else if(T&&We(t.return.type)){let b=G(T,n,r);b&&i.emitLine(`${n}${b};`),Ln(e,n,r)}else if(T){let b=Zt((c=T.$)==null?void 0:c.controlFlow),w=We((_=T.$)==null?void 0:_.type)||S(T)&&E(T,R.tuple)&&T.args.length===0,C=h.length>1?h[h.length-2]:null,k=Zt((f=C==null?void 0:C.$)==null?void 0:f.controlFlow);if(!(w&&k))if(b){let A=G(T,n,r);A&&i.emitLine(`${n}${A};`)}else{if((p=T.$)!=null&&p.deferredDupExpressions&&T.$.deferredDupExpressions.length>0){if((d=T.$)!=null&&d.variableName){let x=H(t.return.type,r),V=Qe(T.$.variableName,T.$.env),I=G(T,n,r);V!==I&&i.emitLine(`${n}${x} ${V} = ${I};`)}Jt(T,n,r);let N=T.$.deferredDupExpressions[0];if(S(N)&&((g=N.$)!=null&&g.variableName)){let x=Ae(N.$.variableName);Ln(e,n,r),i.emitLine(`${n}return ${x};`);return}}let A=G(T,n,r);Ln(e,n,r),A&&i.emitLine(`${n}return ${A};`)}}}else if(v&&h.length>0){let T=h[h.length-1];T&&We((m=T.$)==null?void 0:m.type)}}else if(Ln(e,n,r),We(t.return.type)){let h=G(e,n,r);h&&i.emitLine(`${n}${h};`)}else cm(e,n,r)}function Tm(e){var t,n;for(let r in e.functions){let{value:i,cName:o}=e.functions[r];if(Ro(i)||!i.specializedType||!ki(i.type))continue;let a=i.specializedType,s=a.forallParameters.length>0||a.parameters.some(p=>p.isCompileTimeOnly),l=a.parameters.some(p=>!p.isCompileTimeOnly&&B(p.type)&&!ft(p.type));if(s||l)continue;let u=i.specializedType.parameters.some(p=>Ye(p.type)),c=Ye(i.specializedType.return.type);if(u||c)continue;let _=(n=(t=i.body)==null?void 0:t.$)==null?void 0:n.effectAnalysis;_&&_.hasEffects||i.isModuleEffectMember||An(i.specializedType??i.type).length>0||vm(i,o,e)}}function pC(e){e.needsCycleGC?mC(e):dC(e)}function dC(e){let t=e.emitter;t.emitDeclarationLine("static void __yo_dispose_dispatch(void* ptr); // Type-tag based dispose dispatch"),t.emitLine(`// Lightweight reference counting \u2014 no cycle detection needed
10580
+ `)}}function hm(e){var t,n;for(let r in e.functions){let{value:i}=e.functions[r];if(Ro(i))continue;let o=(n=(t=i.body)==null?void 0:t.$)==null?void 0:n.effectAnalysis;if(!o||!o.hasEffects)continue;if(i.specializedType){let l=i.specializedType,u=l.forallParameters.length>0||l.parameters.some(p=>p.isCompileTimeOnly),c=l.parameters.some(p=>!p.isCompileTimeOnly&&B(p.type)&&!ft(p.type));if(u||c)continue;let _=i.specializedType.parameters.some(p=>Ye(p.type)),f=Ye(i.specializedType.return.type);if(_||f)continue}let a=An(i.specializedType??i.type);if(a.length===0&&i.specializedType){let l=An(i.type);l.some(u=>u.fieldFunctionType.forallParameters&&u.fieldFunctionType.forallParameters.length>0)&&(a=l)}a.length>0}}function vm(e,t,n){var C,k,A,N,x,V,I;let r=n.emitter,i=t,o=e.specializedType??e.type,a;if(e.body&&ft(o.return.type)){let D=dl(e.body);(C=D==null?void 0:D.$)!=null&&C.asyncStateMachineStructName?a=`${D.$.asyncStateMachineStructName}*`:(k=e.body.$)!=null&&k.type&&B(e.body.$.type)&&ft(e.body.$.type)&&(a=H(e.body.$.type,n))}e.body&&B(o.return.type)&&!ft(o.return.type)&&!e.specializedType&&!e.isModuleEffectMember&&(A=e.body.$)!=null&&A.type&&(a=H(e.body.$.type,n));let s=e.specializedType&&An(o).length===0&&An(e.type).some(D=>D.fieldFunctionType.forallParameters&&D.fieldFunctionType.forallParameters.length>0)?e.type:void 0,l=a?oo(o,t,n,a,s):oo(o,t,n,void 0,s),u=t==="__yo_user_main"||((N=n.exportedFunctionLabels)==null?void 0:N.has(e.funcId)),c=!u&&(t.includes("___drop")||t.includes("___dup")||t.includes("___dispose")),_=u?"":c?"static inline __attribute__((always_inline)) ":"static inline ";r.emitLine(`${_}${l} {`);let f=n.currentFunctionName,p=n.currentFunctionType;n.currentFunctionName=i,n.currentFunctionType=o;let d=n.isModuleEffectMemberFunction,g=n.overrideReturnTypeStr;e.isModuleEffectMember&&(n.isModuleEffectMemberFunction=!0),n.overrideReturnTypeStr=a;let m=n.currentEvidenceParams,h=An(o);if(h.length===0&&e.specializedType){let D=An(e.type);D.some(P=>P.fieldFunctionType.forallParameters&&P.fieldFunctionType.forallParameters.length>0)&&(h=D)}if(h.length>0){let D=new Map;for(let P of h)D.set(`${P.implicitLabel}.${P.fieldLabel}`,P);n.currentEvidenceParams=D}let v=n.currentClosureCaptures,T=n.currentClosureCaptureFrameLevel,$=n.currentClosureType,b=n.currentClosureCaptureTypeCName;if(o.isClosure){let D=e.closureInfo;if(D){let P=D.closureType.isFn,O=D.captureType;if(n.currentClosureType=P.callType,O&&Ue(O)&&O.fields.length>0){let J=O.fields.map(W=>W.label);n.currentClosureCaptures=J,n.currentClosureCaptureFrameLevel=e.frameLevel;let U=(x=n.types[O.id])==null?void 0:x.cName;U&&(n.currentClosureCaptureTypeCName=U)}}}if(e.funcName===F.___dispose[0]&&o.SelfType){let D=_C(o.SelfType,e.type.env,n);if(D){let P=((V=o.parameters[0])==null?void 0:V.label)==="__yo_self"?"__yo_self":((I=o.parameters[0])==null?void 0:I.label)??"__yo_self";r.emitLine(` ${D}(${P}); // Call user's dispose method`)}}fC(e.body,o," ",n),n.currentFunctionName=f,n.currentFunctionType=p,n.isModuleEffectMemberFunction=d,n.overrideReturnTypeStr=g,n.currentEvidenceParams=m,n.currentClosureCaptures=v,n.currentClosureCaptureFrameLevel=T,n.currentClosureType=$,n.currentClosureCaptureTypeCName=b,r.emitLine("}")}function fC(e,t,n,r){var o,a,s,l,u,c,_,f,p,d,g,m;let i=r.emitter;if(S(e)&&E(e,R.begin)){let h=e.args;r.pendingDeferredDrops=[...((o=e.$)==null?void 0:o.deferredDropExpressions)??[]],r.consumedVarPendingDrops=[...((a=e.$)==null?void 0:a.consumedVariableDropExpressions)??[]];let v=!1;for(let T=0;T<h.length-1;T++){let $=h[T];E($,R.return)&&(v=!0);let b=G($,n,r);if(b&&(!$.$||!tn($.$.env.modulePath,b))&&i.emitLine(`${n}${b};`),v)break;if(Zt((s=$.$)==null?void 0:s.controlFlow)){v=!0;break}}if(!v&&h.length>0){let T=h[h.length-1];if(ft(t.return.type)&&T){let b=Xn(T),w=(l=T.$)==null?void 0:l.type,C=w&&ft(w);if(b||C){let k=G(T,n,r);if((u=e.$)!=null&&u.deferredDropExpressions&&e.$.deferredDropExpressions.length>0&&w){let A=H(w,r),N=`_yo_async_return_${Math.random().toString(36).substr(2,9)}`;i.emitLine(`${n}${A} ${N} = ${k};`),Ln(e,n,r),i.emitLine(`${n}return ${N};`)}else i.emitLine(`${n}return ${k};`);return}}else if(T&&We(t.return.type)){let b=G(T,n,r);b&&i.emitLine(`${n}${b};`),Ln(e,n,r)}else if(T){let b=Zt((c=T.$)==null?void 0:c.controlFlow),w=We((_=T.$)==null?void 0:_.type)||S(T)&&E(T,R.tuple)&&T.args.length===0,C=h.length>1?h[h.length-2]:null,k=Zt((f=C==null?void 0:C.$)==null?void 0:f.controlFlow);if(!(w&&k))if(b){let A=G(T,n,r);A&&i.emitLine(`${n}${A};`)}else{if((p=T.$)!=null&&p.deferredDupExpressions&&T.$.deferredDupExpressions.length>0){if((d=T.$)!=null&&d.variableName){let x=H(t.return.type,r),V=Qe(T.$.variableName,T.$.env),I=G(T,n,r);V!==I&&i.emitLine(`${n}${x} ${V} = ${I};`)}Jt(T,n,r);let N=T.$.deferredDupExpressions[0];if(S(N)&&((g=N.$)!=null&&g.variableName)){let x=Le(N.$.variableName);Ln(e,n,r),i.emitLine(`${n}return ${x};`);return}}let A=G(T,n,r);Ln(e,n,r),A&&i.emitLine(`${n}return ${A};`)}}}else if(v&&h.length>0){let T=h[h.length-1];T&&We((m=T.$)==null?void 0:m.type)}}else if(Ln(e,n,r),We(t.return.type)){let h=G(e,n,r);h&&i.emitLine(`${n}${h};`)}else cm(e,n,r)}function Tm(e){var t,n;for(let r in e.functions){let{value:i,cName:o}=e.functions[r];if(Ro(i)||!i.specializedType||!ki(i.type))continue;let a=i.specializedType,s=a.forallParameters.length>0||a.parameters.some(p=>p.isCompileTimeOnly),l=a.parameters.some(p=>!p.isCompileTimeOnly&&B(p.type)&&!ft(p.type));if(s||l)continue;let u=i.specializedType.parameters.some(p=>Ye(p.type)),c=Ye(i.specializedType.return.type);if(u||c)continue;let _=(n=(t=i.body)==null?void 0:t.$)==null?void 0:n.effectAnalysis;_&&_.hasEffects||i.isModuleEffectMember||An(i.specializedType??i.type).length>0||vm(i,o,e)}}function pC(e){e.needsCycleGC?mC(e):dC(e)}function dC(e){let t=e.emitter;t.emitDeclarationLine("static void __yo_dispose_dispatch(void* ptr); // Type-tag based dispose dispatch"),t.emitLine(`// Lightweight reference counting \u2014 no cycle detection needed
10581
10581
  // Uses type_id dispatch instead of function pointer for dispose
10582
10582
  // (WASM: br_table ~2 cycles vs call_indirect ~20+ cycles)
10583
10583
  static inline void __yo_decr_rc(void* ptr) {
@@ -11059,7 +11059,7 @@ static void __yo_init_process_cleanup(void) {
11059
11059
  if (cleanup_initialized) return;
11060
11060
  cleanup_initialized = true;
11061
11061
  atexit(__yo_process_cleanup);
11062
- }`}`)}function yC(e){let t=e.emitter;for(let n in e.types){let{type:r,cName:i}=e.types[n];if(Ue(r)&&r.isReferenceSemantics){if(r.fields.some(s=>Ye(s.type)))continue;let a=`__yo_traverse_${i}`;t.emitLine(`static void ${a}(void* ptr, void (*visit)(void*)) {`),t.emitLine(` ${i}* obj = (${i}*)ptr;`);for(let s of r.fields){let l=Ae(s.label),u=s.type;if(Ue(u)&&u.isReferenceSemantics)t.emitLine(` if (obj->${l}) {`),t.emitLine(` visit(obj->${l});`),t.emitLine(" }");else if(Ze(u)){let c=u;if(!rr(c)){if(!ni(c)){t.emitLine(` switch (obj->${l}.tag) {`);for(let f of c.variants||[])if(f.fields&&f.fields.length>0){let p=f.fields.filter(d=>Ue(d.type)&&d.type.isReferenceSemantics);if(p.length>0){let d=er(c,f.name,e);t.emitLine(` case ${d}:`);for(let g of p)t.emitLine(` if (obj->${l}.data.${f.name}.${Ae(g.label)}) {`),t.emitLine(` visit(obj->${l}.data.${f.name}.${Ae(g.label)});`),t.emitLine(" }");t.emitLine(" break;")}}t.emitLine(" }")}}}}t.emitLine("}"),t.emitLine("")}}}function gC(e){var n;let t=e.emitter;e.needsCycleGC&&yC(e);for(let r in e.types){let{type:i,cName:o}=e.types[r];if(Ue(i)&&i.isReferenceSemantics){if(i.fields.some(c=>Ye(c.type)))continue;let s=`__yo_new_${o}`,l=i.fields.map(c=>{let _=H(c.type,e),f=Ae(c.label);return`${_} ${f}`}).join(", ");t.emitLine(`static ${o}* ${s}(${l}) {`),t.emitLine(` ${o}* obj = (${o}*)__yo_malloc(sizeof(${o}));`),t.emitLine(" obj->header.ref_count = 1; // Start with one reference"),e.needsCycleGC&&(t.emitLine(" obj->header.gc_flags = 0;"),t.emitLine(" obj->header.gc_mark = __YO_GC_UNMARKED;"),t.emitLine(" obj->header.gc_next = NULL;"),t.emitLine(" obj->header.gc_prev = NULL;"));let u=i.trait.fields.find(c=>c.label===F.___dispose[0]&&c.assignedValue&&we(c.assignedValue));if(u&&we(u.assignedValue)){let c=u.assignedValue,_=((n=e.functions[c.funcId])==null?void 0:n.cName)||c.funcId;if(e.needsCycleGC)t.emitLine(` obj->header.dispose_fn = (void(*)(void*))${_};`);else{e.disposeTypeIds||(e.disposeTypeIds=new Map,e.nextDisposeTypeId=1);let f=e.disposeTypeIds.get(_);f===void 0&&(f=e.nextDisposeTypeId,e.nextDisposeTypeId=f+1,e.disposeTypeIds.set(_,f)),t.emitLine(` obj->header.type_id = ${f};`)}}else e.needsCycleGC?t.emitLine(" obj->header.dispose_fn = NULL;"):t.emitLine(" obj->header.type_id = 0;");if(e.needsCycleGC){let c=`__yo_traverse_${o}`;t.emitLine(` obj->header.traverse_fn = ${c};`)}i.fields.forEach(c=>{let _=Ae(c.label);t.emitLine(` obj->${_} = ${_};`)}),e.needsCycleGC&&Ii(i,new Set,i.env)&&t.emitLine(" __yo_gc_register(obj);"),t.emitLine(" return obj;"),t.emitLine("}"),t.emitLine("")}}}function Em(e){var n;let t=e.emitter;if(!(!e.closureCaptureMap||e.closureCaptureMap.size===0)){t.emitLine("// Closure dispose functions - one per closure instance (closure type + capture type)"),t.emitLine("");for(let[r]of e.closureCaptureMap){let i=`__yo_dispose_closure_${r}`;t.emitDeclarationLine(`static void ${i}(void* closure_ptr);`)}for(let[r,{closureCName:i,captureType:o,captureCName:a}]of e.closureCaptureMap){let s=`__yo_dispose_closure_${r}`,l=o.trait.fields.find(_=>_.label===F.___drop[0]);if(!l||!l.assignedValue||!we(l.assignedValue))continue;let u=l.assignedValue,c=(n=e.functions[u.funcId])==null?void 0:n.cName;c&&(t.emitLine(`static void ${s}(void* closure_ptr) { // Dispose for ${i} with ${a} (Impl closure - value type)`),t.emitLine(" if (closure_ptr) {"),t.emitLine(` ${i}* closure = (${i}*)closure_ptr;`),t.emitLine(" if (closure->data) {"),t.emitLine(` ${c}(*(${a}*)closure->data); // Drop the capture struct (dereference pointer to pass by value)`),t.emitLine(" // Note: capture data is stack-allocated for Impl closures, no __yo_free needed"),t.emitLine(" }"),t.emitLine(" }"),t.emitLine("}"),t.emitLine(""))}}}var $m=Z(()=>{fi();qt();to();Te();rn();bi();Ne();at();Sr();Cn();Fe();lm();M_();kr();yn();Tl();fm();G_();Wt();Ea()});function bm(e){var n;let t=new Map;for(let[,r]of e.dynImpls){let i=((n=e.types[r.dynType.id])==null?void 0:n.cName)||`__yo_dyn_${r.dynType.id}`,o=B(r.concreteType)&&r.concreteType.resolvedConcreteType?r.concreteType.resolvedConcreteType:r.concreteType,s=`${(()=>{var _,f;let l=(_=e.types[o.id])==null?void 0:_.cName;if(l)return l;let u=pr(o);return(u?(f=e.types[u.id])==null?void 0:f.cName:void 0)||`unknown_${o.id}`})()}_${i}`;t.set(s,r)}e.dynImpls=t}var Cm=Z(()=>{qt();Ne()});var nc,km=Z(()=>{qc();Sr();Cn();lp();Ne();at();A_();I_();Ea();jd();$m();S_();G_();Cm();nc=class{constructor(){this.exportedFunctionNames=new Set;this._needsIntelAsmSyntax=!1;this._usesParallelism=!1;this.emitter=new Na}compileModule(t,n,r={}){this.emitter.emitDeclarationLine(`
11062
+ }`}`)}function yC(e){let t=e.emitter;for(let n in e.types){let{type:r,cName:i}=e.types[n];if(Ue(r)&&r.isReferenceSemantics){if(r.fields.some(s=>Ye(s.type)))continue;let a=`__yo_traverse_${i}`;t.emitLine(`static void ${a}(void* ptr, void (*visit)(void*)) {`),t.emitLine(` ${i}* obj = (${i}*)ptr;`);for(let s of r.fields){let l=Le(s.label),u=s.type;if(Ue(u)&&u.isReferenceSemantics)t.emitLine(` if (obj->${l}) {`),t.emitLine(` visit(obj->${l});`),t.emitLine(" }");else if(Ze(u)){let c=u;if(!rr(c)){if(!ni(c)){t.emitLine(` switch (obj->${l}.tag) {`);for(let f of c.variants||[])if(f.fields&&f.fields.length>0){let p=f.fields.filter(d=>Ue(d.type)&&d.type.isReferenceSemantics);if(p.length>0){let d=er(c,f.name,e);t.emitLine(` case ${d}:`);for(let g of p)t.emitLine(` if (obj->${l}.data.${f.name}.${Le(g.label)}) {`),t.emitLine(` visit(obj->${l}.data.${f.name}.${Le(g.label)});`),t.emitLine(" }");t.emitLine(" break;")}}t.emitLine(" }")}}}}t.emitLine("}"),t.emitLine("")}}}function gC(e){var n;let t=e.emitter;e.needsCycleGC&&yC(e);for(let r in e.types){let{type:i,cName:o}=e.types[r];if(Ue(i)&&i.isReferenceSemantics){if(i.fields.some(c=>Ye(c.type)))continue;let s=`__yo_new_${o}`,l=i.fields.map(c=>{let _=H(c.type,e),f=Le(c.label);return`${_} ${f}`}).join(", ");t.emitLine(`static ${o}* ${s}(${l}) {`),t.emitLine(` ${o}* obj = (${o}*)__yo_malloc(sizeof(${o}));`),t.emitLine(" obj->header.ref_count = 1; // Start with one reference"),e.needsCycleGC&&(t.emitLine(" obj->header.gc_flags = 0;"),t.emitLine(" obj->header.gc_mark = __YO_GC_UNMARKED;"),t.emitLine(" obj->header.gc_next = NULL;"),t.emitLine(" obj->header.gc_prev = NULL;"));let u=i.trait.fields.find(c=>c.label===F.___dispose[0]&&c.assignedValue&&we(c.assignedValue));if(u&&we(u.assignedValue)){let c=u.assignedValue,_=((n=e.functions[c.funcId])==null?void 0:n.cName)||c.funcId;if(e.needsCycleGC)t.emitLine(` obj->header.dispose_fn = (void(*)(void*))${_};`);else{e.disposeTypeIds||(e.disposeTypeIds=new Map,e.nextDisposeTypeId=1);let f=e.disposeTypeIds.get(_);f===void 0&&(f=e.nextDisposeTypeId,e.nextDisposeTypeId=f+1,e.disposeTypeIds.set(_,f)),t.emitLine(` obj->header.type_id = ${f};`)}}else e.needsCycleGC?t.emitLine(" obj->header.dispose_fn = NULL;"):t.emitLine(" obj->header.type_id = 0;");if(e.needsCycleGC){let c=`__yo_traverse_${o}`;t.emitLine(` obj->header.traverse_fn = ${c};`)}i.fields.forEach(c=>{let _=Le(c.label);t.emitLine(` obj->${_} = ${_};`)}),e.needsCycleGC&&Ii(i,new Set,i.env)&&t.emitLine(" __yo_gc_register(obj);"),t.emitLine(" return obj;"),t.emitLine("}"),t.emitLine("")}}}function Em(e){var n;let t=e.emitter;if(!(!e.closureCaptureMap||e.closureCaptureMap.size===0)){t.emitLine("// Closure dispose functions - one per closure instance (closure type + capture type)"),t.emitLine("");for(let[r]of e.closureCaptureMap){let i=`__yo_dispose_closure_${r}`;t.emitDeclarationLine(`static void ${i}(void* closure_ptr);`)}for(let[r,{closureCName:i,captureType:o,captureCName:a}]of e.closureCaptureMap){let s=`__yo_dispose_closure_${r}`,l=o.trait.fields.find(_=>_.label===F.___drop[0]);if(!l||!l.assignedValue||!we(l.assignedValue))continue;let u=l.assignedValue,c=(n=e.functions[u.funcId])==null?void 0:n.cName;c&&(t.emitLine(`static void ${s}(void* closure_ptr) { // Dispose for ${i} with ${a} (Impl closure - value type)`),t.emitLine(" if (closure_ptr) {"),t.emitLine(` ${i}* closure = (${i}*)closure_ptr;`),t.emitLine(" if (closure->data) {"),t.emitLine(` ${c}(*(${a}*)closure->data); // Drop the capture struct (dereference pointer to pass by value)`),t.emitLine(" // Note: capture data is stack-allocated for Impl closures, no __yo_free needed"),t.emitLine(" }"),t.emitLine(" }"),t.emitLine("}"),t.emitLine(""))}}}var $m=Z(()=>{fi();qt();to();Te();rn();bi();Ne();at();Sr();Cn();Fe();lm();M_();kr();yn();Tl();fm();G_();Wt();Ea()});function bm(e){var n;let t=new Map;for(let[,r]of e.dynImpls){let i=((n=e.types[r.dynType.id])==null?void 0:n.cName)||`__yo_dyn_${r.dynType.id}`,o=B(r.concreteType)&&r.concreteType.resolvedConcreteType?r.concreteType.resolvedConcreteType:r.concreteType,s=`${(()=>{var _,f;let l=(_=e.types[o.id])==null?void 0:_.cName;if(l)return l;let u=pr(o);return(u?(f=e.types[u.id])==null?void 0:f.cName:void 0)||`unknown_${o.id}`})()}_${i}`;t.set(s,r)}e.dynImpls=t}var Cm=Z(()=>{qt();Ne()});var nc,km=Z(()=>{qc();Sr();Cn();lp();Ne();at();A_();I_();Ea();jd();$m();S_();G_();Cm();nc=class{constructor(){this.exportedFunctionNames=new Set;this._needsIntelAsmSyntax=!1;this._usesParallelism=!1;this.emitter=new Na}compileModule(t,n,r={}){this.emitter.emitDeclarationLine(`
11063
11063
  // Module ${t}`),this.emitter.emitDeclarationLine(`// Module ID: ${xa(t)}`);let i={functions:{},externFunctions:{},types:{},arrayStructTypes:new Map,sliceStructTypes:new Map([["Slice_uint8_t_u42_",{childType:"uint8_t*"}]]),spawnedFunctionSignatures:new Map,spawnedClosureSignatures:new Map,closureCaptureMap:new Map,implClosureCallMap:new Map,dynImpls:new Map,currentFunctionName:"",emitter:this.emitter,cIncludes:new Set(["<stdbool.h>","<stdint.h>","<stddef.h>","<stdarg.h>","<stdatomic.h>","<stdlib.h>","<stdio.h>","<string.h>","<errno.h>","<fcntl.h>"]),debugGc:r.debugGc??!1,debugParallelism:r.debugParallelism??!1,debugAsyncAwait:r.debugAsyncAwait??!1,targetInfo:Ds(),deferredAsyncBlocks:[],allocator:r.allocator??"libc",isLibrary:r.isLibrary??!1,currentModuleId:xa(t),moduleLevelInitExprs:r.allModuleLevelInitExprs??n.moduleLevelInitExprs};if(vl(n,i),i.moduleLevelInitExprs)for(let a of i.moduleLevelInitExprs)qn(a,i);if(Ud(n,i),r.isLibrary&&i.exportedFunctionLabels)for(let[a]of i.exportedFunctionLabels){let s=i.functions[a];s&&this.exportedFunctionNames.add(s.cName)}Gd(i),ap(i),sp(i),this.emitter.emitDeclarationLine(`
11064
11064
  // Future state enum - shared by all Future types
11065
11065
  typedef enum {
@@ -11080,16 +11080,16 @@ static void __yo_dispose_dispatch(void* ptr) {
11080
11080
  }
11081
11081
  }`)}else i.needsCycleGC||this.emitter.emitLine("static void __yo_dispose_dispatch(void* ptr) { (void)ptr; }");i.needsIntelAsmSyntax&&(this._needsIntelAsmSyntax=!0),i.usesParallelism&&(this._usesParallelism=!0)}print(){return this.emitter.print()}getExportedFunctionNames(){return this.exportedFunctionNames}get needsIntelAsmSyntax(){return this._needsIntelAsmSyntax}get usesParallelism(){return this._usesParallelism}}});function rc(e){var t,n;if((t=e.$)!=null&&t.variableName)return!0;if(((n=e.$)==null?void 0:n.value)!==void 0)return!1;if(S(e)){for(let r of e.args)if(rc(r))return!0;if(e.func&&rc(e.func))return!0}return!1}function El(e,t){var n;if(S(e)){(n=e.$)!=null&&n.variableName&&t.add(e.$.variableName);let r=e.func,i=r.tag==="Atom"&&(r.token.value==="&&"||r.token.value==="||");if(i)e.args.length>0&&El(e.args[0],t);else for(let o of e.args)El(o,t);e.func&&!i&&El(e.func,t)}}function Fm(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=qr(o);if(a&&e.has(a)){let s=G(o,t,n);s&&n.emitter.emitLine(`${t}${s};`),r.shortCircuitHandledDropVarNames.add(a)}}}}function Lm(e,t,n){var l;if(e.args.length===0)return"true";if(e.args.length===1)return G(e.args[0],t,n);let r=[];for(let u of e.args){let c=(l=u.$)==null?void 0:l.value;if(It(c)){if(c.value===!1)return"false";continue}r.push(u)}if(r.length===0)return"true";if(r.length===1)return G(r[0],t,n);if(!r.slice(1).some(u=>rc(u)))return`(${r.map(c=>G(c,t,n)).join(" && ")})`;let o=`__yo_sc_${wm++}`;n.emitter.emitLine(`${t}bool ${o} = false;`);let a=t,s=r.length-1;for(let u=0;u<r.length;u++){let c=G(r[u],a,n);u<r.length-1?(n.emitter.emitLine(`${a}if (${c}) {`),a+=" "):n.emitter.emitLine(`${a}${o} = ${c};`)}for(let u=s-1;u>=0;u--){let c=r[u+1],_=new Set;El(c,_),Fm(_,a,n),a=a.slice(2),n.emitter.emitLine(`${a}}`)}return o}function Am(e,t,n){var l;if(e.args.length===0)return"false";if(e.args.length===1)return G(e.args[0],t,n);let r=[];for(let u of e.args){let c=(l=u.$)==null?void 0:l.value;if(It(c)){if(c.value===!0)return"true";continue}r.push(u)}if(r.length===0)return"false";if(r.length===1)return G(r[0],t,n);if(!r.slice(1).some(u=>rc(u)))return`(${r.map(c=>G(c,t,n)).join(" || ")})`;let o=`__yo_sc_${wm++}`;n.emitter.emitLine(`${t}bool ${o} = true;`);let a=t,s=r.length-1;for(let u=0;u<r.length;u++){let c=G(r[u],a,n);u<r.length-1?(n.emitter.emitLine(`${a}if (!(${c})) {`),a+=" "):n.emitter.emitLine(`${a}${o} = ${c};`)}for(let u=s-1;u>=0;u--){let c=r[u+1],_=new Set;El(c,_),Fm(_,a,n),a=a.slice(2),n.emitter.emitLine(`${a}}`)}return o}var wm,Sm=Z(()=>{Te();Fe();Wt();yn();wm=0});function Im(e,t,n){var s;let r=e.args[0];if(!r)return"// Error: __yo_arc_dispose requires exactly 1 argument";let i=G(r,t,n),o=(s=r.$)==null?void 0:s.type;return!o||!Nn(o)?"// Error: __yo_arc_dispose requires an Arc type":`__yo_arc_dispose_${H(o,n)}(${i})`}function W_(e){var n;let t=(n=e.func.$)==null?void 0:n.value;return Y(t)&&Nn(t.value)&&e.args.length===1}function Nm(e,t,n){var c;if(!W_(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=G(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})`}var xm=Z(()=>{Ne();Fe();Wt();yn()});function Vm(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(ut(i)&&r){let c=n,_=r.map(p=>{var g,m;let d=G(p,t,n);if((g=p.$)!=null&&g.deferredDupExpressions&&p.$.deferredDupExpressions.length>0){Jt(p,t,c);let h=p.$.deferredDupExpressions[0];if(S(h)&&((m=h.$)!=null&&m.variableName))return Qe(h.$.variableName,h.$.env)}return d}).join(", "),f=H(i,n);if(o&&((u=e.$)!=null&&u.type)){let p=`(${f}){ .data = { ${_} } }`,d=an(e.$.type,o,n);return n.emitter.emitLine(`${t}${d} = ${p};`),o}else return`(${f}){ .data = { ${_} } }`}}function Dm(e,t,n){var p,d,g;let r=n.emitter,i=e.args[0],o=e.args[1],a=(p=i.$)==null?void 0:p.value;if(!a||!Y(a)||!ut(a.value))return"/* ERROR: __yo_array_fill first argument must be an ArrayType */";let s=a.value,l=s.length;if(!Rt(l))return"/* ERROR: __yo_array_fill requires compile-time known array length */";let u=H(s,n),c=G(o,t,n),_=((d=e.$)==null?void 0:d.variableName)||`temp_array_${Date.now()}`,f=`i_${Lt(((g=e.$)==null?void 0:g.env.modulePath)??"")}`;return r.emitLine(`${t}${u} ${_};`),r.emitLine(`${t}for (int ${f} = 0; ${f} < ${l.value}; ${f}++) {`),r.emitLine(`${t} ${_}.data[${f}] = ${c};`),r.emitLine(`${t}}`),_}var Mm=Z(()=>{Te();Ne();Cn();Fe();Wt();kr();yn()});function Om(e,t,n){var l,u,c,_,f,p,d,g,m,h,v,T,$,b,w,C,k,A,N,x,V,I,D;if((l=e.$)!=null&&l.isCompileTimeOnlyAssignment)return"";let r=e.args[0],i=e.args[1],o=!1;if(S(r)&&E(r,":",2)&&(o=!0,r=r.args[0]),o&&K(r)&&((u=r.$)!=null&&u.env)){let P=r.token.value,O=fe(r.$.env,P);if(O.length>0&&O[O.length-1].isModuleLevel)return""}if(S(r)&&E(r,R.comptime)||S(r)&&E(r,R.given))return"";if((c=r.$)!=null&&c.pathCollection&&((_=r.$)==null?void 0:_.pathCollection.length)>0){let P=r.$.pathCollection[0];if(P&&P.length>=2){let O=P[0];if(typeof O=="string"&&((f=r.$)!=null&&f.env)){let J=fe(r.$.env,O);if(J.length>0&&J[J.length-1].isCompileTimeOnly)return""}}}if(K(r)&&((p=r.$)!=null&&p.env)){let P=r.token.value,O=fe(r.$.env,P);if(O.length>0&&O[O.length-1].isCompileTimeOnly)return""}if(!((d=r.$)!=null&&d.type))return`// Error: No type information for left-hand side ${L(r)}
11082
11082
  `;let a=G(r,t,n),s=!1;if((g=e.$)!=null&&g.variableName){let P=e.$.variableName,O=n;if((O.inAsyncStateMachine||O.inEffectStateMachine)&&a.startsWith("sm->")){let U=(m=O.stateMachineVariables)==null?void 0:m.get(P);if(!U&&O.stateMachineVariables){for(let[,W]of O.stateMachineVariables)if(W.name===P){U=W;break}}if(U&&U.kind!=="outer"){let W=`var_${U.id}`;We(r.$.type)||n.emitter.emitLine(`${t}sm->${W} = ${a}; // Save old value for deferred drop`)}else s=!0}else{let U=an(r.$.type,P,n);ut(r.$.type)?n.emitter.emitLine(`${t}${U} = ${a}; // Save old value for later use`):We(r.$.type)||n.emitter.emitLine(`${t}${U} = ${a}; // Save old value for later use`)}}if(ut(r.$.type)){let P=G(i,t,n),O=S(i)&&((h=i.$)==null?void 0:h.closureFunctionValue)&&((v=i.$)==null?void 0:v.type)&&tr(i.$.type),J=n,U=P;if(!O&&((T=i.$)!=null&&T.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){if(($=i.$)!=null&&$.variableName&&((b=i.$)!=null&&b.type)){let q=Qe(i.$.variableName,i.$.env);if(q!==P.trim()){let j=i.$.convertedRuntimeType||i.$.type,ue=H(j,n);n.emitter.emitLine(`${t}${ue} ${q} = ${P};`)}}Jt(i,t,J);let W=i.$.deferredDupExpressions[0];S(W)&&((w=W.$)!=null&&w.variableName)&&(U=Qe(W.$.variableName,W.$.env))}if(o){let W=an(r.$.type,G(r,t,n),n);n.emitter.emitLine(`${t}${W} = ${U};`)}else n.emitter.emitLine(`${t}${a} = ${U};`)}else{let P=G(i,t,n),O=S(i)&&((C=i.$)==null?void 0:C.closureFunctionValue)&&((k=i.$)==null?void 0:k.type)&&tr(i.$.type),J=n,U=P;if(!O&&((A=i.$)!=null&&A.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){if((N=i.$)!=null&&N.variableName&&((x=i.$)!=null&&x.type)){let q=Qe(i.$.variableName,i.$.env);if(q!==P.trim()){let j=i.$.convertedRuntimeType||i.$.type,ue=H(j,n);n.emitter.emitLine(`${t}${ue} ${q} = ${P};`)}}Jt(i,t,J);let W=i.$.deferredDupExpressions[0];S(W)&&((V=W.$)!=null&&V.variableName)&&(U=Qe(W.$.variableName,W.$.env))}if(!We(r.$.type)){let W=r.$.type,q=(I=i.$)==null?void 0:I.type,j,ue=tn(i.$.env.modulePath,U.trim());ue&&n.tempVarAsyncStructNames&&(j=n.tempVarAsyncStructNames.get(U.trim()));let ye=o&&q&&ft(W)&&ft(q),X;ue&&ye?j?X=`${j}*`:X=H(q,n):ye&&j?X=`${j}*`:X=H(ye?q:W,n);let re=(J.inAsyncStateMachine||J.inEffectStateMachine)&&a.startsWith("sm->");n.emitter.emitLine(`${t}${o&&!re?X+" ":""}${a} = ${U};`)}}return s?"":((D=e.$)==null?void 0:D.variableName)??""}var Rm=Z(()=>{mt();qt();Te();Ne();Cn();Wt();kr();yn()});function zm(e,t,n){var s,l,u,c,_,f,p,d,g,m,h,v;let r=e.args[0];if(!r)return"// Error: await requires exactly 1 argument";let i=(s=r.$)==null?void 0:s.type;if(!i||!ft(i))return"// Error: await argument must be a Future type";let o=Wn(i);if(!o)return"// Error: could not extract Future module from type";let a=n;if(a.inAsyncStateMachine||a.inEffectStateMachine)return"";if(Vr(e)){let T=G(r,t,n),$=H(i,n),b=o.isFuture.outputType;B(b)&&(b.resolvedConcreteType?b=b.resolvedConcreteType:(l=e.$)!=null&&l.type&&!B(e.$.type)?b=e.$.type:(u=e.$)!=null&&u.type&&B(e.$.type)&&e.$.type.resolvedConcreteType&&(b=e.$.type.resolvedConcreteType));let w=a.emitter,C=We(b)||B(b)&&We(((c=e.$)==null?void 0:c.type)??b),k=(_=e.$)!=null&&_.variableName?`__sync_future_${e.$.variableName}`:"__sync_future",A=(f=e.$)!=null&&f.variableName?`__pre_await_state_${e.$.variableName}`:"__pre_await_state";w.emitLine(`${t}// Synchronous await (io.await outside state machine)`),w.emitLine(`${t}${$} ${k} = ${T};`),w.emitLine(`${t}int ${A} = ${k}->state;`),gl((p=r.$)==null?void 0:p.type)||(w.emitLine(`${t}if (${A} == 0 && ${k}->__yo_resume_fn) {`),vC(e,k,t,n),w.emitLine(`${t} __yo_incr_rc((void*)${k}); // event loop reference`),w.emitLine(`${t} ${k}->__yo_resume_fn((void*)${k});`),w.emitLine(`${t}}`)),w.emitLine(`${t}{`),w.emitLine(`${t} int __await_state = ${k}->state;`),w.emitLine(`${t} while (__await_state != -1 && __await_state != -2) {`),w.emitLine(`${t} __yo_async_poll_step();`),w.emitLine(`${t} __await_state = ${k}->state;`),w.emitLine(`${t} }`),w.emitLine(`${t} if (__await_state == -2) {`);let x=Wn(i),V=((d=x==null?void 0:x.isFuture.effects)==null?void 0:d.some(I=>ne(I.type)||it(I.type)||I.isEffectRowSpread))??!1;if(V){w.emitLine(`${t} if (${A} == -2) {`),w.emitLine(`${t} fprintf(stderr, "panic: attempted to await an aborted Future\\n");`),w.emitLine(`${t} abort();`),w.emitLine(`${t} }`);let I=a.pendingDeferredDrops;if(I){let O=(g=e.$)==null?void 0:g.variableName;a.pendingDeferredDrops=I.filter(J=>qr(J)!==O)}wr(t+" ",a,e),a.pendingDeferredDrops=I;let D=hC(x,a),P=(h=(m=a.currentFunctionType)==null?void 0:m.return)==null?void 0:h.type;if(D)if(w.emitLine(`${t} __yo_effect_escaped = 0;`),P&&!We(P)){let O=H(P,n);O!=="void"?(w.emitLine(`${t} ${O} _esc_result;`),w.emitLine(`${t} memcpy(&_esc_result, __yo_effect_escape_value, sizeof(${O}));`),w.emitLine(`${t} return _esc_result;`)):w.emitLine(`${t} return;`)}else w.emitLine(`${t} return;`);else if(w.emitLine(`${t} __yo_effect_escaped = 1;`),P&&!We(P)){let O=H(P,n);w.emitLine(`${t} return (${O}){0};`)}else w.emitLine(`${t} return;`)}else w.emitLine(`${t} fprintf(stderr, "panic: attempted to await an aborted Future\\n");`),w.emitLine(`${t} abort();`);if(w.emitLine(`${t} }`),w.emitLine(`${t}}`),C)return"";{let I=((v=e.$)==null?void 0:v.variableName)||"__sync_await_result",D=H(b,n),P=an(b,I,n);if(V){if(w.emitLine(`${t}${P};`),w.emitLine(`${t}if (${k}->state == -1) {`),ht(b)){let O=ri(b,n);O?w.emitLine(`${t} ${I} = ${O}(${k}->result);`):w.emitLine(`${t} ${I} = ${k}->result;`)}else w.emitLine(`${t} ${I} = ${k}->result;`);w.emitLine(`${t}} else {`),w.emitLine(`${t} ${I} = (${D}){0};`),w.emitLine(`${t}}`)}else if(ht(b)){let O=ri(b,n);O?w.emitLine(`${t}${P} = ${O}(${k}->result);`):w.emitLine(`${t}${P} = ${k}->result;`)}else w.emitLine(`${t}${P} = ${k}->result;`);return I}}return"// Error: await should only be used inside async blocks"}function Um(e,t,n){var c,_,f;let r=e.args[0];if(!r)return"// Error: io.state requires exactly 1 argument";let i=(c=r.$)==null?void 0:c.type;if(!i||!ft(i))return"// Error: io.state argument must be a Future type";let a=n.emitter,s=G(r,t,n),l=(_=e.$)!=null&&_.variableName?`__raw_state_${e.$.variableName}`:"__raw_state",u=((f=e.$)==null?void 0:f.variableName)||"__io_state_result";return a.emitLine(`${t}int ${l} = ${s}->state;`),a.emitLine(`${t}int32_t ${u} = (${l} > 0) ? 1 : ${l};`),u}function Bm(e,t,n){var b,w,C,k,A;let i=n.emitter,o=S(e.func)?e.func.args[0]:e.args[0];if(!o)return"// Error: JoinHandle.await requires a self argument";let a=G(o,t,n),s=(b=e.$)==null?void 0:b.type;if(!s||!Ze(s))return"// Error: JoinHandle.await return type must be Option(T)";let l=H(s,n),u=s.variants.find(N=>N.name==="Some"),c=(C=(w=u==null?void 0:u.fields)==null?void 0:w[0])==null?void 0:C.type,_=!c||We(c),f=_?"uint8_t":c?H(c,n):"uint8_t",p=er(s,"Some",n),d=er(s,"None",n),g=((k=e.$)==null?void 0:k.variableName)||"jh",m=`__jh_future_${g}`,h=`__jh_header_${g}`,v=((A=e.$)==null?void 0:A.variableName)||"__jh_result",T=`__yo_jh_header_${g}`;i.emitLine(`${t}// JoinHandle.await \u2014 poll spawned task, return Option(T)`);let $=an(s,v,n);if(i.emitLine(`${t}${$};`),i.emitLine(`${t}{`),i.emitLine(`${t} void* ${m} = ${a}.__future;`),i.emitLine(`${t} struct ${T} {`),i.emitLine(`${t} __yo_ref_header_t header;`),i.emitLine(`${t} int state;`),i.emitLine(`${t} ${f} result;`),i.emitLine(`${t} void (*continuation_fn)(void*);`),i.emitLine(`${t} void* continuation_sm;`),i.emitLine(`${t} void (*__yo_resume_fn)(void*);`),i.emitLine(`${t} };`),i.emitLine(`${t} struct ${T}* ${h} = (struct ${T}*)${m};`),i.emitLine(`${t} int __jh_state = ${h}->state;`),i.emitLine(`${t} while (__jh_state != -1 && __jh_state != -2) {`),i.emitLine(`${t} __yo_async_poll_step();`),i.emitLine(`${t} __jh_state = ${h}->state;`),i.emitLine(`${t} }`),i.emitLine(`${t} if (__jh_state == -1) {`),_)i.emitLine(`${t} ${v} = (${l}){ .tag = ${p} };`);else if(c&&ht(c)){let N=ri(c,n);N?i.emitLine(`${t} ${v} = (${l}){ .tag = ${p}, .data = { .Some = { .value = ${N}(${h}->result) } } };`):i.emitLine(`${t} ${v} = (${l}){ .tag = ${p}, .data = { .Some = { .value = ${h}->result } } };`)}else i.emitLine(`${t} ${v} = (${l}){ .tag = ${p}, .data = { .Some = { .value = ${h}->result } } };`);return i.emitLine(`${t} } else {`),i.emitLine(`${t} __yo_effect_escaped = 0;`),i.emitLine(`${t} ${v} = (${l}){ .tag = ${d} };`),i.emitLine(`${t} }`),i.emitLine(`${t}}`),v}function hC(e,t){let n=e.isFuture.effects;if(!(n!=null&&n.length))return!1;let r=Gm(n),i=t.currentEvidenceParams;for(let o of r)if(ne(o.type)){let a=`${o.label}.${o.label}`;if(!(i!=null&&i.has(a)))return!0}else if(it(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 Gm(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;B(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),nn(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function vC(e,t,n,r){var c,_,f;let i=e.args[0];if(!((c=i==null?void 0:i.$)!=null&&c.type))return;let o=Wn(i.$.type);if(!((_=o==null?void 0:o.isFuture.effects)!=null&&_.length))return;let a=Gm(o.isFuture.effects),s=r,l=s.emitter,u=e.args.find(p=>S(p)&&E(p,R.using));if(u){let p=u.args;for(let d=0;d<a.length&&d<p.length;d++){let g=a[d],m=p[d];if(ne(g.type)){let h=G(m,n,r),v=g.label;l.emitLine(`${n} ${t}->__capture.${v} = (void*)${h};`)}else it(g.type)&&Pm(g.type,t,n,(f=m.$)==null?void 0:f.value,s,e)}}else for(let p of a)if(ne(p.type)){let d=EC(p.label,s,e);d&&l.emitLine(`${n} ${t}->__capture.${p.label} = (void*)${d};`)}else it(p.type)&&Pm(p.type,t,n,void 0,s,e)}function Pm(e,t,n,r,i,o){let a=i.emitter;for(let s of e.fields){if(!ne(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&&xt(r)){let u=e.fields.indexOf(s),c=r.fields[u];if(c&&we(c)){let _=i.functions[c.funcId];_&&(l=_.cName)}}if(!l&&i.currentEvidenceParams){for(let u of i.currentEvidenceParams.values())if(u.fieldLabel===s.label){l=u.cParamName;break}}l||(l=TC(s.label,e,i,o)),l&&a.emitLine(`${n} ${t}->__capture.${s.label} = (void*)${l};`)}}function TC(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=Dr(i,c=>c.isImplicit===!0);for(let c=o.length-1;c>=0;c--){let _=o[c],f=(l=_.value)==null?void 0:l[_.value.length-1];if(f&&xt(f)){let p=f.type.fields.findIndex(d=>d.label===e);if(p>=0){let d=f.fields[p];if(d&&we(d)){let g=(u=n.functions[d.funcId])==null?void 0:u.cName;if(g)return g}}}}}function EC(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 Wm=Z(()=>{mt();fi();qt();Te();Ne();at();Fe();zo();Wt();kr();yn();Tl()});function Ym(e,t,n){var a,s,l,u,c,_,f,p,d,g,m,h,v,T;let r=(a=e.$)==null?void 0:a.variableName,i=(s=e.$)==null?void 0:s.type,o=n;if(r&&i){!We(i)&&!Zt((l=e.$)==null?void 0:l.controlFlow)&&n.emitter.emitLine(`${t}${H(i,n)} ${r};`),n.emitter.emitLine(`${t}{ // begin block`);let $=o.pendingDeferredDrops,b=((u=e.$)==null?void 0:u.deferredDropExpressions)??[];o.pendingDeferredDrops=[...b,...$??[]];let w=o.consumedVarPendingDrops,C=((c=e.$)==null?void 0:c.consumedVariableDropExpressions)??[];o.consumedVarPendingDrops=[...C,...w??[]];let k=[],A=!We(i)&&!Zt((_=e.$)==null?void 0:_.controlFlow);for(let N=0;N<e.args.length;N++){let x=e.args[N],V=G(x,t+" ",n);k.push(V);let I=N===e.args.length-1;V&&!(I&&A)&&(x.$&&tn(x.$.env.modulePath,V)||n.emitter.emitLine(`${t} ${V};`))}if(A){let N=e.args[e.args.length-1],x=k[k.length-1];if((f=N.$)!=null&&f.deferredDupExpressions&&N.$.deferredDupExpressions.length>0){if((p=N.$)!=null&&p.variableName){let I=N.$.variableName;N.$.variableName=void 0;let D=G(N,t+" ",n);N.$.variableName=I;let P=H(N.$.type,n),O=Qe(I,N.$.env);O!==D&&n.emitter.emitLine(`${t} ${P} ${O} = ${D};`),x=O}Jt(N,t+" ",n);let V=N.$.deferredDupExpressions[0];S(V)&&((d=V.$)!=null&&d.variableName)&&(x=Qe(V.$.variableName,V.$.env))}n.emitter.emitLine(`${t} ${r} = ${x};`)}if((g=e.$)!=null&&g.deferredDropExpressions)for(let N of e.$.deferredDropExpressions){if(o.shortCircuitHandledDropVarNames){let V=qr(N);if(V&&o.shortCircuitHandledDropVarNames.has(V)){o.shortCircuitHandledDropVarNames.delete(V);continue}}let x=G(N,t+" ",n);x&&n.emitter.emitLine(`${t} ${x};`)}return n.emitter.emitLine(`${t}} // end begin block`),o.pendingDeferredDrops=$,o.consumedVarPendingDrops=w,We(i)||Zt((m=e.$)==null?void 0:m.controlFlow)?"":r}else{n.emitter.emitLine(`${t}{ // begin block`);let $=o.pendingDeferredDrops,b=((h=e.$)==null?void 0:h.deferredDropExpressions)??[];o.pendingDeferredDrops=[...b,...$??[]];let w=o.consumedVarPendingDrops,C=((v=e.$)==null?void 0:v.consumedVariableDropExpressions)??[];if(o.consumedVarPendingDrops=[...C,...w??[]],e.args.map(A=>G(A,t+" ",n)).forEach(A=>{A&&n.emitter.emitLine(`${t} ${A};`)}),(T=e.$)!=null&&T.deferredDropExpressions)for(let A of e.$.deferredDropExpressions){if(o.shortCircuitHandledDropVarNames){let x=qr(A);if(x&&o.shortCircuitHandledDropVarNames.has(x)){o.shortCircuitHandledDropVarNames.delete(x);continue}}let N=G(A,t+" ",n);N&&n.emitter.emitLine(`${t} ${N};`)}return n.emitter.emitLine(`${t}} // end begin block`),o.pendingDeferredDrops=$,o.consumedVarPendingDrops=w,""}}var qm=Z(()=>{Te();Ne();Cn();Wt();kr();yn()});function Hm(e,t,n){var a;let r=e.args[0];if(S(r)&&E(r,R.comptime,1)||S(r)&&E(r,R.given,1))return"";if(!((a=r.$)!=null&&a.type))return`// Error: No type information for left-hand side ${L(r)}
11083
- `;let i=r.token.value,o=an(r.$.type,i,n);return n.emitter.emitLine(`${t}${o};`),""}var jm=Z(()=>{Te();Wt()});function Km(e,t,n){var r,i,o,a,s,l,u,c,_,f,p,d,g,m,h,v;if(e.$){let T=e.$.variableName,$=e.$.type,b=$&&We($),w=-1;for(let x=0;x<e.args.length;x++){let V=e.args[x];if(S(V)&&E(V,"=>",2)){let I=V.args[0];if(I&&!(It((r=I.$)==null?void 0:r.value)&&I.$.value.value===!1)){w=x;break}}}let C=!1;if(w>=0){let x=e.args[w];if(x&&S(x)&&E(x,"=>",2)){let V=x.args[0];V&&It((i=V.$)==null?void 0:i.value)&&V.$.value.value===!0&&(C=!0)}}if(!b&&T&&!C){let x=H($,n);n.emitter.emitLine(`${t}${x} ${T};`)}if(C&&w>=0){let x=e.args[w];if(x&&S(x)&&E(x,"=>",2)){let V=x.args[1];if(V){let I=G(V,t,n);T&&!b&&(I&&I!==""&&!I.startsWith("goto")&&I!=="continue"&&I!=="break"&&!I.includes("return")?n.emitter.emitLine(`${t}${T} = ${I};`):I&&(I.startsWith("goto")||I==="continue"||I==="break"||I.includes("return"))&&n.emitter.emitLine(`${t}${I};`))}}return b?"":T??""}let k=t,A=0,N=!1;for(let x=0;x<e.args.length;x++){let V=e.args[x];if(S(V)&&E(V,"=>",2)){let I=V.args[0],D=V.args[1];if(I&&D){if(It((o=I.$)==null?void 0:o.value)&&I.$.value.value===!1)continue;if(N){if(n.emitter.emitLine(`${k}else {`),A++,k+=" ",!(It((s=I.$)==null?void 0:s.value)&&I.$.value.value===!0)){let W=G(I,k,n);n.emitter.emitLine(`${k}if (${W}) {`)}}else{if(It((a=I.$)==null?void 0:a.value)&&I.$.value.value===!0)n.emitter.emitLine(`${k}{`);else{let U=G(I,k,n);n.emitter.emitLine(`${k}if (${U}) {`)}N=!0}let P=It((l=I.$)==null?void 0:l.value)&&I.$.value.value===!0,O=N&&P?k:k+" ";if(S(D)&&E(D,R.begin)){let U=D.args,W=n,q=W.pendingDeferredDrops,j=((u=D.$)==null?void 0:u.deferredDropExpressions)??[];W.pendingDeferredDrops=[...j,...q??[]];let ue=W.consumedVarPendingDrops,ye=((c=D.$)==null?void 0:c.consumedVariableDropExpressions)??[];W.consumedVarPendingDrops=[...ye,...ue??[]];for(let X=0;X<U.length-1;X++){let re=U[X],le=G(re,O,n);if(le&&re.$&&!tn(re.$.env.modulePath,le)&&n.emitter.emitLine(`${O}${le};`),Zt((_=re.$)==null?void 0:_.controlFlow))break}if(U.length>0){let X=U[U.length-1];if((f=X.$)!=null&&f.deferredDupExpressions){if((p=X.$)!=null&&p.variableName){let le=X.$.variableName;X.$.variableName=void 0;let Oe=G(X,O,n);X.$.variableName=le;let $e=H(X.$.type,n),ae=Qe(le,X.$.env);ae!==Oe&&n.emitter.emitLine(`${O}${$e} ${ae} = ${Oe};`)}Jt(X,O,n);let re=X.$.deferredDupExpressions[0];if(S(re)&&((d=re.$)!=null&&d.variableName)){let le=Qe(re.$.variableName,re.$.env);T&&!b&&n.emitter.emitLine(`${O}${T} = ${le};`)}else{let le=G(X,O,n);le&&T&&!b&&n.emitter.emitLine(`${O}${T} = ${le};`)}}else{let re=G(X,O,n);re&&(re==="continue"||re==="break"||re.startsWith("goto")||S(X)&&E(X,R.return)||re.includes("return")?n.emitter.emitLine(`${O}${re};`):T&&!b&&n.emitter.emitLine(`${O}${T} = ${re};`))}}(g=D.$)!=null&&g.deferredDropExpressions&&Ln(D,O,n),W.pendingDeferredDrops=q,W.consumedVarPendingDrops=ue}else if((m=D.$)!=null&&m.deferredDupExpressions&&D.$.deferredDupExpressions.length>0){if((h=D.$)!=null&&h.variableName){let W=D.$.variableName;D.$.variableName=void 0;let q=G(D,O,n);D.$.variableName=W;let j=H(D.$.type,n),ue=Qe(W,D.$.env);ue!==q&&n.emitter.emitLine(`${O}${j} ${ue} = ${q};`)}Jt(D,O,n);let U=D.$.deferredDupExpressions[0];if(S(U)&&((v=U.$)!=null&&v.variableName)){let W=Qe(U.$.variableName,U.$.env);T&&!b&&n.emitter.emitLine(`${O}${T} = ${W};`)}else{let W=G(D,O,n);W&&T&&!b&&n.emitter.emitLine(`${O}${T} = ${W};`)}}else{let U=G(D,O,n);U==="continue"||U==="break"||U.startsWith("goto")||S(D)&&E(D,R.return)||U.includes("return")?n.emitter.emitLine(`${O}${U};`):U===""||!U||T&&(b||n.emitter.emitLine(`${O}${T} = ${U};`))}!(N&&P)&&n.emitter.emitLine(`${k}}`)}}}for(let x=0;x<A;x++)k=k.slice(0,-2),n.emitter.emitLine(`${k}}`);return b?"":T??""}return'/* "cond" expression is not evaluated */'}var Xm=Z(()=>{Te();Ne();Cn();Fe();Wt();kr();yn()});function Qm(e,t,n){let r=e.args[0];return G(r,t,n)}var Zm=Z(()=>{yn()});function Jm(e,t,n){var k,A,N,x,V;let r=e.args[0],i=(k=r.$)==null?void 0:k.type;if(!i||!dt(i))throw new Error("downcast codegen: expected Dyn type as first argument");let o=G(r,t,n),s=(A=e.args[1].$)==null?void 0:A.value;if(!s||!Y(s))throw new Error("downcast codegen: expected TypeValue as second argument");let l=s.value,u=H(l,n),c=((N=n.types[l.id])==null?void 0:N.cName)||u,_=`__yo_typeid_${Ae(c)}`;n.typeIdStatics||(n.typeIdStatics=new Map),n.typeIdStatics.has(l.id)||(n.typeIdStatics.set(l.id,_),n.emitter.emitDeclarationLine(`static const char ${_} = 0;`)),n.cIncludes.add("<stdint.h>");let f=`${o}.vtable->__yo_type_id == (uintptr_t)&${_}`,p,d=!1,g="",m="";for(let[,I]of n.dynImpls){if(I.dynType.id!==i.id)continue;if((B(I.concreteType)&&I.concreteType.resolvedConcreteType?I.concreteType.resolvedConcreteType:I.concreteType).id===l.id&&Yr(I.dataType)){d=!0,g=((x=n.types[I.dataType.id])==null?void 0:x.cName)||`unknown_box_${I.dataType.id}`,m=Ae(I.dataType.fields[0].label);break}}if(d){let I=`((${g}*)${o}.data)->${m}`,D=ri(l,n);if(pn(l))p=`((${u})__yo_incr_rc((void*)${I}))`;else if(D)p=`${D}((${u})${I})`;else{let P=!1,O=l;for(;Gr(O)&&O.fields.length===1;)O=O.fields[0].type;P=pn(O),P?p=`((${u})__yo_incr_rc((void*)${I}))`:p=`((${u})${I})`}}else p=`((${u})__yo_incr_rc((void*)${o}.data))`;let h=(V=e.$)==null?void 0:V.type;if(!h||!Ze(h))throw new Error("downcast codegen: expected Option enum as result type");if(rr(h))return`((${f}) ? ${p} : NULL)`;let T=H(h,n),$=er(h,"Some",n),b=er(h,"None",n),w=`(${T}){ .tag = ${$}, .data = { .Some = { .value = ${p} } } }`,C=`(${T}){ .tag = ${b} }`;return`((${f}) ? ${w} : ${C})`}var ey=Z(()=>{Ne();Fe();Wt();yn();kr()});function ty(e,t,n){var h,v,T,$,b,w,C,k,A;if(!((h=e.$)!=null&&h.dynCallTraitValues)||e.$.dynCallTraitValues.length===0)return"/* Error: dyn() call missing trait values */";let r=((T=(v=e.$)==null?void 0:v.runtimeArgExprsInOrder)==null?void 0:T[0])??e.args[0];if(!r)return"/* Error: dyn() requires a value argument */";let i=e.$.type;if(!dt(i))return"/* Error: dyn() result type is not DynType */";let o=($=r.$)==null?void 0:$.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(!pn(o)&&!Yr(o))return"/* Error: dyn() requires an object type (use box() for value types) */";let s=Yr(o)?o.fields[0].type:o,l=B(s)&&s.resolvedConcreteType?s.resolvedConcreteType:s,u=((b=n.types[i.id])==null?void 0:b.cName)||`__yo_dyn_${i.id}`,_=`${(()=>{var I,D;let N=(I=n.types[l.id])==null?void 0:I.cName;if(N)return N;let x=pr(l);return(x?(D=n.types[x.id])==null?void 0:D.cName:void 0)||`unknown_${l.id}`})()}_${u}`;n.dynImpls.set(_,{dynType:i,concreteType:s,dataType:o,traitValues:a});let f=G(r,t,n);if((w=r.$)!=null&&w.variableName&&f!==r.$.variableName){let N=an(r.$.type,r.$.variableName,n);n.emitter.emitLine(`${t}${N} = ${f};`),f=r.$.variableName}if((C=r.$)!=null&&C.deferredDupExpressions&&r.$.deferredDupExpressions.length>0){Jt(r,t,n);let N=r.$.deferredDupExpressions[0];S(N)&&((k=N.$)!=null&&k.variableName)&&(f=Qe(N.$.variableName,N.$.env))}let p=(A=e.$)==null?void 0:A.variableName;if(!p)return"/* Error: dyn() expression missing temp variable name */";let d=n,g;if(d.inAsyncStateMachine&&d.stateMachineVariables){for(let[,N]of d.stateMachineVariables)if(N.kind==="local"&&N.id===p){g=`sm->${dr(N.id,"local",d.stateMachineFieldAliases)}`;break}}let m=`__yo_vtable_${_}`;return g?(n.emitter.emitLine(`${t}${g} = (${u}){`),n.emitter.emitLine(`${t} .data = ${f},`),n.emitter.emitLine(`${t} .vtable = &${m}`),n.emitter.emitLine(`${t}};`),g):(n.emitter.emitLine(`${t}${u} ${p} = {`),n.emitter.emitLine(`${t} .data = ${f},`),n.emitter.emitLine(`${t} .vtable = &${m}`),n.emitter.emitLine(`${t}};`),p)}var ny=Z(()=>{qt();Te();Ne();Wt();kr();yn();zo()});function ry(e,t,n){return e.args.length!==0?"// Error: __yo_gc_collect requires exactly 0 arguments":"__yo_gc_collect()"}var iy=Z(()=>{});function oy(e,t,n){var a,s,l,u,c,_,f,p,d,g,m,h,v,T,$,b,w,C,k;let r=e.args[0],i=e.args[1],o=n;if(S(r)&&E(r,R.comptime,1)||S(r)&&E(r,R.given,1))return"";if((o.inAsyncStateMachine||o.inEffectStateMachine)&&K(r)&&K(i)){let A=r.token.value,N=i.token.value,x=o.stateMachineVariables&&Array.from(o.stateMachineVariables.values()).some(I=>I.name===A),V=o.stateMachineVariables&&Array.from(o.stateMachineVariables.values()).some(I=>I.name===N);if(A===N&&(x||V))return""}if((a=e.$)!=null&&a.runtimeDestructurings){let A=e.$.runtimeDestructurings,N=G(i,t,n),x=(s=i.$)==null?void 0:s.type;return A.forEach(({label:V,type:I,variableName:D})=>{if(D==="_")return;let P=Ae(D,I.isExtern==="c"),O=an(I,P,n);if(x&&Ue(x)&&x.isNewtype&&x.fields.length===1){let W=x.fields[0];if(W&&W.label===V){n.emitter.emitLine(`${t}${O} = ${N}; // Destructuring ${V} (newtype)`);return}}let J=V.match(/^\d+$/)?`_${V}`:Ae(V,I.isExtern==="c");if(x&&gt(x)&&!V.match(/^\d+$/)){let W=x.fields.findIndex(q=>q.label===V);J=W>=0?`_${W}`:J}let U=x&&pn(x)?"->":".";n.emitter.emitLine(`${t}${O} = ${N}${U}${J}; // Destructuring ${V}`)}),""}if(K(r)){let A=((l=r.$)==null?void 0:l.variableName)??r.token.value;if(!((u=r.$)!=null&&u.type))return`// Error: No type information for variable ${A}
11084
- `;if((c=r.$)!=null&&c.env){let V=fe(r.$.env,A);if(V.length>0&&V[V.length-1].isCompileTimeOnly||V.length>0&&V[V.length-1].isModuleLevel)return""}let N=!1,x;if((o.inAsyncStateMachine||o.inEffectStateMachine)&&o.stateMachineVariables&&((_=r.$)!=null&&_.env)){let V=fe(r.$.env,A);if(V.length>0){let I=V[V.length-1],D=I.isOwningTheSameRcValueAs?I.isOwningTheSameRcValueAs.id:I.id;o.stateMachineVariables.has(D)&&(N=!0,x=D)}}if(ut(r.$.type))if(S(i)&&E(i,R.array)){let V=G(i,t,n);if(N&&x){let I=dr(x,"local",o.stateMachineFieldAliases);n.emitter.emitLine(`${t}sm->${I} = ${V};`)}else if(!We(r.$.type)){let I=an(r.$.type,A,n);n.emitter.emitLine(`${t}${I} = ${V};`)}}else{let V;if((f=i.$)!=null&&f.variableName){let I=Qe(i.$.variableName,i.$.env),D=G(i,t,n);if(!N){let P=an(i.$.type,I,n);I!==D&&n.emitter.emitLine(`${t}${P} = ${D};`)}V=I}else V=G(i,t,n);if(N&&x){let I=dr(x,"local",o.stateMachineFieldAliases);n.emitter.emitLine(`${t}sm->${I} = ${V};`)}else if(!We(r.$.type)){let I=an(r.$.type,A,n);n.emitter.emitLine(`${t}${I} = ${V};`)}}else{let V,I=S(i)&&((p=i.$)==null?void 0:p.closureFunctionValue)&&((d=i.$)==null?void 0:d.type)&&tr(i.$.type),D=S(i)&&Xn(i);if((g=i.$)!=null&&g.variableName){let P=Qe(i.$.variableName,i.$.env),O=Qe(A,r.$.env);if(P===O){if(V=G(i,t,n),!I&&!D&&((m=i.$)!=null&&m.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){Jt(i,t,o);let J=i.$.deferredDupExpressions[0];S(J)&&((h=J.$)!=null&&h.variableName)&&(V=Qe(J.$.variableName,J.$.env))}}else if(K(i)&&P===Qe(i.token.value,i.$.env)){if(V=G(i,t,n),!I&&!D&&((v=i.$)!=null&&v.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){Jt(i,t,o);let J=i.$.deferredDupExpressions[0];S(J)&&((T=J.$)!=null&&T.variableName)&&(V=Qe(J.$.variableName,J.$.env))}}else if(K(i)&&o.currentClosureCaptures&&o.currentClosureCaptures.includes(i.token.value)&&(($=i.$)!=null&&$.env)&&o.currentClosureCaptureFrameLevel!==void 0&&ao(i.token.value,i.$.env,o.currentClosureCaptureFrameLevel)){let J=o.currentClosureType;if(J&&J.isClosure){let U=Object.values(o.types).find(W=>W.type===J);U?V=`((${`${U.cName}_capture`}*)closure_context->data)->${Qe(i.token.value,i.$.env)}`:V=`closure_context->${Qe(i.token.value,i.$.env)}`}else V=`closure_context->${Qe(i.token.value,i.$.env)}`}else{let J=G(i,t,n);if(J.trim()!==P){let U=i.$.convertedRuntimeType||i.$.type,W=an(U,P,n);n.emitter.emitLine(`${t}${W} = ${J};`)}if(!I&&!D&&((b=i.$)!=null&&b.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){Jt(i,t,o);let U=i.$.deferredDupExpressions[0];S(U)&&((w=U.$)!=null&&w.variableName)?V=Qe(U.$.variableName,U.$.env):V=P}else V=P}}else if(V=G(i,t,n),!I&&!D&&((C=i.$)!=null&&C.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){Jt(i,t,o);let P=i.$.deferredDupExpressions[0];S(P)&&((k=P.$)!=null&&k.variableName)&&(V=Qe(P.$.variableName,P.$.env))}if(Vt(r.$.type)){let P=r.$.type;if(N&&x){let O=dr(x,"local",o.stateMachineFieldAliases);n.emitter.emitLine(`${t}sm->${O} = ${V};`)}else if(!We(P)){let O=an(P,A,n);n.emitter.emitLine(`${t}${O} = ${V};`)}}else if(N&&x){let P=dr(x,"local",o.stateMachineFieldAliases);n.emitter.emitLine(`${t}sm->${P} = ${V};`)}else{let P=tn(i.$.env.modulePath,V.trim()),O;if(P&&n.tempVarAsyncStructNames){let J=n.tempVarAsyncStructNames.get(V.trim());J?O=`${J}*`:O=H(r.$.type,n)}else O=H(r.$.type,n);We(r.$.type)||n.emitter.emitLine(`${t}${O} ${Qe(A,r.$.env)} = ${V};`)}}return""}}var ay=Z(()=>{mt();fi();qt();Te();Ne();Cn();Wt();hl();kr();yn();zo()});function $l(e,t,n,r,i=" "){var o,a,s,l,u,c,_,f,p,d;if(F.__yo_op_add.includes(e))return`((${t[0]}) + (${t[1]}))`;if(F.__yo_op_sub.includes(e))return`((${t[0]}) - (${t[1]}))`;if(F.__yo_op_mul.includes(e))return`((${t[0]}) * (${t[1]}))`;if(F.__yo_op_div.includes(e))return`((${t[0]}) / (${t[1]}))`;if(F.__yo_op_mod.includes(e))return`((${t[0]}) % (${t[1]}))`;if(F.__yo_op_neg.includes(e))return`(-(${t[0]}))`;if(F.__yo_op_eq.includes(e))return`((${t[0]}) == (${t[1]}))`;if(F.__yo_op_neq.includes(e))return`((${t[0]}) != (${t[1]}))`;if(F.__yo_op_lt.includes(e))return`((${t[0]}) < (${t[1]}))`;if(F.__yo_op_lte.includes(e))return`((${t[0]}) <= (${t[1]}))`;if(F.__yo_op_gt.includes(e))return`((${t[0]}) > (${t[1]}))`;if(F.__yo_op_gte.includes(e))return`((${t[0]}) >= (${t[1]}))`;if(F.__yo_op_not.includes(e))return`(!(${t[0]}))`;if(F.__yo_op_bit_and.includes(e))return`((${t[0]}) & (${t[1]}))`;if(F.__yo_op_bit_or.includes(e))return`((${t[0]}) | (${t[1]}))`;if(F.__yo_op_bit_xor.includes(e))return`((${t[0]}) ^ (${t[1]}))`;if(F.__yo_op_bit_complement.includes(e))return`(~(${t[0]}))`;if(F.__yo_op_bit_left_shift.includes(e))return`((${t[0]}) << (${t[1]}))`;if(F.__yo_op_bit_right_shift.includes(e))return`((${t[0]}) >> (${t[1]}))`;if(F.__yo_noop.includes(e))return"";if(F.__yo_return_self.includes(e))return`(*${t[0]})`;if(F.__yo_ms_sleep.includes(e))return ln(r.targetInfo)?`Sleep(${t[0]})`:`usleep((${t[0]}) * 1000)`;if(F.__yo_decr_rc.includes(e))return`__yo_decr_rc((void*)(${t[0]}))`;if(F.__yo_as.includes(e)&&((o=n.$)!=null&&o.type)){let g=H(n.$.type,r),m=(s=(a=n.args[0])==null?void 0:a.$)==null?void 0:s.type;return m&&Ze(m)&&!ni(m)?`((${g})((${t[0]}).tag))`:`((${g})(${t[0]}))`}else{if(F.__yo_ptr_add.includes(e))return`(${t[0]} + ${t[1]})`;if(F.__yo_ptr_sub.includes(e))return`(${t[0]} - ${t[1]})`;if(F.__yo_ptr_diff.includes(e))return`(${t[0]} - ${t[1]})`;if(F.__yo_ptr_eq.includes(e))return`(${t[0]} == ${t[1]})`;if(F.__yo_ptr_neq.includes(e))return`(${t[0]} != ${t[1]})`;if(F.__yo_ptr_lt.includes(e))return`(${t[0]} < ${t[1]})`;if(F.__yo_ptr_lte.includes(e))return`(${t[0]} <= ${t[1]})`;if(F.__yo_ptr_gt.includes(e))return`(${t[0]} > ${t[1]})`;if(F.__yo_ptr_gte.includes(e))return`(${t[0]} >= ${t[1]})`;if(F.__yo_slice_len.includes(e))return`(${t[0]}.length)`;if(F.__yo_slice_ptr.includes(e))return`(${t[0]}.data)`;if(F.__yo_slice_new.includes(e)&&((l=n.$)!=null&&l.type))return`(${H(n.$.type,r)}){ .data = ${t[0]}, .length = ${t[1]} }`;if(F.__yo_getrandom.includes(e))return`getrandom(${t[0]}, ${t[1]}, ${t[2]})`;if(F.__yo_arc4random_buf.includes(e))return`(arc4random_buf(${t[0]}, ${t[1]}), (void)0)`;if(F.__yo_bcrypt_gen_random.includes(e))return`(int32_t)BCryptGenRandom(NULL, ${t[0]}, ${t[1]}, BCRYPT_USE_SYSTEM_PREFERRED_RNG)`;if(F.__yo_getentropy.includes(e))return`getentropy(${t[0]}, ${t[1]})`;if(F.__yo_maybe_uninit_new.includes(e)&&((u=n.$)!=null&&u.type)){let g=H(n.$.type,r),m=`__yo_uninit_${$C++}`;return r.emitter.emitLine(`${i}${g} ${m};`),m}else return F.__yo_maybe_uninit_as_ptr.includes(e)&&((c=n.$)!=null&&c.type)?`((${H(n.$.type,r)})(${t[0]}))`:F.__yo_maybe_uninit_assume_init.includes(e)?`(${t[0]})`:F.__yo_array_index.includes(e)?`(&((${t[0]})->data[${t[1]}]))`:F.__yo_slice_index.includes(e)?`(&((${t[0]})->data[${t[1]}]))`:F.__yo_array_index_range.includes(e)&&((_=n.$)!=null&&_.type)&&ot(n.$.type)?`(&(${H(n.$.type.childType,r)}){ .data = &((${t[0]})->data[(${t[1]}).start]), .length = (${t[1]}).end - (${t[1]}).start })`:F.__yo_array_index_range_inclusive.includes(e)&&((f=n.$)!=null&&f.type)&&ot(n.$.type)?`(&(${H(n.$.type.childType,r)}){ .data = &((${t[0]})->data[(${t[1]}).start]), .length = (${t[1]}).end - (${t[1]}).start + 1 })`:F.__yo_slice_index_range.includes(e)&&((p=n.$)!=null&&p.type)&&ot(n.$.type)?`(&(${H(n.$.type.childType,r)}){ .data = &((${t[0]})->data[(${t[1]}).start]), .length = (${t[1]}).end - (${t[1]}).start })`:F.__yo_slice_index_range_inclusive.includes(e)&&((d=n.$)!=null&&d.type)&&ot(n.$.type)?`(&(${H(n.$.type.childType,r)}){ .data = &((${t[0]})->data[(${t[1]}).start]), .length = (${t[1]}).end - (${t[1]}).start + 1 })`:`/* Unhandled operator ${e} */`}}var $C,Y_=Z(()=>{Te();Ne();Sr();Wt();$C=0});function sy(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=G(r,t,n),o=(c=r.$)==null?void 0:c.type;if(!o||!Vn(o))return"// Error: __yo_iso_extract requires an Iso type";let a=H(o,n),s=(_=e.$)==null?void 0:_.type;if(s&&((f=n.isoTypes)!=null&&f.has(a))){let d=n.isoTypes.get(a);d.optionTypeCName||(d.optionTypeCName=H(s,n))}let l=`__yo_iso_extract_${a}(${i})`,u=(p=e.$)==null?void 0:p.variableName;return u&&s?(n.emitter.emitLine(`${t}${H(s,n)} ${u} = ${l};`),u):l}function ly(e,t,n){var s;let r=e.args[0];if(!r)return"// Error: __yo_iso_dispose requires exactly 1 argument";let i=G(r,t,n),o=(s=r.$)==null?void 0:s.type;return!o||!Vn(o)?"// Error: __yo_iso_dispose requires an Iso type":`__yo_iso_dispose_${H(o,n)}(${i})`}function q_(e){var n;let t=(n=e.func.$)==null?void 0:n.value;return Y(t)&&Vn(t.value)&&e.args.length===1}function uy(e,t,n){var c;if(!q_(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=G(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})`}var cy=Z(()=>{Ne();Fe();Wt();yn()});function $o(e){return e===""||e==="break"||e==="continue"||e.startsWith("goto")||e.includes("return")}function bo(e,t,n){var r,i,o,a,s,l,u,c;if(S(e)&&E(e,R.begin)){let _=e.args,f=n,p=f.pendingDeferredDrops,d=((r=e.$)==null?void 0:r.deferredDropExpressions)??[];f.pendingDeferredDrops=[...d,...p??[]];let g=f.consumedVarPendingDrops,m=((i=e.$)==null?void 0:i.consumedVariableDropExpressions)??[];f.consumedVarPendingDrops=[...m,...g??[]];for(let v=0;v<_.length-1;v++){let T=_[v],$=G(T,t,n);if($&&n.emitter.emitLine(`${t}${$};`),Zt((o=T.$)==null?void 0:o.controlFlow))break}let h="";if(_.length>0){let v=_[_.length-1];if((a=v.$)!=null&&a.deferredDupExpressions&&v.$.deferredDupExpressions.length>0){if((s=v.$)!=null&&s.variableName){let $=v.$.variableName;v.$.variableName=void 0;let b=G(v,t,n);v.$.variableName=$;let w=H(v.$.type,n),C=Qe($,v.$.env);C!==b&&n.emitter.emitLine(`${t}${w} ${C} = ${b};`)}Jt(v,t,n);let T=v.$.deferredDupExpressions[0];S(T)&&((l=T.$)!=null&&l.variableName)?h=Qe(T.$.variableName,T.$.env):h=G(v,t,n)}else h=G(v,t,n)}return(u=e.$)!=null&&u.deferredDropExpressions&&Ln(e,t,n),f.pendingDeferredDrops=p,f.consumedVarPendingDrops=g,h}else return(c=e.$)!=null&&c.deferredDupExpressions&&Jt(e,t,n),G(e,t,n)}function fy(e,t,n){var g,m,h,v,T,$,b,w,C,k,A,N,x;if(!e.$)return'/* "match" expression is not evaluated */';let r=e.$.variableName,i=e.$.type,o=i&&We(i);if(!o&&r){let V=H(i,n);n.emitter.emitLine(`${t}${V} ${r};`)}let a=G(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 CC(e,t,n,a,s,r,o);let l,u;if(ot(s)?(u=s.childType,l=s.tag):pn(s)?(u=s,l="ref_semantics"):u=s,!Ze(u))return'// Error: "match" expression requires an enum type';if(!((m=n.types[u.id])==null?void 0:m.cName))return`// Error: "match" expression enum type ${u.typeName} has no C name`;let _=rr(u);if(_){let V=e.args.slice(1),I=null,D=null;for(let P of V)if(S(P)&&E(P,"=>",2)){if(!((v=(h=P.args[0])==null?void 0:h.$)!=null&&v.caseExecuted))continue;let O=P.args[0],J=P.args[1];if(O&&J&&S(O)&&E(O,"."))I={caseBody:J};else{let U=O.func;if(U&&S(U)&&E(U,".")){let W=U.args[0];if(W&&K(W)){let q=W.token.value;D={caseBody:J,variantName:q,casePattern:O}}}}}if(n.emitter.emitLine(`${t}if (${l&&l!=="ref_semantics"?"*":""}${a} != NULL) {`),D){let P;if(S(D.casePattern)&&D.casePattern.args.length>0){let W=D.casePattern.args[0];if(W&&K(W)){P=Ae(W.token.value);let q=_;n.emitter.emitLine(`${t} ${H(q,n)} ${P} = ${a};`)}}let O=n;P&&(O.inAsyncStateMachine||O.inEffectStateMachine)&&(O.localShadowedVariables||(O.localShadowedVariables=new Set),O.localShadowedVariables.add(P));let J=bo(D.caseBody,t+" ",n);P&&O.localShadowedVariables&&O.localShadowedVariables.delete(P);let U=$o(J);if(!o&&r&&!U){let W=J||a;n.emitter.emitLine(`${t} ${r} = ${W};`)}else J&&J!==""&&n.emitter.emitLine(`${t} ${J};`)}if(n.emitter.emitLine(`${t}} else {`),I){let P=bo(I.caseBody,t+" ",n),O=$o(P);!o&&r&&!O?n.emitter.emitLine(`${t} ${r} = ${P};`):P&&P!==""&&n.emitter.emitLine(`${t} ${P};`)}return n.emitter.emitLine(`${t}}`),o?"":r??""}if(ni(u)){n.emitter.emitLine(`${t}switch (${l&&l!=="ref_semantics"?"*":""}${a}) {`);let V=n.insideMatch;n.insideMatch=!0;let I=e.args.slice(1);for(let D=0;D<I.length;D++){let P=I[D];if(S(P)&&E(P,"=>",2)){if(!(($=(T=P.args[0])==null?void 0:T.$)!=null&&$.caseExecuted))continue;let O=P.args[0],J=P.args[1];if(O&&J&&K(O)&&O.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let U=bo(J,t+" ",n);!o&&r&&U&&!$o(U)?n.emitter.emitLine(`${t} ${r} = ${U};`):U&&n.emitter.emitLine(`${t} ${U};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(O&&J&&S(O)&&E(O,".",1)){let U=O.args[0].token.value,W=er(u,U,n);n.emitter.emitLine(`${t}case ${W}: {`);let q=bo(J,t+" ",n);!o&&r&&q&&!$o(q)?n.emitter.emitLine(`${t} ${r} = ${q};`):q&&n.emitter.emitLine(`${t} ${q};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}}return n.insideMatch=V,n.emitter.emitLine(`${t}}`),o?"":r??""}n.emitter.emitLine(`${t}switch (${l==="ref_semantics"||l?a+"->tag":"("+a+").tag"}) {`);let p=n.insideMatch;n.insideMatch=!0;let d=e.args.slice(1);for(let V=0;V<d.length;V++){let I=d[V];if(S(I)&&E(I,"=>",2)){if(!((w=(b=I.args[0])==null?void 0:b.$)!=null&&w.caseExecuted))continue;let D=I.args[0],P=I.args[1];if(D&&P&&K(D)&&D.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let O=bo(P,t+" ",n);!o&&r&&O&&!$o(O)?n.emitter.emitLine(`${t} ${r} = ${O};`):O&&n.emitter.emitLine(`${t} ${O};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(D&&P&&S(D)&&D.func.tag==="Atom"&&D.func.token.value==="."&&D.args.length>=1){let O=D.args[0].token.value,J=er(u,O,n);if(n.emitter.emitLine(`${t}case ${J}: {`),D.args.length>1){let W=u.variants.find(q=>q.name===O);if(W&&W.fields){let q=D.args.slice(1);if(q.some(ue=>S(ue)&&E(ue,":",2))){for(let ue of q)if(S(ue)&&E(ue,":",2)){let ye=ue.args[0],X=ue.args[1];if(!K(ye))continue;let re=ye.token.value,le=W.fields.find(Oe=>Oe.label===re);if(!le||We(le.type))continue;if(K(X)){let Oe=X.token.value;if(Oe!=="_"){let $e=Ae(Oe),ae=Ae(re),Le=H(le.type,n),se=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${Le} ${$e} = ${a}${se}data.${O}.${ae};`);let me=n;if((me!=null&&me.inAsyncStateMachine||me!=null&&me.inEffectStateMachine)&&me.stateMachineVariables){let he;if((C=X.$)!=null&&C.env){let Re=fe(X.$.env,Oe);Re.length>0&&(he=Re[Re.length-1].id)}if(he&&me.stateMachineVariables.has(he)){let Re=dr(he,"local",me.stateMachineFieldAliases);n.emitter.emitLine(`${t} sm->${Re} = ${$e};`)}}}}}}else for(let ue=0;ue<q.length&&ue<W.fields.length;ue++){let ye=q[ue],X=W.fields[ue];if(K(ye)&&X){if(We(X.type))continue;let re=ye.token.value;if(re!=="_"){let le=Ae(re),Oe=Ae(X.label),$e=H(X.type,n),ae=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${$e} ${le} = ${a}${ae}data.${O}.${Oe};`);let Le=n;if((Le!=null&&Le.inAsyncStateMachine||Le!=null&&Le.inEffectStateMachine)&&Le.stateMachineVariables){let se;if((k=ye.$)!=null&&k.env){let me=fe(ye.$.env,re);me.length>0&&(se=me[me.length-1].id)}se&&Le.stateMachineVariables.has(se)&&n.emitter.emitLine(`${t} sm->${dr(se,"local",Le.stateMachineFieldAliases)} = ${le};`)}}}}}}if(S(P)&&E(P,"=>",2)){let W=P.args[0];n.emitter.emitLine(`${t} ${H(s,n)} ${Ae(W.token.value)} = ${a};`),P=P.args[1]}let U=bo(P,t+" ",n);!o&&r&&U&&!$o(U)?n.emitter.emitLine(`${t} ${r} = ${U};`):U&&n.emitter.emitLine(`${t} ${U};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(D&&P&&S(D)&&S(D.func)&&D.func.func.tag==="Atom"&&D.func.func.token.value==="."&&D.func.args.length===1){let O=D.func.args[0].token.value,J=er(u,O,n),U=D.args;n.emitter.emitLine(`${t}case ${J}: {`);let W=u.variants.find(j=>j.name===O);if(W&&W.fields&&U.length>0)if(U.some(ue=>S(ue)&&E(ue,":",2))){for(let ue of U)if(S(ue)&&E(ue,":",2)){let ye=ue.args[0],X=ue.args[1];if(!K(ye))continue;let re=ye.token.value,le=W.fields.find(Oe=>Oe.label===re);if(!le)continue;if(K(X)){let Oe=X.token.value;if(Oe!=="_"){let $e=Ae(Oe);if(We(le.type))n.emitter.emitLine(`${t} // ${$e} is unit type (no value)`);else{let ae=Ae(re),Le=H(le.type,n),se=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${Le} ${$e} = ${a}${se}data.${O}.${ae};`);let me=n;if((me!=null&&me.inAsyncStateMachine||me!=null&&me.inEffectStateMachine)&&me.stateMachineVariables){let he;if((A=X.$)!=null&&A.env){let Re=fe(X.$.env,$e);Re.length>0&&(he=Re[Re.length-1].id)}he&&me.stateMachineVariables.has(he)&&n.emitter.emitLine(`${t} sm->${dr(he,"local",me.stateMachineFieldAliases)} = ${$e};`)}}}}}}else for(let ue=0;ue<Math.min(U.length,W.fields.length);ue++){let ye=U[ue],X=W.fields[ue];if(ye.tag==="Atom"&&X){let re=ye.token.value;if(re!=="_"){let le=Ae(re);if(We(X.type))n.emitter.emitLine(`${t} // ${le} is unit type (no value)`);else{let Oe=Ae(X.label),$e=H(X.type,n),ae=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${$e} ${le} = ${a}${ae}data.${O}.${Oe};`);let Le=n;if((Le!=null&&Le.inAsyncStateMachine||Le!=null&&Le.inEffectStateMachine)&&Le.stateMachineVariables){let se;if((N=ye.$)!=null&&N.env){let me=fe(ye.$.env,re);me.length>0&&(se=me[me.length-1].id)}se&&Le.stateMachineVariables.has(se)&&n.emitter.emitLine(`${t} sm->${dr(se,"local",Le.stateMachineFieldAliases)} = ${le};`)}}}}}if(S(P)&&E(P,"=>",2)){let j=P.args[0];n.emitter.emitLine(`${t} ${H(s,n)} ${Ae(j.token.value)} = ${a};`),P=P.args[1]}let q=bo(P,t+" ",n);!o&&r&&q&&!$o(q)?n.emitter.emitLine(`${t} ${r} = ${q};`):q&&n.emitter.emitLine(`${t} ${q};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}}return n.insideMatch=p,n.emitter.emitLine(`${t}}`),(x=e.$)!=null&&x.deferredDropExpressions&&Ln(e,t,n),o?"":r??""}function bC(e){return S(e)?E(e,"|",2):!1}function H_(e){if(!bC(e))return[e];let t=e,n=t.args[0],r=t.args[1];return[...H_(n),...H_(r)]}function _y(e){if(e!==void 0){if(Rt(e))return String(e.value);if(It(e))return e.value?"true":"false"}}function CC(e,t,n,r,i,o,a){var u,c,_,f,p;let s=n.insideMatch;n.insideMatch=!0,n.emitter.emitLine(`${t}switch (${r}) {`);let l=e.args.slice(1);for(let d=0;d<l.length;d++){let g=l[d];if(S(g)&&E(g,"=>",2)){if(!((c=(u=g.args[0])==null?void 0:u.$)!=null&&c.caseExecuted))continue;let m=g.args[0],h=g.args[1];if(!m||!h)continue;if(K(m)&&m.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let b=bo(h,t+" ",n);!a&&o&&b&&!$o(b)?n.emitter.emitLine(`${t} ${o} = ${b};`):b&&n.emitter.emitLine(`${t} ${b};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`);continue}let v=H_(m),T=(_=m.$)==null?void 0:_.primitivePatternValues;if(T&&T.length>0)for(let b of T){let w=_y(b);w!==void 0&&n.emitter.emitLine(`${t}case ${w}:`)}else for(let b of v){let w=(f=b.$)==null?void 0:f.value,C=_y(w);C!==void 0&&n.emitter.emitLine(`${t}case ${C}:`)}n.emitter.emitLine(`${t}{`);let $=bo(h,t+" ",n);!a&&o&&$&&!$o($)?n.emitter.emitLine(`${t} ${o} = ${$};`):$&&n.emitter.emitLine(`${t} ${$};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}return n.insideMatch=s,n.emitter.emitLine(`${t}}`),(p=e.$)!=null&&p.deferredDropExpressions&&Ln(e,t,n),a?"":o??""}var py=Z(()=>{mt();Te();Ne();Fe();Wt();kr();yn();zo()});function dy(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(Ue(a)&&s===void 0){let l=G(o,t,n),u=e.$.runtimeDestructurings;for(let c of u){let _=H(c.type,n),f=Ae(c.variableName),p=Ae(c.label);n.emitter.emitLine(`${t}${_} ${f} = ${l}.${p};`)}}}return""}var my=Z(()=>{Ne();Wt();yn()});function yy(e,t,n,r){if(!t.callType)return e;let i=An(t.callType);if(i.length===0)return e;let o=i.map(()=>"NULL").join(", "),s=`__yo_spawn_wrapper_${Lt(r)}`;return n.emitter.emitDeclarationLine(`
11083
+ `;let i=r.token.value,o=an(r.$.type,i,n);return n.emitter.emitLine(`${t}${o};`),""}var jm=Z(()=>{Te();Wt()});function Km(e,t,n){var r,i,o,a,s,l,u,c,_,f,p,d,g,m,h,v;if(e.$){let T=e.$.variableName,$=e.$.type,b=$&&We($),w=-1;for(let x=0;x<e.args.length;x++){let V=e.args[x];if(S(V)&&E(V,"=>",2)){let I=V.args[0];if(I&&!(It((r=I.$)==null?void 0:r.value)&&I.$.value.value===!1)){w=x;break}}}let C=!1;if(w>=0){let x=e.args[w];if(x&&S(x)&&E(x,"=>",2)){let V=x.args[0];V&&It((i=V.$)==null?void 0:i.value)&&V.$.value.value===!0&&(C=!0)}}if(!b&&T&&!C){let x=H($,n);n.emitter.emitLine(`${t}${x} ${T};`)}if(C&&w>=0){let x=e.args[w];if(x&&S(x)&&E(x,"=>",2)){let V=x.args[1];if(V){let I=G(V,t,n);T&&!b&&(I&&I!==""&&!I.startsWith("goto")&&I!=="continue"&&I!=="break"&&!I.includes("return")?n.emitter.emitLine(`${t}${T} = ${I};`):I&&(I.startsWith("goto")||I==="continue"||I==="break"||I.includes("return"))&&n.emitter.emitLine(`${t}${I};`))}}return b?"":T??""}let k=t,A=0,N=!1;for(let x=0;x<e.args.length;x++){let V=e.args[x];if(S(V)&&E(V,"=>",2)){let I=V.args[0],D=V.args[1];if(I&&D){if(It((o=I.$)==null?void 0:o.value)&&I.$.value.value===!1)continue;if(N){if(n.emitter.emitLine(`${k}else {`),A++,k+=" ",!(It((s=I.$)==null?void 0:s.value)&&I.$.value.value===!0)){let W=G(I,k,n);n.emitter.emitLine(`${k}if (${W}) {`)}}else{if(It((a=I.$)==null?void 0:a.value)&&I.$.value.value===!0)n.emitter.emitLine(`${k}{`);else{let U=G(I,k,n);n.emitter.emitLine(`${k}if (${U}) {`)}N=!0}let P=It((l=I.$)==null?void 0:l.value)&&I.$.value.value===!0,O=N&&P?k:k+" ";if(S(D)&&E(D,R.begin)){let U=D.args,W=n,q=W.pendingDeferredDrops,j=((u=D.$)==null?void 0:u.deferredDropExpressions)??[];W.pendingDeferredDrops=[...j,...q??[]];let ue=W.consumedVarPendingDrops,ye=((c=D.$)==null?void 0:c.consumedVariableDropExpressions)??[];W.consumedVarPendingDrops=[...ye,...ue??[]];for(let X=0;X<U.length-1;X++){let re=U[X],le=G(re,O,n);if(le&&re.$&&!tn(re.$.env.modulePath,le)&&n.emitter.emitLine(`${O}${le};`),Zt((_=re.$)==null?void 0:_.controlFlow))break}if(U.length>0){let X=U[U.length-1];if((f=X.$)!=null&&f.deferredDupExpressions){if((p=X.$)!=null&&p.variableName){let le=X.$.variableName;X.$.variableName=void 0;let Oe=G(X,O,n);X.$.variableName=le;let $e=H(X.$.type,n),ae=Qe(le,X.$.env);ae!==Oe&&n.emitter.emitLine(`${O}${$e} ${ae} = ${Oe};`)}Jt(X,O,n);let re=X.$.deferredDupExpressions[0];if(S(re)&&((d=re.$)!=null&&d.variableName)){let le=Qe(re.$.variableName,re.$.env);T&&!b&&n.emitter.emitLine(`${O}${T} = ${le};`)}else{let le=G(X,O,n);le&&T&&!b&&n.emitter.emitLine(`${O}${T} = ${le};`)}}else{let re=G(X,O,n);re&&(re==="continue"||re==="break"||re.startsWith("goto")||S(X)&&E(X,R.return)||re.includes("return")?n.emitter.emitLine(`${O}${re};`):T&&!b&&n.emitter.emitLine(`${O}${T} = ${re};`))}}(g=D.$)!=null&&g.deferredDropExpressions&&Ln(D,O,n),W.pendingDeferredDrops=q,W.consumedVarPendingDrops=ue}else if((m=D.$)!=null&&m.deferredDupExpressions&&D.$.deferredDupExpressions.length>0){if((h=D.$)!=null&&h.variableName){let W=D.$.variableName;D.$.variableName=void 0;let q=G(D,O,n);D.$.variableName=W;let j=H(D.$.type,n),ue=Qe(W,D.$.env);ue!==q&&n.emitter.emitLine(`${O}${j} ${ue} = ${q};`)}Jt(D,O,n);let U=D.$.deferredDupExpressions[0];if(S(U)&&((v=U.$)!=null&&v.variableName)){let W=Qe(U.$.variableName,U.$.env);T&&!b&&n.emitter.emitLine(`${O}${T} = ${W};`)}else{let W=G(D,O,n);W&&T&&!b&&n.emitter.emitLine(`${O}${T} = ${W};`)}}else{let U=G(D,O,n);U==="continue"||U==="break"||U.startsWith("goto")||S(D)&&E(D,R.return)||U.includes("return")?n.emitter.emitLine(`${O}${U};`):U===""||!U||T&&(b||n.emitter.emitLine(`${O}${T} = ${U};`))}!(N&&P)&&n.emitter.emitLine(`${k}}`)}}}for(let x=0;x<A;x++)k=k.slice(0,-2),n.emitter.emitLine(`${k}}`);return b?"":T??""}return'/* "cond" expression is not evaluated */'}var Xm=Z(()=>{Te();Ne();Cn();Fe();Wt();kr();yn()});function Qm(e,t,n){let r=e.args[0];return G(r,t,n)}var Zm=Z(()=>{yn()});function Jm(e,t,n){var k,A,N,x,V;let r=e.args[0],i=(k=r.$)==null?void 0:k.type;if(!i||!dt(i))throw new Error("downcast codegen: expected Dyn type as first argument");let o=G(r,t,n),s=(A=e.args[1].$)==null?void 0:A.value;if(!s||!Y(s))throw new Error("downcast codegen: expected TypeValue as second argument");let l=s.value,u=H(l,n),c=((N=n.types[l.id])==null?void 0:N.cName)||u,_=`__yo_typeid_${Le(c)}`;n.typeIdStatics||(n.typeIdStatics=new Map),n.typeIdStatics.has(l.id)||(n.typeIdStatics.set(l.id,_),n.emitter.emitDeclarationLine(`static const char ${_} = 0;`)),n.cIncludes.add("<stdint.h>");let f=`${o}.vtable->__yo_type_id == (uintptr_t)&${_}`,p,d=!1,g="",m="";for(let[,I]of n.dynImpls){if(I.dynType.id!==i.id)continue;if((B(I.concreteType)&&I.concreteType.resolvedConcreteType?I.concreteType.resolvedConcreteType:I.concreteType).id===l.id&&Yr(I.dataType)){d=!0,g=((x=n.types[I.dataType.id])==null?void 0:x.cName)||`unknown_box_${I.dataType.id}`,m=Le(I.dataType.fields[0].label);break}}if(d){let I=`((${g}*)${o}.data)->${m}`,D=ri(l,n);if(pn(l))p=`((${u})__yo_incr_rc((void*)${I}))`;else if(D)p=`${D}((${u})${I})`;else{let P=!1,O=l;for(;Gr(O)&&O.fields.length===1;)O=O.fields[0].type;P=pn(O),P?p=`((${u})__yo_incr_rc((void*)${I}))`:p=`((${u})${I})`}}else p=`((${u})__yo_incr_rc((void*)${o}.data))`;let h=(V=e.$)==null?void 0:V.type;if(!h||!Ze(h))throw new Error("downcast codegen: expected Option enum as result type");if(rr(h))return`((${f}) ? ${p} : NULL)`;let T=H(h,n),$=er(h,"Some",n),b=er(h,"None",n),w=`(${T}){ .tag = ${$}, .data = { .Some = { .value = ${p} } } }`,C=`(${T}){ .tag = ${b} }`;return`((${f}) ? ${w} : ${C})`}var ey=Z(()=>{Ne();Fe();Wt();yn();kr()});function ty(e,t,n){var h,v,T,$,b,w,C,k,A;if(!((h=e.$)!=null&&h.dynCallTraitValues)||e.$.dynCallTraitValues.length===0)return"/* Error: dyn() call missing trait values */";let r=((T=(v=e.$)==null?void 0:v.runtimeArgExprsInOrder)==null?void 0:T[0])??e.args[0];if(!r)return"/* Error: dyn() requires a value argument */";let i=e.$.type;if(!dt(i))return"/* Error: dyn() result type is not DynType */";let o=($=r.$)==null?void 0:$.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(!pn(o)&&!Yr(o))return"/* Error: dyn() requires an object type (use box() for value types) */";let s=Yr(o)?o.fields[0].type:o,l=B(s)&&s.resolvedConcreteType?s.resolvedConcreteType:s,u=((b=n.types[i.id])==null?void 0:b.cName)||`__yo_dyn_${i.id}`,_=`${(()=>{var I,D;let N=(I=n.types[l.id])==null?void 0:I.cName;if(N)return N;let x=pr(l);return(x?(D=n.types[x.id])==null?void 0:D.cName:void 0)||`unknown_${l.id}`})()}_${u}`;n.dynImpls.set(_,{dynType:i,concreteType:s,dataType:o,traitValues:a});let f=G(r,t,n);if((w=r.$)!=null&&w.variableName&&f!==r.$.variableName){let N=an(r.$.type,r.$.variableName,n);n.emitter.emitLine(`${t}${N} = ${f};`),f=r.$.variableName}if((C=r.$)!=null&&C.deferredDupExpressions&&r.$.deferredDupExpressions.length>0){Jt(r,t,n);let N=r.$.deferredDupExpressions[0];S(N)&&((k=N.$)!=null&&k.variableName)&&(f=Qe(N.$.variableName,N.$.env))}let p=(A=e.$)==null?void 0:A.variableName;if(!p)return"/* Error: dyn() expression missing temp variable name */";let d=n,g;if(d.inAsyncStateMachine&&d.stateMachineVariables){for(let[,N]of d.stateMachineVariables)if(N.kind==="local"&&N.id===p){g=`sm->${dr(N.id,"local",d.stateMachineFieldAliases)}`;break}}let m=`__yo_vtable_${_}`;return g?(n.emitter.emitLine(`${t}${g} = (${u}){`),n.emitter.emitLine(`${t} .data = ${f},`),n.emitter.emitLine(`${t} .vtable = &${m}`),n.emitter.emitLine(`${t}};`),g):(n.emitter.emitLine(`${t}${u} ${p} = {`),n.emitter.emitLine(`${t} .data = ${f},`),n.emitter.emitLine(`${t} .vtable = &${m}`),n.emitter.emitLine(`${t}};`),p)}var ny=Z(()=>{qt();Te();Ne();Wt();kr();yn();zo()});function ry(e,t,n){return e.args.length!==0?"// Error: __yo_gc_collect requires exactly 0 arguments":"__yo_gc_collect()"}var iy=Z(()=>{});function oy(e,t,n){var a,s,l,u,c,_,f,p,d,g,m,h,v,T,$,b,w,C,k;let r=e.args[0],i=e.args[1],o=n;if(S(r)&&E(r,R.comptime,1)||S(r)&&E(r,R.given,1))return"";if((o.inAsyncStateMachine||o.inEffectStateMachine)&&K(r)&&K(i)){let A=r.token.value,N=i.token.value,x=o.stateMachineVariables&&Array.from(o.stateMachineVariables.values()).some(I=>I.name===A),V=o.stateMachineVariables&&Array.from(o.stateMachineVariables.values()).some(I=>I.name===N);if(A===N&&(x||V))return""}if((a=e.$)!=null&&a.runtimeDestructurings){let A=e.$.runtimeDestructurings,N=G(i,t,n),x=(s=i.$)==null?void 0:s.type;return A.forEach(({label:V,type:I,variableName:D})=>{if(D==="_")return;let P=Le(D,I.isExtern==="c"),O=an(I,P,n);if(x&&Ue(x)&&x.isNewtype&&x.fields.length===1){let W=x.fields[0];if(W&&W.label===V){n.emitter.emitLine(`${t}${O} = ${N}; // Destructuring ${V} (newtype)`);return}}let J=V.match(/^\d+$/)?`_${V}`:Le(V,I.isExtern==="c");if(x&&gt(x)&&!V.match(/^\d+$/)){let W=x.fields.findIndex(q=>q.label===V);J=W>=0?`_${W}`:J}let U=x&&pn(x)?"->":".";n.emitter.emitLine(`${t}${O} = ${N}${U}${J}; // Destructuring ${V}`)}),""}if(K(r)){let A=((l=r.$)==null?void 0:l.variableName)??r.token.value;if(!((u=r.$)!=null&&u.type))return`// Error: No type information for variable ${A}
11084
+ `;if((c=r.$)!=null&&c.env){let V=fe(r.$.env,A);if(V.length>0&&V[V.length-1].isCompileTimeOnly||V.length>0&&V[V.length-1].isModuleLevel)return""}let N=!1,x;if((o.inAsyncStateMachine||o.inEffectStateMachine)&&o.stateMachineVariables&&((_=r.$)!=null&&_.env)){let V=fe(r.$.env,A);if(V.length>0){let I=V[V.length-1],D=I.isOwningTheSameRcValueAs?I.isOwningTheSameRcValueAs.id:I.id;o.stateMachineVariables.has(D)&&(N=!0,x=D)}}if(ut(r.$.type))if(S(i)&&E(i,R.array)){let V=G(i,t,n);if(N&&x){let I=dr(x,"local",o.stateMachineFieldAliases);n.emitter.emitLine(`${t}sm->${I} = ${V};`)}else if(!We(r.$.type)){let I=an(r.$.type,A,n);n.emitter.emitLine(`${t}${I} = ${V};`)}}else{let V;if((f=i.$)!=null&&f.variableName){let I=Qe(i.$.variableName,i.$.env),D=G(i,t,n);if(!N){let P=an(i.$.type,I,n);I!==D&&n.emitter.emitLine(`${t}${P} = ${D};`)}V=I}else V=G(i,t,n);if(N&&x){let I=dr(x,"local",o.stateMachineFieldAliases);n.emitter.emitLine(`${t}sm->${I} = ${V};`)}else if(!We(r.$.type)){let I=an(r.$.type,A,n);n.emitter.emitLine(`${t}${I} = ${V};`)}}else{let V,I=S(i)&&((p=i.$)==null?void 0:p.closureFunctionValue)&&((d=i.$)==null?void 0:d.type)&&tr(i.$.type),D=S(i)&&Xn(i);if((g=i.$)!=null&&g.variableName){let P=Qe(i.$.variableName,i.$.env),O=Qe(A,r.$.env);if(P===O){if(V=G(i,t,n),!I&&!D&&((m=i.$)!=null&&m.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){Jt(i,t,o);let J=i.$.deferredDupExpressions[0];S(J)&&((h=J.$)!=null&&h.variableName)&&(V=Qe(J.$.variableName,J.$.env))}}else if(K(i)&&P===Qe(i.token.value,i.$.env)){if(V=G(i,t,n),!I&&!D&&((v=i.$)!=null&&v.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){Jt(i,t,o);let J=i.$.deferredDupExpressions[0];S(J)&&((T=J.$)!=null&&T.variableName)&&(V=Qe(J.$.variableName,J.$.env))}}else if(K(i)&&o.currentClosureCaptures&&o.currentClosureCaptures.includes(i.token.value)&&(($=i.$)!=null&&$.env)&&o.currentClosureCaptureFrameLevel!==void 0&&ao(i.token.value,i.$.env,o.currentClosureCaptureFrameLevel)){let J=o.currentClosureType;if(J&&J.isClosure){let U=Object.values(o.types).find(W=>W.type===J);U?V=`((${`${U.cName}_capture`}*)closure_context->data)->${Qe(i.token.value,i.$.env)}`:V=`closure_context->${Qe(i.token.value,i.$.env)}`}else V=`closure_context->${Qe(i.token.value,i.$.env)}`}else{let J=G(i,t,n);if(J.trim()!==P){let U=i.$.convertedRuntimeType||i.$.type,W=an(U,P,n);n.emitter.emitLine(`${t}${W} = ${J};`)}if(!I&&!D&&((b=i.$)!=null&&b.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){Jt(i,t,o);let U=i.$.deferredDupExpressions[0];S(U)&&((w=U.$)!=null&&w.variableName)?V=Qe(U.$.variableName,U.$.env):V=P}else V=P}}else if(V=G(i,t,n),!I&&!D&&((C=i.$)!=null&&C.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){Jt(i,t,o);let P=i.$.deferredDupExpressions[0];S(P)&&((k=P.$)!=null&&k.variableName)&&(V=Qe(P.$.variableName,P.$.env))}if(Vt(r.$.type)){let P=r.$.type;if(N&&x){let O=dr(x,"local",o.stateMachineFieldAliases);n.emitter.emitLine(`${t}sm->${O} = ${V};`)}else if(!We(P)){let O=an(P,A,n);n.emitter.emitLine(`${t}${O} = ${V};`)}}else if(N&&x){let P=dr(x,"local",o.stateMachineFieldAliases);n.emitter.emitLine(`${t}sm->${P} = ${V};`)}else{let P=tn(i.$.env.modulePath,V.trim()),O;if(P&&n.tempVarAsyncStructNames){let J=n.tempVarAsyncStructNames.get(V.trim());J?O=`${J}*`:O=H(r.$.type,n)}else O=H(r.$.type,n);We(r.$.type)||n.emitter.emitLine(`${t}${O} ${Qe(A,r.$.env)} = ${V};`)}}return""}}var ay=Z(()=>{mt();fi();qt();Te();Ne();Cn();Wt();hl();kr();yn();zo()});function $l(e,t,n,r,i=" "){var o,a,s,l,u,c,_,f,p,d;if(F.__yo_op_add.includes(e))return`((${t[0]}) + (${t[1]}))`;if(F.__yo_op_sub.includes(e))return`((${t[0]}) - (${t[1]}))`;if(F.__yo_op_mul.includes(e))return`((${t[0]}) * (${t[1]}))`;if(F.__yo_op_div.includes(e))return`((${t[0]}) / (${t[1]}))`;if(F.__yo_op_mod.includes(e))return`((${t[0]}) % (${t[1]}))`;if(F.__yo_op_neg.includes(e))return`(-(${t[0]}))`;if(F.__yo_op_eq.includes(e))return`((${t[0]}) == (${t[1]}))`;if(F.__yo_op_neq.includes(e))return`((${t[0]}) != (${t[1]}))`;if(F.__yo_op_lt.includes(e))return`((${t[0]}) < (${t[1]}))`;if(F.__yo_op_lte.includes(e))return`((${t[0]}) <= (${t[1]}))`;if(F.__yo_op_gt.includes(e))return`((${t[0]}) > (${t[1]}))`;if(F.__yo_op_gte.includes(e))return`((${t[0]}) >= (${t[1]}))`;if(F.__yo_op_not.includes(e))return`(!(${t[0]}))`;if(F.__yo_op_bit_and.includes(e))return`((${t[0]}) & (${t[1]}))`;if(F.__yo_op_bit_or.includes(e))return`((${t[0]}) | (${t[1]}))`;if(F.__yo_op_bit_xor.includes(e))return`((${t[0]}) ^ (${t[1]}))`;if(F.__yo_op_bit_complement.includes(e))return`(~(${t[0]}))`;if(F.__yo_op_bit_left_shift.includes(e))return`((${t[0]}) << (${t[1]}))`;if(F.__yo_op_bit_right_shift.includes(e))return`((${t[0]}) >> (${t[1]}))`;if(F.__yo_noop.includes(e))return"";if(F.__yo_return_self.includes(e))return`(*${t[0]})`;if(F.__yo_ms_sleep.includes(e))return ln(r.targetInfo)?`Sleep(${t[0]})`:`usleep((${t[0]}) * 1000)`;if(F.__yo_decr_rc.includes(e))return`__yo_decr_rc((void*)(${t[0]}))`;if(F.__yo_as.includes(e)&&((o=n.$)!=null&&o.type)){let g=H(n.$.type,r),m=(s=(a=n.args[0])==null?void 0:a.$)==null?void 0:s.type;return m&&Ze(m)&&!ni(m)?`((${g})((${t[0]}).tag))`:`((${g})(${t[0]}))`}else{if(F.__yo_ptr_add.includes(e))return`(${t[0]} + ${t[1]})`;if(F.__yo_ptr_sub.includes(e))return`(${t[0]} - ${t[1]})`;if(F.__yo_ptr_diff.includes(e))return`(${t[0]} - ${t[1]})`;if(F.__yo_ptr_eq.includes(e))return`(${t[0]} == ${t[1]})`;if(F.__yo_ptr_neq.includes(e))return`(${t[0]} != ${t[1]})`;if(F.__yo_ptr_lt.includes(e))return`(${t[0]} < ${t[1]})`;if(F.__yo_ptr_lte.includes(e))return`(${t[0]} <= ${t[1]})`;if(F.__yo_ptr_gt.includes(e))return`(${t[0]} > ${t[1]})`;if(F.__yo_ptr_gte.includes(e))return`(${t[0]} >= ${t[1]})`;if(F.__yo_slice_len.includes(e))return`(${t[0]}.length)`;if(F.__yo_slice_ptr.includes(e))return`(${t[0]}.data)`;if(F.__yo_slice_new.includes(e)&&((l=n.$)!=null&&l.type))return`(${H(n.$.type,r)}){ .data = ${t[0]}, .length = ${t[1]} }`;if(F.__yo_getrandom.includes(e))return`getrandom(${t[0]}, ${t[1]}, ${t[2]})`;if(F.__yo_arc4random_buf.includes(e))return`(arc4random_buf(${t[0]}, ${t[1]}), (void)0)`;if(F.__yo_bcrypt_gen_random.includes(e))return`(int32_t)BCryptGenRandom(NULL, ${t[0]}, ${t[1]}, BCRYPT_USE_SYSTEM_PREFERRED_RNG)`;if(F.__yo_getentropy.includes(e))return`getentropy(${t[0]}, ${t[1]})`;if(F.__yo_maybe_uninit_new.includes(e)&&((u=n.$)!=null&&u.type)){let g=H(n.$.type,r),m=`__yo_uninit_${$C++}`;return r.emitter.emitLine(`${i}${g} ${m};`),m}else return F.__yo_maybe_uninit_as_ptr.includes(e)&&((c=n.$)!=null&&c.type)?`((${H(n.$.type,r)})(${t[0]}))`:F.__yo_maybe_uninit_assume_init.includes(e)?`(${t[0]})`:F.__yo_array_index.includes(e)?`(&((${t[0]})->data[${t[1]}]))`:F.__yo_slice_index.includes(e)?`(&((${t[0]})->data[${t[1]}]))`:F.__yo_array_index_range.includes(e)&&((_=n.$)!=null&&_.type)&&ot(n.$.type)?`(&(${H(n.$.type.childType,r)}){ .data = &((${t[0]})->data[(${t[1]}).start]), .length = (${t[1]}).end - (${t[1]}).start })`:F.__yo_array_index_range_inclusive.includes(e)&&((f=n.$)!=null&&f.type)&&ot(n.$.type)?`(&(${H(n.$.type.childType,r)}){ .data = &((${t[0]})->data[(${t[1]}).start]), .length = (${t[1]}).end - (${t[1]}).start + 1 })`:F.__yo_slice_index_range.includes(e)&&((p=n.$)!=null&&p.type)&&ot(n.$.type)?`(&(${H(n.$.type.childType,r)}){ .data = &((${t[0]})->data[(${t[1]}).start]), .length = (${t[1]}).end - (${t[1]}).start })`:F.__yo_slice_index_range_inclusive.includes(e)&&((d=n.$)!=null&&d.type)&&ot(n.$.type)?`(&(${H(n.$.type.childType,r)}){ .data = &((${t[0]})->data[(${t[1]}).start]), .length = (${t[1]}).end - (${t[1]}).start + 1 })`:`/* Unhandled operator ${e} */`}}var $C,Y_=Z(()=>{Te();Ne();Sr();Wt();$C=0});function sy(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=G(r,t,n),o=(c=r.$)==null?void 0:c.type;if(!o||!Vn(o))return"// Error: __yo_iso_extract requires an Iso type";let a=H(o,n),s=(_=e.$)==null?void 0:_.type;if(s&&((f=n.isoTypes)!=null&&f.has(a))){let d=n.isoTypes.get(a);d.optionTypeCName||(d.optionTypeCName=H(s,n))}let l=`__yo_iso_extract_${a}(${i})`,u=(p=e.$)==null?void 0:p.variableName;return u&&s?(n.emitter.emitLine(`${t}${H(s,n)} ${u} = ${l};`),u):l}function ly(e,t,n){var s;let r=e.args[0];if(!r)return"// Error: __yo_iso_dispose requires exactly 1 argument";let i=G(r,t,n),o=(s=r.$)==null?void 0:s.type;return!o||!Vn(o)?"// Error: __yo_iso_dispose requires an Iso type":`__yo_iso_dispose_${H(o,n)}(${i})`}function q_(e){var n;let t=(n=e.func.$)==null?void 0:n.value;return Y(t)&&Vn(t.value)&&e.args.length===1}function uy(e,t,n){var c;if(!q_(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=G(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})`}var cy=Z(()=>{Ne();Fe();Wt();yn()});function $o(e){return e===""||e==="break"||e==="continue"||e.startsWith("goto")||e.includes("return")}function bo(e,t,n){var r,i,o,a,s,l,u,c;if(S(e)&&E(e,R.begin)){let _=e.args,f=n,p=f.pendingDeferredDrops,d=((r=e.$)==null?void 0:r.deferredDropExpressions)??[];f.pendingDeferredDrops=[...d,...p??[]];let g=f.consumedVarPendingDrops,m=((i=e.$)==null?void 0:i.consumedVariableDropExpressions)??[];f.consumedVarPendingDrops=[...m,...g??[]];for(let v=0;v<_.length-1;v++){let T=_[v],$=G(T,t,n);if($&&n.emitter.emitLine(`${t}${$};`),Zt((o=T.$)==null?void 0:o.controlFlow))break}let h="";if(_.length>0){let v=_[_.length-1];if((a=v.$)!=null&&a.deferredDupExpressions&&v.$.deferredDupExpressions.length>0){if((s=v.$)!=null&&s.variableName){let $=v.$.variableName;v.$.variableName=void 0;let b=G(v,t,n);v.$.variableName=$;let w=H(v.$.type,n),C=Qe($,v.$.env);C!==b&&n.emitter.emitLine(`${t}${w} ${C} = ${b};`)}Jt(v,t,n);let T=v.$.deferredDupExpressions[0];S(T)&&((l=T.$)!=null&&l.variableName)?h=Qe(T.$.variableName,T.$.env):h=G(v,t,n)}else h=G(v,t,n)}return(u=e.$)!=null&&u.deferredDropExpressions&&Ln(e,t,n),f.pendingDeferredDrops=p,f.consumedVarPendingDrops=g,h}else return(c=e.$)!=null&&c.deferredDupExpressions&&Jt(e,t,n),G(e,t,n)}function fy(e,t,n){var g,m,h,v,T,$,b,w,C,k,A,N,x;if(!e.$)return'/* "match" expression is not evaluated */';let r=e.$.variableName,i=e.$.type,o=i&&We(i);if(!o&&r){let V=H(i,n);n.emitter.emitLine(`${t}${V} ${r};`)}let a=G(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 CC(e,t,n,a,s,r,o);let l,u;if(ot(s)?(u=s.childType,l=s.tag):pn(s)?(u=s,l="ref_semantics"):u=s,!Ze(u))return'// Error: "match" expression requires an enum type';if(!((m=n.types[u.id])==null?void 0:m.cName))return`// Error: "match" expression enum type ${u.typeName} has no C name`;let _=rr(u);if(_){let V=e.args.slice(1),I=null,D=null;for(let P of V)if(S(P)&&E(P,"=>",2)){if(!((v=(h=P.args[0])==null?void 0:h.$)!=null&&v.caseExecuted))continue;let O=P.args[0],J=P.args[1];if(O&&J&&S(O)&&E(O,"."))I={caseBody:J};else{let U=O.func;if(U&&S(U)&&E(U,".")){let W=U.args[0];if(W&&K(W)){let q=W.token.value;D={caseBody:J,variantName:q,casePattern:O}}}}}if(n.emitter.emitLine(`${t}if (${l&&l!=="ref_semantics"?"*":""}${a} != NULL) {`),D){let P;if(S(D.casePattern)&&D.casePattern.args.length>0){let W=D.casePattern.args[0];if(W&&K(W)){P=Le(W.token.value);let q=_;n.emitter.emitLine(`${t} ${H(q,n)} ${P} = ${a};`)}}let O=n;P&&(O.inAsyncStateMachine||O.inEffectStateMachine)&&(O.localShadowedVariables||(O.localShadowedVariables=new Set),O.localShadowedVariables.add(P));let J=bo(D.caseBody,t+" ",n);P&&O.localShadowedVariables&&O.localShadowedVariables.delete(P);let U=$o(J);if(!o&&r&&!U){let W=J||a;n.emitter.emitLine(`${t} ${r} = ${W};`)}else J&&J!==""&&n.emitter.emitLine(`${t} ${J};`)}if(n.emitter.emitLine(`${t}} else {`),I){let P=bo(I.caseBody,t+" ",n),O=$o(P);!o&&r&&!O?n.emitter.emitLine(`${t} ${r} = ${P};`):P&&P!==""&&n.emitter.emitLine(`${t} ${P};`)}return n.emitter.emitLine(`${t}}`),o?"":r??""}if(ni(u)){n.emitter.emitLine(`${t}switch (${l&&l!=="ref_semantics"?"*":""}${a}) {`);let V=n.insideMatch;n.insideMatch=!0;let I=e.args.slice(1);for(let D=0;D<I.length;D++){let P=I[D];if(S(P)&&E(P,"=>",2)){if(!(($=(T=P.args[0])==null?void 0:T.$)!=null&&$.caseExecuted))continue;let O=P.args[0],J=P.args[1];if(O&&J&&K(O)&&O.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let U=bo(J,t+" ",n);!o&&r&&U&&!$o(U)?n.emitter.emitLine(`${t} ${r} = ${U};`):U&&n.emitter.emitLine(`${t} ${U};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(O&&J&&S(O)&&E(O,".",1)){let U=O.args[0].token.value,W=er(u,U,n);n.emitter.emitLine(`${t}case ${W}: {`);let q=bo(J,t+" ",n);!o&&r&&q&&!$o(q)?n.emitter.emitLine(`${t} ${r} = ${q};`):q&&n.emitter.emitLine(`${t} ${q};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}}return n.insideMatch=V,n.emitter.emitLine(`${t}}`),o?"":r??""}n.emitter.emitLine(`${t}switch (${l==="ref_semantics"||l?a+"->tag":"("+a+").tag"}) {`);let p=n.insideMatch;n.insideMatch=!0;let d=e.args.slice(1);for(let V=0;V<d.length;V++){let I=d[V];if(S(I)&&E(I,"=>",2)){if(!((w=(b=I.args[0])==null?void 0:b.$)!=null&&w.caseExecuted))continue;let D=I.args[0],P=I.args[1];if(D&&P&&K(D)&&D.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let O=bo(P,t+" ",n);!o&&r&&O&&!$o(O)?n.emitter.emitLine(`${t} ${r} = ${O};`):O&&n.emitter.emitLine(`${t} ${O};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(D&&P&&S(D)&&D.func.tag==="Atom"&&D.func.token.value==="."&&D.args.length>=1){let O=D.args[0].token.value,J=er(u,O,n);if(n.emitter.emitLine(`${t}case ${J}: {`),D.args.length>1){let W=u.variants.find(q=>q.name===O);if(W&&W.fields){let q=D.args.slice(1);if(q.some(ue=>S(ue)&&E(ue,":",2))){for(let ue of q)if(S(ue)&&E(ue,":",2)){let ye=ue.args[0],X=ue.args[1];if(!K(ye))continue;let re=ye.token.value,le=W.fields.find(Oe=>Oe.label===re);if(!le||We(le.type))continue;if(K(X)){let Oe=X.token.value;if(Oe!=="_"){let $e=Le(Oe),ae=Le(re),Ae=H(le.type,n),se=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${Ae} ${$e} = ${a}${se}data.${O}.${ae};`);let me=n;if((me!=null&&me.inAsyncStateMachine||me!=null&&me.inEffectStateMachine)&&me.stateMachineVariables){let he;if((C=X.$)!=null&&C.env){let Re=fe(X.$.env,Oe);Re.length>0&&(he=Re[Re.length-1].id)}if(he&&me.stateMachineVariables.has(he)){let Re=dr(he,"local",me.stateMachineFieldAliases);n.emitter.emitLine(`${t} sm->${Re} = ${$e};`)}}}}}}else for(let ue=0;ue<q.length&&ue<W.fields.length;ue++){let ye=q[ue],X=W.fields[ue];if(K(ye)&&X){if(We(X.type))continue;let re=ye.token.value;if(re!=="_"){let le=Le(re),Oe=Le(X.label),$e=H(X.type,n),ae=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${$e} ${le} = ${a}${ae}data.${O}.${Oe};`);let Ae=n;if((Ae!=null&&Ae.inAsyncStateMachine||Ae!=null&&Ae.inEffectStateMachine)&&Ae.stateMachineVariables){let se;if((k=ye.$)!=null&&k.env){let me=fe(ye.$.env,re);me.length>0&&(se=me[me.length-1].id)}se&&Ae.stateMachineVariables.has(se)&&n.emitter.emitLine(`${t} sm->${dr(se,"local",Ae.stateMachineFieldAliases)} = ${le};`)}}}}}}if(S(P)&&E(P,"=>",2)){let W=P.args[0];n.emitter.emitLine(`${t} ${H(s,n)} ${Le(W.token.value)} = ${a};`),P=P.args[1]}let U=bo(P,t+" ",n);!o&&r&&U&&!$o(U)?n.emitter.emitLine(`${t} ${r} = ${U};`):U&&n.emitter.emitLine(`${t} ${U};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(D&&P&&S(D)&&S(D.func)&&D.func.func.tag==="Atom"&&D.func.func.token.value==="."&&D.func.args.length===1){let O=D.func.args[0].token.value,J=er(u,O,n),U=D.args;n.emitter.emitLine(`${t}case ${J}: {`);let W=u.variants.find(j=>j.name===O);if(W&&W.fields&&U.length>0)if(U.some(ue=>S(ue)&&E(ue,":",2))){for(let ue of U)if(S(ue)&&E(ue,":",2)){let ye=ue.args[0],X=ue.args[1];if(!K(ye))continue;let re=ye.token.value,le=W.fields.find(Oe=>Oe.label===re);if(!le)continue;if(K(X)){let Oe=X.token.value;if(Oe!=="_"){let $e=Le(Oe);if(We(le.type))n.emitter.emitLine(`${t} // ${$e} is unit type (no value)`);else{let ae=Le(re),Ae=H(le.type,n),se=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${Ae} ${$e} = ${a}${se}data.${O}.${ae};`);let me=n;if((me!=null&&me.inAsyncStateMachine||me!=null&&me.inEffectStateMachine)&&me.stateMachineVariables){let he;if((A=X.$)!=null&&A.env){let Re=fe(X.$.env,$e);Re.length>0&&(he=Re[Re.length-1].id)}he&&me.stateMachineVariables.has(he)&&n.emitter.emitLine(`${t} sm->${dr(he,"local",me.stateMachineFieldAliases)} = ${$e};`)}}}}}}else for(let ue=0;ue<Math.min(U.length,W.fields.length);ue++){let ye=U[ue],X=W.fields[ue];if(ye.tag==="Atom"&&X){let re=ye.token.value;if(re!=="_"){let le=Le(re);if(We(X.type))n.emitter.emitLine(`${t} // ${le} is unit type (no value)`);else{let Oe=Le(X.label),$e=H(X.type,n),ae=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${$e} ${le} = ${a}${ae}data.${O}.${Oe};`);let Ae=n;if((Ae!=null&&Ae.inAsyncStateMachine||Ae!=null&&Ae.inEffectStateMachine)&&Ae.stateMachineVariables){let se;if((N=ye.$)!=null&&N.env){let me=fe(ye.$.env,re);me.length>0&&(se=me[me.length-1].id)}se&&Ae.stateMachineVariables.has(se)&&n.emitter.emitLine(`${t} sm->${dr(se,"local",Ae.stateMachineFieldAliases)} = ${le};`)}}}}}if(S(P)&&E(P,"=>",2)){let j=P.args[0];n.emitter.emitLine(`${t} ${H(s,n)} ${Le(j.token.value)} = ${a};`),P=P.args[1]}let q=bo(P,t+" ",n);!o&&r&&q&&!$o(q)?n.emitter.emitLine(`${t} ${r} = ${q};`):q&&n.emitter.emitLine(`${t} ${q};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}}return n.insideMatch=p,n.emitter.emitLine(`${t}}`),(x=e.$)!=null&&x.deferredDropExpressions&&Ln(e,t,n),o?"":r??""}function bC(e){return S(e)?E(e,"|",2):!1}function H_(e){if(!bC(e))return[e];let t=e,n=t.args[0],r=t.args[1];return[...H_(n),...H_(r)]}function _y(e){if(e!==void 0){if(Rt(e))return String(e.value);if(It(e))return e.value?"true":"false"}}function CC(e,t,n,r,i,o,a){var u,c,_,f,p;let s=n.insideMatch;n.insideMatch=!0,n.emitter.emitLine(`${t}switch (${r}) {`);let l=e.args.slice(1);for(let d=0;d<l.length;d++){let g=l[d];if(S(g)&&E(g,"=>",2)){if(!((c=(u=g.args[0])==null?void 0:u.$)!=null&&c.caseExecuted))continue;let m=g.args[0],h=g.args[1];if(!m||!h)continue;if(K(m)&&m.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let b=bo(h,t+" ",n);!a&&o&&b&&!$o(b)?n.emitter.emitLine(`${t} ${o} = ${b};`):b&&n.emitter.emitLine(`${t} ${b};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`);continue}let v=H_(m),T=(_=m.$)==null?void 0:_.primitivePatternValues;if(T&&T.length>0)for(let b of T){let w=_y(b);w!==void 0&&n.emitter.emitLine(`${t}case ${w}:`)}else for(let b of v){let w=(f=b.$)==null?void 0:f.value,C=_y(w);C!==void 0&&n.emitter.emitLine(`${t}case ${C}:`)}n.emitter.emitLine(`${t}{`);let $=bo(h,t+" ",n);!a&&o&&$&&!$o($)?n.emitter.emitLine(`${t} ${o} = ${$};`):$&&n.emitter.emitLine(`${t} ${$};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}return n.insideMatch=s,n.emitter.emitLine(`${t}}`),(p=e.$)!=null&&p.deferredDropExpressions&&Ln(e,t,n),a?"":o??""}var py=Z(()=>{mt();Te();Ne();Fe();Wt();kr();yn();zo()});function dy(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(Ue(a)&&s===void 0){let l=G(o,t,n),u=e.$.runtimeDestructurings;for(let c of u){let _=H(c.type,n),f=Le(c.variableName),p=Le(c.label);n.emitter.emitLine(`${t}${_} ${f} = ${l}.${p};`)}}}return""}var my=Z(()=>{Ne();Wt();yn()});function yy(e,t,n,r){if(!t.callType)return e;let i=An(t.callType);if(i.length===0)return e;let o=i.map(()=>"NULL").join(", "),s=`__yo_spawn_wrapper_${Lt(r)}`;return n.emitter.emitDeclarationLine(`
11085
11085
  // Spawn wrapper: bridges __yo_thread_fn to closure with evidence params
11086
11086
  static void ${s}(void* closure) {
11087
11087
  ${e}(closure, ${o});
11088
11088
  }
11089
- `),s}function gy(e,t,n){var m,h,v,T,$,b;let r=(m=e.$)==null?void 0:m.runtimeArgExprsInOrder;if(!r||r.length!==1)return"/* Error: __yo_thread_spawn requires exactly 1 argument */";let i=r[0],o=(h=i.$)==null?void 0:h.type;if(!o)return"/* Error: __yo_thread_spawn argument has no type */";let a,s;if(B(o)){let w=o;w.resolvedConcreteType&&(a=w.resolvedConcreteType.id,s=w.resolvedConcreteType)}else Ue(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),_=yy(u,l,n,((v=e.$)==null?void 0:v.env.modulePath)??""),f=G(i,t,n),p=(T=i.$)!=null&&T.variableName?Qe(i.$.variableName,i.$.env):f,d=`_thread_closure_data_${Lt((($=e.$)==null?void 0:$.env.modulePath)??"")}`;n.emitter.emitLine(`${t}${c}* ${d} = (${c}*)__yo_malloc(sizeof(${c}));`),n.emitter.emitLine(`${t}*${d} = ${p};`);let g=(b=e.$)==null?void 0:b.variableName;return g?(n.emitter.emitLine(`${t}__yo_thread_t ${g} = __yo_thread_spawn(${_}, ${d});`),g):`__yo_thread_spawn(${_}, ${d})`}function hy(e,t,n){var g,m,h,v,T;let r=(g=e.$)==null?void 0:g.runtimeArgExprsInOrder;if(!r||r.length!==1)return"/* Error: __yo_worker_spawn requires exactly 1 argument */";let i=r[0],o=(m=i.$)==null?void 0:m.type;if(!o)return"/* Error: __yo_worker_spawn argument has no type */";let a,s;if(B(o)){let $=o;$.resolvedConcreteType&&(a=$.resolvedConcreteType.id,s=$.resolvedConcreteType)}else Ue(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),_=yy(u,l,n,((h=e.$)==null?void 0:h.env.modulePath)??""),f=G(i,t,n),p=(v=i.$)!=null&&v.variableName?Qe(i.$.variableName,i.$.env):f,d=`_worker_closure_data_${Lt(((T=e.$)==null?void 0:T.env.modulePath)??"")}`;return n.emitter.emitLine(`${t}${c}* ${d} = (${c}*)__yo_malloc(sizeof(${c}));`),n.emitter.emitLine(`${t}*${d} = ${p};`),n.emitter.emitLine(`${t}__yo_worker_spawn(${_}, ${d});`),""}function vy(e,t,n){let r=e.args[0];return r?`__yo_thread_set_maximum_threads(${G(r,t,n)})`:"// Error: __yo_thread_set_maximum_threads requires exactly 1 argument"}var j_=Z(()=>{Ne();Cn();Wt();Ea();yn()});function Ty(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 Hr(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&&ft(i.type))return;let o=`var_${i.id}`,a=Ae(e);n.emitter.emitLine(`${t}sm->${o} = ${a};`)}}function by(e,t,n){var o,a,s,l,u,c,_,f,p,d,g,m,h,v,T,$,b,w,C,k,A,N,x,V,I,D,P,O,J,U,W,q,j,ue,ye,X,re,le,Oe,$e,ae,Le,se,me,he,Re,_t,bt,Mt,en,lt,kt,kn,Ot,je,Be,tt,Bt,jn,Xt,Sn,te,ve,_e,Ce,xe,Pe,st,Je,ie,ee;if(((o=e.$)==null?void 0:o.value)!==void 0&&!Me(e.$.value))return(a=e.$)!=null&&a.deferredDropExpressions&&Ln(e,t,n),We(e.$.type)?"":lr(e.$.value,n,e);let r=(s=e.func.$)==null?void 0:s.value,i=((l=e.func.$)==null?void 0:l.type)??(we(r)?r.specializedType??r.type:void 0);if(ne(i)){let Q=(u=e.$)==null?void 0:u.runtimeArgExprsInOrder;if(Q){let oe=!1;if(S(e.func)&&E(e.func,".",2)){let be=e.func.args[0],Ee=(c=be==null?void 0:be.$)==null?void 0:c.type;Ee&&dt(Ee)&&(oe=!0)}let Ge=Q.map((be,Ee)=>{var ze,nt,He,Xe,Se,vt,Ie,pt,Tt;if((ze=be.$)!=null&&ze.variableName&&((nt=be.$)!=null&&nt.type)){let At=n,jt=At.currentClosureCaptures&&At.currentClosureCaptures.includes(be.$.variableName)&&K(be)&&be.$.env&&At.currentClosureCaptureFrameLevel!==void 0&&ao(be.token.value,be.$.env,At.currentClosureCaptureFrameLevel),Gt=G(be,t,n),sn=!1;if(K(be)&&be.$.env&&be.$.variableName){let hr=fe(be.$.env,be.$.variableName);hr.length>0&&hr[hr.length-1].isCompileTimeOnly&&(sn=!0)}let bn=(At.inAsyncStateMachine||At.inEffectStateMachine)&&Gt.startsWith("sm->"),mr=!1;if(Gt&&Gt!==be.$.variableName&&!jt&&!bn&&!sn){let hr=Qe(be.$.variableName,be.$.env);if(Gt!==hr){let Ar=be.$.convertedRuntimeType||be.$.type,lo=an(Ar,be.$.variableName,n);n.emitter.emitLine(`${t}${lo} = ${Gt};`),mr=!0,Hr(be.$.variableName,t,n)}}let Fi=mr?be.$.variableName:Gt;if((He=be.$)!=null&&He.deferredDupExpressions&&be.$.deferredDupExpressions.length>0){let hr=new Set;(Xe=be.$)!=null&&Xe.variableName&&hr.add(Qe(be.$.variableName,be.$.env)),Gt&&hr.add(Gt),K(be)&&hr.add(Qe(be.token.value,be.$.env));let Ar=be.$.deferredDupExpressions.find(lo=>{var Zo;let Fo=Zu(lo);return Fo?hr.has(Qe(Fo,(Zo=lo.$)==null?void 0:Zo.env)):!1});Ar&&(Jt(be,t,At),S(Ar)&&((Se=Ar.$)!=null&&Se.variableName)&&(Fi=Qe(Ar.$.variableName,Ar.$.env)))}if(oe&&Ee===0){if(S(e.func)&&E(e.func,".",2)){let Ar=e.func.args[0],lo=(vt=Ar==null?void 0:Ar.$)==null?void 0:vt.type,Fo=e.func.args[1];if(K(Fo)&&dt(lo)){let Zo=Fo.token.value;if(lo.trait.fields.find(zc=>zc.label===Zo))return bn?Gt:Ae(Fi,be.$.type.isExtern==="c")}}let hr=(Ie=be.$)==null?void 0:Ie.type;return hr&&ot(hr)?bn?`${Gt}->data`:`${Ae(Fi,be.$.type.isExtern==="c")}->data`:bn?`(${Gt}).data`:`(${Ae(Fi,be.$.type.isExtern==="c")}).data`}else return jt||bn||sn?Gt:Ae(Fi,be.$.type.isExtern==="c")}else if(oe&&Ee===0){let At=G(be,t,n);if(S(e.func)&&E(e.func,".",2)){let Gt=e.func.args[0],sn=(pt=Gt==null?void 0:Gt.$)==null?void 0:pt.type,bn=e.func.args[1];if(K(bn)&&dt(sn)){let mr=bn.token.value;if(sn.trait.fields.find(hr=>hr.label===mr))return At}}let jt=(Tt=be.$)==null?void 0:Tt.type;return jt&&ot(jt)?`(${At})->data`:`(${At}).data`}else return G(be,t,n)}),ge=Ge.join(", ");if(i.isExtern==="yo"&&i.externName){let be=i.externName;return va.includes(be)?$l(be,Ge,e,n,t):be==="__yo_thread_spawn"?gy(e,t,n):be==="__yo_worker_spawn"?hy(e,t,n):We(i.return.type)?(n.emitter.emitLine(`${t}${be}(${ge});`),(_=e.$)!=null&&_.deferredDropExpressions&&Ln(e,t,n),""):`${be}(${ge})`}{let be=n;if((f=be.currentEvidenceParams)!=null&&f.size){let Ee=(p=e.func.token)==null?void 0:p.value,ze;if(Ee==="."&&S(e.func)&&E(e.func,".",2)){let nt=e.func.args[1];nt&&K(nt)&&(Ee=nt.token.value);let He=e.func.args[0];if(He&&K(He))ze=He.token.value;else if(He&&S(He)&&E(He,".",2)){let Xe=He.args[0];Xe&&K(Xe)&&(ze=Xe.token.value)}}if(Ee&&Ee!=="."){for(let nt of be.currentEvidenceParams.values())if(nt.fieldLabel===Ee||nt.implicitLabel===Ee||nt.fieldPath[nt.fieldPath.length-1]===Ee){if(ze&&ze!==nt.implicitLabel)continue;return $y(nt.cParamName,i,Ge,Q,e,t,be,nt)}}}}if(we(r)){let be=ro(r);if(be)return $l(be,Ge,e,n,t);let Ee=r.specializedType??r.type,ze=n;if(ze.currentEvidenceParams&&r.isModuleEffectMember){let He,Xe=((d=e.func.$)==null?void 0:d.env)??((g=e.$)==null?void 0:g.env);if(Xe)for(let Se of ze.currentEvidenceParams.values()){let vt=fe(Xe,Se.implicitLabel),Ie=vt[vt.length-1],pt=(m=Ie==null?void 0:Ie.value)==null?void 0:m[0];if(pt&&xt(pt)){let Tt=pt,At=!0;for(let jt=0;jt<Se.fieldPath.length-1;jt++){let Gt=Se.fieldPath[jt],sn=Tt.type.fields.findIndex(bn=>bn.label===Gt);if(sn>=0&&Tt.fields[sn]&&xt(Tt.fields[sn]))Tt=Tt.fields[sn];else{At=!1;break}}if(At){let jt=Se.fieldPath[Se.fieldPath.length-1],Gt=Tt.type.fields.findIndex(sn=>sn.label===jt);if(Gt>=0){let sn=Tt.fields[Gt];if(sn&&we(sn)&&sn.funcId===r.funcId){He=Se;break}}}}}if(He){let Se=He.cParamName;return $y(Se,Ee,Ge,Q,e,t,ze,He)}}let nt=(h=n.functions[r.funcId])==null?void 0:h.cName;if(nt){let He=r.specializedType??r.type,Xe=An(He);if(Xe.length===0&&r.specializedType){let Ie=An(r.type);Ie.length>0&&Ie.some(pt=>pt.fieldFunctionType.forallParameters&&pt.fieldFunctionType.forallParameters.length>0)&&(Xe=Ie)}if(Xe.length>0){let{args:Ie,isHandlerInstallation:pt}=K_(Xe,r,e,n);if(Ie.length>0){let Tt=ge?`${ge}, ${Ie.join(", ")}`:Ie.join(", ");return X_(nt,Tt,Ee,e,Q,t,n,pt)}}let Se=r.isControlFunction||r.isModuleEffectMember||(($=(T=(v=r.body)==null?void 0:v.$)==null?void 0:T.effectAnalysis)==null?void 0:$.hasEffects),vt=!1;if(Se){if(r.isControlFunction||r.isModuleEffectMember){let Ie=((w=(b=e.func)==null?void 0:b.$)==null?void 0:w.env)??((C=e.$)==null?void 0:C.env);if(Ie){let pt=_l(Ie,Tt=>{var At;return Tt.isImplicit===!0&&we((At=Tt.value)==null?void 0:At[0])&&Tt.value[0].funcId===r.funcId});pt>=0&&pt>Ie.functionDeclarationFrameLevel&&((k=Ie.frames[pt])!=null&&k.isBeginBlockFrame)&&(vt=!0)}}else if(r.specializedType){let Ie=An(r.type);if(Ie.length>0){let pt=((N=(A=e.func)==null?void 0:A.$)==null?void 0:N.env)??((x=e.$)==null?void 0:x.env);if(pt)for(let Tt of Ie){let At=_l(pt,jt=>jt.isImplicit===!0&&(jt.name===Tt.implicitLabel||jt.name===Tt.fieldLabel));if(At>=0&&At>pt.functionDeclarationFrameLevel&&((V=pt.frames[At])!=null&&V.isBeginBlockFrame)){vt=!0;break}}}}}if(We(Ee.return.type))return n.emitter.emitLine(`${t}${nt}(${ge});`),(I=e.$)!=null&&I.deferredDropExpressions&&Ln(e,t,n),Se&&Ey(t,n,vt,e),"";{let Ie=(D=e.$)==null?void 0:D.variableName;if(Ie){let pt=((P=r.specializedType)==null?void 0:P.return.type)??Ee.return.type,Tt=(O=e.$)==null?void 0:O.type,At=Tt&&ft(Tt),jt=pt&&ft(pt),Gt;if(At&&jt){let bn=r.body;if(bn&&E(bn,"begin")){let mr=bn.args;if(mr.length>0){let Fi=mr[mr.length-1];Xn(Fi)&&(bn=Fi)}}if(bn&&Xn(bn)&&((J=bn.$)!=null&&J.asyncStateMachineStructName)){let mr=bn.$.asyncStateMachineStructName;Gt=`${mr}*`,n.tempVarAsyncStructNames||(n.tempVarAsyncStructNames=new Map),n.tempVarAsyncStructNames.set(Ie,mr)}else Tt&&B(Tt)&&Tt.resolvedConcreteType?Gt=H(Tt,n):Gt=H(pt,n)}else Gt=H(pt??Tt,n);let sn=n;return sn.declaredTempVars||(sn.declaredTempVars=new Set),sn.declaredTempVars.has(Ie)||(sn.declaredTempVars.add(Ie),n.emitter.emitLine(`${t}${Gt} ${Ie} = ${nt}(${ge});`)),Hr(Ie,t,n),(U=e.$)!=null&&U.deferredDropExpressions&&Ln(e,t,n),Se&&Ey(t,n,vt,e),Ie}else return`// Error: Regular function call returns ${H(((W=r.specializedType)==null?void 0:W.return.type)??Ee.return.type,n)} but no temp variable assigned`}}}else{let be=n.externFunctions[i.id];if(be){let Ee=be.cName;return(q=e.$)!=null&&q.deferredDropExpressions&&Ln(e,t,n),`${Ee}(${ge})`}else{let Ee=G(e.func,t,n);if(r&&ne(r.type)){let Ie=An(r.type);if(Ie.length>0){let{args:pt,isHandlerInstallation:Tt}=K_(Ie,r,e,n);if(pt.length>0){let At=ge?`${ge}, ${pt.join(", ")}`:pt.join(", ");return X_(Ee,At,i,e,Q,t,n,Tt)}}}let ze=((j=e.$)==null?void 0:j.type)??i.return.type,nt=H(ze,n),He=i.parameters.filter(Ie=>!Ie.isCompileTimeOnly).map(Ie=>H(Ie.type,n)),Xe=`((${nt} (*)(${He.join(", ")}))${Ee})`,Se=n,vt=Ee.includes("__capture.")&&!!Se.inAsyncStateMachine;if(vt&&n.emitter.emitLine(`${t}__yo_effect_escaped = 0;`),We(i.return.type)||We(ze)){if(n.emitter.emitLine(`${t}${Xe}(${ge});`),(ue=e.$)!=null&&ue.deferredDropExpressions&&Ln(e,t,n),vt){if(n.emitter.emitLine(`${t}if (__yo_effect_escaped) {`),Q){for(let Ie of Q)if((ye=Ie.$)!=null&&ye.variableName&&((X=Ie.$)!=null&&X.type)&&ht(Ie.$.type)){let pt=Ty(Ae(Ie.$.variableName),n),Tt=To(pt,Ie.$.type,n);Tt&&(n.emitter.emitLine(`${t} ${Tt};`),n.emitter.emitLine(`${t} memset(&${pt}, 0, sizeof(${pt}));`))}}ai({emitter:n.emitter,indent:t+" ",resultCode:void 0,debugLabel:void 0}),n.emitter.emitLine(`${t}}`)}return""}else{let Ie=(re=e.$)==null?void 0:re.variableName;if(Ie){let pt=i.return.type,Tt=(le=e.$)==null?void 0:le.type,At=Tt&&pt&&ft(Tt)&&ft(pt)?pt:Tt??pt,jt=n;if(jt.declaredTempVars||(jt.declaredTempVars=new Set),jt.declaredTempVars.has(Ie)||(jt.declaredTempVars.add(Ie),n.emitter.emitLine(`${t}${H(At,n)} ${Ie} = ${Xe}(${ge});`)),Hr(Ie,t,n),(Oe=e.$)!=null&&Oe.deferredDropExpressions&&Ln(e,t,n),vt){if(n.emitter.emitLine(`${t}if (__yo_effect_escaped) {`),Q){for(let Gt of Q)if(($e=Gt.$)!=null&&$e.variableName&&((ae=Gt.$)!=null&&ae.type)&&ht(Gt.$.type)){let sn=Ty(Ae(Gt.$.variableName),n),bn=To(sn,Gt.$.type,n);bn&&(n.emitter.emitLine(`${t} ${bn};`),n.emitter.emitLine(`${t} memset(&${sn}, 0, sizeof(${sn}));`))}}ai({emitter:n.emitter,indent:t+" ",resultCode:void 0,debugLabel:void 0}),n.emitter.emitLine(`${t}}`)}return Ie}else return`// Error: Function parameter call returns ${H(i.return.type,n)} but no temp variable assigned`}}}}}else if(i&&tr(i)){let Q=i,oe=pr(Q),Ge=dt(Q);{let ge=oe.isFn.callType,be=(Le=e.$)==null?void 0:Le.runtimeArgExprsInOrder;if(be){let Ee=n;for(let Se of be)if((se=Se.$)!=null&&se.variableName&&((me=Se.$)!=null&&me.type)){let vt=Ee.currentClosureCaptures&&Ee.currentClosureCaptures.includes(Se.$.variableName)&&K(Se)&&Se.$.env&&Ee.currentClosureCaptureFrameLevel!==void 0&&ao(Se.token.value,Se.$.env,Ee.currentClosureCaptureFrameLevel),Ie=G(Se,t,n),pt=!1;if(K(Se)&&Se.$.env&&Se.$.variableName){let At=fe(Se.$.env,Se.$.variableName);At.length>0&&At[At.length-1].isCompileTimeOnly&&(pt=!0)}let Tt=(Ee.inAsyncStateMachine||Ee.inEffectStateMachine)&&Ie.startsWith("sm->");if(Ie&&Ie!==Se.$.variableName&&!vt&&!Tt&&!pt){let At=Se.$.convertedRuntimeType||Se.$.type,jt=an(At,Se.$.variableName,n);n.emitter.emitLine(`${t}${jt} = ${Ie};`),Hr(Se.$.variableName,t,n)}}let ze=G(e.func,t,n),nt=be.map(Se=>{var vt,Ie,pt,Tt;if((vt=Se.$)!=null&&vt.variableName&&((Ie=Se.$)!=null&&Ie.type)){if(Ee.currentClosureCaptures&&Ee.currentClosureCaptures.includes(Se.$.variableName)&&K(Se)&&Se.$.env&&Ee.currentClosureCaptureFrameLevel!==void 0&&ao(Se.token.value,Se.$.env,Ee.currentClosureCaptureFrameLevel))return G(Se,t,n);{let jt=Qe(Se.$.variableName,Se.$.env),Gt=(Ee.inAsyncStateMachine||Ee.inEffectStateMachine)&&jt.startsWith("sm->"),sn=jt;if((pt=Se.$)!=null&&pt.deferredDupExpressions&&Se.$.deferredDupExpressions.length>0){Jt(Se,t,Ee);let bn=Se.$.deferredDupExpressions[0];S(bn)&&((Tt=bn.$)!=null&&Tt.variableName)&&(sn=Qe(bn.$.variableName,bn.$.env))}return Gt?jt:sn}}else return G(Se,t,n)}),He;if(Ge){let Se=[`(${ze}).data`,...nt];He=`(${ze}).vtable->call(${Se.join(", ")})`}else{let Se;if(B(Q)){let Ie=Q;Ie.resolvedConcreteType&&(Se=Ie.resolvedConcreteType.id)}let vt=Se?n.implClosureCallMap.get(Se):void 0;if(vt){let Ie=An(ge);if(Ie.length>0){let{args:Tt,isHandlerInstallation:At}=K_(Ie,{},e,Ee);if(Tt.length>0){let jt=[`&(${ze})`,...nt,...Tt];return X_(vt.functionCName,jt.join(", "),ge,e,be,t,Ee,At)}}let pt=[`&(${ze})`,...nt];He=`${vt.functionCName}(${pt.join(", ")})`}else{let Ie=[`(${ze}).data`,...nt];He=`(${ze}).call(${Ie.join(", ")})`}}let Xe=ge.return.type;if(We(Xe))return n.emitter.emitLine(`${t}${He};`),(he=e.$)!=null&&he.deferredDropExpressions&&Ln(e,t,n),"";{let Se=(Re=e.$)==null?void 0:Re.variableName;return Se?(n.emitter.emitLine(`${t}${H(Xe,n)} ${Se} = ${He};`),Hr(Se,t,n),(_t=e.$)!=null&&_t.deferredDropExpressions&&Ln(e,t,n),Se):`// Error: Closure call returns ${H(Xe,n)} but no temp variable assigned`}}else return"// Error: No runtime args found for closure call"}}else if(Y(r))if(Ue(r.value)){let Q=r.value,oe=(bt=e.$)==null?void 0:bt.runtimeArgExprsInOrder,Ge=(Mt=n.types[Q.id])==null?void 0:Mt.cName,ge=Q.fields.map(Ee=>Ee.label),be=(en=e.$)==null?void 0:en.variableName;if(oe&&Ge&&ge.length===oe.length){if(Q.isNewtype&&Q.fields.length===1){let Ee=oe[0],ze=G(Ee,t,n),nt=ze;if((lt=Ee.$)!=null&&lt.deferredDupExpressions&&Ee.$.deferredDupExpressions.length>0){let Xe=n;if((kt=Ee.$)!=null&&kt.variableName&&((kn=Ee.$)!=null&&kn.type)){let vt=Qe(Ee.$.variableName,Ee.$.env);if(ze!==vt){let Ie=Ee.$.type,pt=H(Ie,n);n.emitter.emitLine(`${t}${pt} ${vt} = ${ze};`)}}Jt(Ee,t,Xe);let Se=Ee.$.deferredDupExpressions[0];S(Se)&&((Ot=Se.$)!=null&&Ot.variableName)&&(nt=Qe(Se.$.variableName,Se.$.env))}let He=`((${Ge})(${nt}))`;if(be&&((je=e.$)!=null&&je.type)){let Xe=an(e.$.type,be,n);return n.emitter.emitLine(`${t}${Xe} = ${He};`),Hr(be,t,n),be}else return He}if(Q.isReferenceSemantics){let Ee=n,ze=oe.map(Xe=>{var vt,Ie,pt,Tt;let Se=G(Xe,t,n);if((vt=Xe.$)!=null&&vt.deferredDupExpressions&&Xe.$.deferredDupExpressions.length>0){if((Ie=Xe.$)!=null&&Ie.variableName&&((pt=Xe.$)!=null&&pt.type)){let jt=Qe(Xe.$.variableName,Xe.$.env);if(Se!==jt){let Gt=Xe.$.type,sn=H(Gt,n);n.emitter.emitLine(`${t}${sn} ${jt} = ${Se};`)}}Jt(Xe,t,Ee);let At=Xe.$.deferredDupExpressions[0];if(S(At)&&((Tt=At.$)!=null&&Tt.variableName))return Qe(At.$.variableName,At.$.env)}return Se}).join(", "),He=`${`__yo_new_${Ge}`}(${ze})`;if(be&&((Be=e.$)!=null&&Be.type)){let Xe=an(e.$.type,be,n);return n.emitter.emitLine(`${t}${Xe} = ${He};`),Hr(be,t,n),be}else return He}else{let Ee=n,ze=oe.map((He,Xe)=>{var pt,Tt,At,jt;let Se=G(He,t,n),vt=gt(Q)?`_${Xe}`:Ae(ge[Xe],Q.isExtern==="c"),Ie=Se;if((pt=He.$)!=null&&pt.deferredDupExpressions&&He.$.deferredDupExpressions.length>0){if((Tt=He.$)!=null&&Tt.variableName&&((At=He.$)!=null&&At.type)){let sn=Qe(He.$.variableName,He.$.env),bn=He.$.type,mr=H(bn,n);Se!==sn&&n.emitter.emitLine(`${t}${mr} ${sn} = ${Se};`)}Jt(He,t,Ee);let Gt=He.$.deferredDupExpressions[0];S(Gt)&&((jt=Gt.$)!=null&&jt.variableName)&&(Ie=Qe(Gt.$.variableName,Gt.$.env))}return`.${vt} = `+Ie}).join(", "),nt=`(${Ge}){ ${ze} }`;if(be&&((tt=e.$)!=null&&tt.type)){let He=an(e.$.type,be,n);return n.emitter.emitLine(`${t}${He} = ${nt};`),Hr(be,t,n),be}else return nt}}}else{if(tr(r.value))return"// Error: Closure construction should have been handled by closureFunctionValue check at top of generateFuncCall";if(Kt(r.value)){let Q=(Bt=e.$)==null?void 0:Bt.variableName,oe=e.args[0];if(oe&&S(oe)&&E(oe,":",2)){let Ge=oe.args[0],ge=oe.args[1],be=(jn=n.types[r.value.id])==null?void 0:jn.cName;if(be&&K(Ge)&&ge){let Ee=n,ze=Ge.token.value,nt=Qe(ze,(Xt=Ge.$)==null?void 0:Xt.env),Xe=G(ge,t,n);if((Sn=ge.$)!=null&&Sn.deferredDupExpressions&&ge.$.deferredDupExpressions.length>0){Jt(ge,t,Ee);let vt=ge.$.deferredDupExpressions[0];S(vt)&&((te=vt.$)!=null&&te.variableName)&&(Xe=Qe(vt.$.variableName,vt.$.env))}let Se=`(${be}){ .${nt} = ${Xe} }`;if(Q&&((ve=e.$)!=null&&ve.type)){let vt=an(e.$.type,Q,n);return n.emitter.emitLine(`${t}${vt} = ${Se};`),Hr(Q,t,n),Q}else return Se}}}else if(Ze(r.value)){let Q=r.value,oe=(_e=e.$)==null?void 0:_e.runtimeArgExprsInOrder,Ge=(Ce=n.types[Q.id])==null?void 0:Ce.cName,ge=(xe=e.$)==null?void 0:xe.variableName;if(Q.selectedVariantName&&oe&&Ge){if(rr(Q)){let He=Q.selectedVariantName,Xe=Q.variants.find(Se=>Se.name===He);if(Xe){if(!Xe.fields||Xe.fields.length===0){let Se="NULL";if(ge&&((Pe=e.$)!=null&&Pe.type)){let vt=an(e.$.type,ge,n);return n.emitter.emitLine(`${t}${vt} = ${Se};`),Hr(ge,t,n),ge}else return Se}else if(Xe.fields.length===1){let Se=G(oe[0],t,n);if(ge&&((st=e.$)!=null&&st.type)){let vt=an(e.$.type,ge,n);return n.emitter.emitLine(`${t}${vt} = ${Se};`),Hr(ge,t,n),ge}else return Se}}}if(ni(Q)){let He=Q.selectedVariantName,Xe=er(Q,He,n);if(ge&&((Je=e.$)!=null&&Je.type)){let Se=an(e.$.type,ge,n);return n.emitter.emitLine(`${t}${Se} = ${Xe};`),Hr(ge,t,n),ge}else return Xe}let ze=Q.selectedVariantName,nt=Q.variants.find(He=>He.name===ze);if(nt){let He=((ie=nt.fields)==null?void 0:ie.filter(Ie=>!We(Ie.type)))||[],Xe=n,Se=oe.map((Ie,pt)=>{var Tt,At,jt,Gt,sn;if(nt.fields){let bn=nt.fields[pt];if(bn&&!We(bn.type)){let mr=G(Ie,t,n),Fi=Qe(bn.label,(Tt=Ie.$)==null?void 0:Tt.env),hr=mr;if((At=Ie.$)!=null&&At.variableName&&((jt=Ie.$)!=null&&jt.type)){let Ar=Xe.currentClosureCaptures&&Xe.currentClosureCaptures.includes(Ie.$.variableName)&&K(Ie)&&Ie.$.env&&Xe.currentClosureCaptureFrameLevel!==void 0&&ao(Ie.token.value,Ie.$.env,Xe.currentClosureCaptureFrameLevel),lo=(Xe.inAsyncStateMachine||Xe.inEffectStateMachine)&&mr.startsWith("sm->"),Fo=!1;if(K(Ie)&&Ie.$.env&&Ie.$.variableName){let Ia=fe(Ie.$.env,Ie.$.variableName);Ia.length>0&&Ia[Ia.length-1].isCompileTimeOnly&&(Fo=!0)}let Zo=!1;if(mr&&mr!==Ie.$.variableName&&!Ar&&!lo&&!Fo){let Ia=Qe(Ie.$.variableName,Ie.$.env);if(mr!==Ia){let zc=an(Ie.$.type,Ie.$.variableName,n);n.emitter.emitLine(`${t}${zc} = ${mr};`),Zo=!0,Hr(Ie.$.variableName,t,n)}}Zo&&(hr=Qe(Ie.$.variableName,Ie.$.env))}if((Gt=Ie.$)!=null&&Gt.deferredDupExpressions&&Ie.$.deferredDupExpressions.length>0){Jt(Ie,t,Xe);let Ar=Ie.$.deferredDupExpressions[0];S(Ar)&&((sn=Ar.$)!=null&&sn.variableName)&&(hr=Qe(Ar.$.variableName,Ar.$.env))}return`.${Fi} = `+hr}return""}else return""}).filter(Ie=>Ie).join(", "),vt=He.length>0?`(${Ge}){ .tag = ${er(Q,ze,n)}, .data = { .${ze} = { ${Se} } } }`:`(${Ge}){ .tag = ${er(Q,ze,n)} }`;if(ge&&((ee=e.$)!=null&&ee.type)){let Ie=an(e.$.type,ge,n);return n.emitter.emitLine(`${t}${Ie} = ${vt};`),Hr(ge,t,n),ge}else return vt}}}}else if(ut(i)){let Q=e.args[0];if(Q&&S(Q)&&(E(Q,"..")||E(Q,"..="))){let ge=E(Q,"..="),be=G(e.func,t,n),Ee=G(Q.args[0],t,n),ze=G(Q.args[1],t,n),nt=`Slice_${Ae(H(i.childType,n))}`;return n.sliceStructTypes.has(nt)||n.sliceStructTypes.set(nt,{childType:H(i.childType,n)}),ge?`(${nt}){ .data = &${be}.data[${Ee}], .length = (${ze}) - (${Ee}) + 1 }`:`(${nt}){ .data = &${be}.data[${Ee}], .length = (${ze}) - (${Ee}) }`}let oe=G(e.func,t,n),Ge=G(Q,t,n);return`${oe}.data[${Ge}]`}else if(Vt(i)){let Q=e.args[0];if(Q&&S(Q)&&(E(Q,"..")||E(Q,"..="))){let ge=E(Q,"..="),be=G(e.func,t,n),Ee=G(Q.args[0],t,n),ze=G(Q.args[1],t,n),nt=`Slice_${Ae(H(i.childType,n))}`;return n.sliceStructTypes.has(nt)||n.sliceStructTypes.set(nt,{childType:H(i.childType,n)}),ge?`(${nt}){ .data = &${be}.data[${Ee}], .length = (${ze}) - (${Ee}) + 1 }`:`(${nt}){ .data = &${be}.data[${Ee}], .length = (${ze}) - (${Ee}) }`}let oe=G(e.func,t,n),Ge=G(Q,t,n);return`${oe}.data[${Ge}]`}else if(i&&ot(i)&&Vt(i.childType)){let Q=G(e.func,t,n),oe=G(e.args[0],t,n);return`${Q}.data[${oe}]`}}function Ey(e,t,n,r){var o,a;let i=t.emitter;if(i.emitLine(`${e}if (__yo_effect_escaped) {`),t.inAsyncStateMachine||(wr(e+" ",t,r,!1,!0,!1),wi(e+" ",t,r)),t.inAsyncStateMachine)n&&i.emitLine(`${e} __yo_effect_escaped = 0;`),ai({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&&!We(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&&!We(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 $y(e,t,n,r,i,o,a,s){var p,d,g,m,h,v,T,$,b,w,C,k,A,N;let l=n.join(", "),u=t.return.type,c=a.emitter,_,f=!1;if(s!=null&&s.fieldFunctionType.forallParameters&&s.fieldFunctionType.forallParameters.length>0){let x=s.fieldFunctionType.return.type;f=B(x);let V=f?"void":(p=i.$)!=null&&p.type?H(i.$.type,a):H(u,a),I=[],P=s.fieldFunctionType.parameters.filter(J=>!J.isCompileTimeOnly);for(let J=0;J<P.length;J++){let U=P[J].type,W=B(U)&&((g=(d=r==null?void 0:r[J])==null?void 0:d.$)!=null&&g.type)?r[J].$.type:U,q=ne(W)?oo(W,"(*)",a):H(W,a);I.push(q)}let O=I.join(", ");_=`((${V} (*)(${O}))${e})`}else _=e;if(We(u)){if(c.emitLine(`${o}${_}(${l});`),(m=i.$)!=null&&m.deferredDropExpressions&&Ln(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(wr(o+" ",a,i,!1,!0,!1),wi(o+" ",a,i)),a.inAsyncStateMachine)ai({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let x=(h=a.currentFunctionType)==null?void 0:h.return.type;if(x&&!We(x)){let V=H(x,a);V!=="void"?c.emitLine(`${o} return (${V}){0};`):c.emitLine(`${o} return;`)}else c.emitLine(`${o} return;`)}return c.emitLine(`${o}}`),""}else{let x=(v=i.$)==null?void 0:v.variableName;if(x){let V=(T=s==null?void 0:s.fieldFunctionType.forallParameters)!=null&&T.length&&(($=i.$)!=null&&$.type)?i.$.type:u,I=H(V,a);if(I==="void"||We(V)){if(c.emitLine(`${o}${_}(${l});`),(b=i.$)!=null&&b.deferredDropExpressions&&Ln(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(wr(o+" ",a,i,!1,!0,!1),wi(o+" ",a,i)),a.inAsyncStateMachine)ai({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let D=(w=a.currentFunctionType)==null?void 0:w.return.type;if(D&&!We(D)){let P=H(D,a);P!=="void"?c.emitLine(`${o} return (${P}){0};`):c.emitLine(`${o} return;`)}else c.emitLine(`${o} return;`)}return c.emitLine(`${o}}`),""}if(f){if(c.emitLine(`${o}${I} ${x} = (${I}){0};`),c.emitLine(`${o}${_}(${l});`),(C=i.$)!=null&&C.deferredDropExpressions&&Ln(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(wr(o+" ",a,i,!1,!0,!1),wi(o+" ",a,i)),a.inAsyncStateMachine)ai({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let D=(k=a.currentFunctionType)==null?void 0:k.return.type;if(D&&!We(D)){let P=H(D,a);P!=="void"?c.emitLine(`${o} return (${P}){0};`):c.emitLine(`${o} return;`)}else c.emitLine(`${o} return;`)}return c.emitLine(`${o}}`),Hr(x,o,a),x}if(c.emitLine(`${o}${I} ${x} = ${_}(${l});`),(A=i.$)!=null&&A.deferredDropExpressions&&Ln(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(wr(o+" ",a,i,!1,!0,!1),wi(o+" ",a,i)),a.inAsyncStateMachine)ai({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let D=(N=a.currentFunctionType)==null?void 0:N.return.type;if(D&&!We(D)){let P=H(D,a);P!=="void"?c.emitLine(`${o} return (${P}){0};`):c.emitLine(`${o} return;`)}else c.emitLine(`${o} return;`)}return c.emitLine(`${o}}`),x}else return`${_}(${l})`}}function K_(e,t,n,r){var s,l,u,c,_,f,p,d,g,m,h,v,T,$,b,w,C;let i=[],o=(l=(s=t.body)==null?void 0:s.$)==null?void 0:l.effectAnalysis,a=!1;for(let k of e){let A=`${k.implicitLabel}.${k.fieldLabel}`,N=!1;if(r.currentEvidenceParams){let x=r.currentEvidenceParams.get(A);x&&(i.push(x.cParamName),N=!0)}if(!N){if(o){if(o.effectHandlerInfos)for(let x of o.effectHandlerInfos){if(x.effectParameterName!==k.fieldLabel&&x.effectParameterName!==k.implicitLabel)continue;let V=x.handlerValue;if(V&&we(V)){if((u=V.specializedFunctionCaches)!=null&&u.length){let D=V.specializedFunctionCaches[0].specializedFunction,P=(c=r.functions[D.funcId])==null?void 0:c.cName;if(P){i.push(`(void*)${P}`),N=!0,a=!0;break}}let I=(_=r.functions[V.funcId])==null?void 0:_.cName;if(I){i.push(I),N=!0,a=!0;break}}}if(!N&&o.handlerValue&&e.length===1){let x=o.handlerValue;if(x&&we(x)){if((f=x.specializedFunctionCaches)!=null&&f.length){let V=x.specializedFunctionCaches[0].specializedFunction,I=(p=r.functions[V.funcId])==null?void 0:p.cName;I&&(i.push(`(void*)${I}`),N=!0,a=!0)}if(!N){let V=(d=r.functions[x.funcId])==null?void 0:d.cName;V&&(i.push(V),N=!0,a=!0)}}}}if(!N){let x=((g=n.func.$)==null?void 0:g.env)??((m=n.$)==null?void 0:m.env);if(x){let V=fe(x,k.implicitLabel),I=Dr(x,U=>U.isImplicit===!0&&ne(U.type)&&ne(k.fieldFunctionType)&&U.type===k.fieldFunctionType),D=V[V.length-1],P=I[I.length-1],O=P&&P!==D?P:D??P,J=(h=O==null?void 0:O.value)==null?void 0:h[0];if(J&&xt(J)){let U=J,W=!0;for(let q=0;q<k.fieldPath.length-1;q++){let j=k.fieldPath[q],ue=U.type.fields.findIndex(ye=>ye.label===j);if(ue>=0&&U.fields[ue]&&xt(U.fields[ue]))U=U.fields[ue];else{W=!1;break}}if(W){let q=k.fieldPath[k.fieldPath.length-1],j=U.type.fields.findIndex(ue=>ue.label===q);if(j>=0){let ue=U.fields[j];if(ue&&we(ue)){if(((v=ue.specializedFunctionCaches)==null?void 0:v.length)>0){let ye=ue.specializedFunctionCaches[0].specializedFunction,X=(T=r.functions[ye.funcId])==null?void 0:T.cName;X&&(i.push(`(void*)${X}`),N=!0)}if(!N){let ye=($=r.functions[ue.funcId])==null?void 0:$.cName;ye&&(i.push(ye),N=!0)}}}}}else if(J&&we(J)){if((b=J.specializedFunctionCaches)!=null&&b.length){let U=J.specializedFunctionCaches[0].specializedFunction,W=(w=r.functions[U.funcId])==null?void 0:w.cName;W&&(i.push(`(void*)${W}`),N=!0)}if(!N){let U=(C=r.functions[J.funcId])==null?void 0:C.cName;U&&(i.push(U),N=!0)}}N&&(a=!0)}}if(!N&&r.stateMachineVariables){let x=k.fieldPath[k.fieldPath.length-1];for(let[,V]of r.stateMachineVariables)if(V.name===x&&V.kind==="outer"){i.push(`sm->__capture.${x}`),N=!0;break}}if(!N)break}}return{args:i,isHandlerInstallation:a}}function X_(e,t,n,r,i,o,a,s=!1){var c,_,f,p,d;let l=a.emitter,u=n.return.type;if(l.emitLine(`${o}__yo_effect_escaped = 0;`),We(u)){if(l.emitLine(`${o}${e}(${t});`),(c=r.$)!=null&&c.deferredDropExpressions&&Ln(r,o,a),l.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(wr(o+" ",a,r,!1,!0,!1),wi(o+" ",a,r)),a.inAsyncStateMachine)ai({emitter:l,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let g=(_=a.currentFunctionType)==null?void 0:_.return.type;if(s&&l.emitLine(`${o} __yo_effect_escaped = 0;`),g&&!We(g))if(s){let m=H(g,a);m!=="void"?(l.emitLine(`${o} ${m} _esc_result;`),l.emitLine(`${o} memcpy(&_esc_result, __yo_effect_escape_value, sizeof(${m}));`),l.emitLine(`${o} return _esc_result;`)):l.emitLine(`${o} return;`)}else{let m=H(g,a);m!=="void"?l.emitLine(`${o} return (${m}){0};`):l.emitLine(`${o} return;`)}else l.emitLine(`${o} return;`)}return l.emitLine(`${o}}`),""}else{let g=(f=r.$)==null?void 0:f.variableName;if(g){let m=H(u,a);if(l.emitLine(`${o}${m} ${g} = ${e}(${t});`),Hr(g,o,a),(p=r.$)!=null&&p.deferredDropExpressions&&Ln(r,o,a),l.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(wr(o+" ",a,r,!1,!0,!1),wi(o+" ",a,r)),a.inAsyncStateMachine)ai({emitter:l,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let h=(d=a.currentFunctionType)==null?void 0:d.return.type;if(s&&h&&!We(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&&!We(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})`}}var Cy=Z(()=>{mt();fi();qt();Te();Ne();at();Fe();pl();Ea();Wt();ha();hl();ss();kr();yn();Y_();j_();Tl()});function ky(e,t,n){var a,s,l;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 u=e.args[0];if((s=u.$)!=null&&s.value&&ct(u.$.value)){let c=u.$.value.value;r.emitLine(`${t}fprintf(stderr, "%s\\n", ${JSON.stringify(c)});`),r.emitLine(`${t}abort();`)}else{let c=G(u,t,n),_=(l=u.$)==null?void 0:l.type;_&&Ue(_)&&Gr(_)&&_.typeName==="str"?r.emitLine(`${t}fprintf(stderr, "%.*s\\n", (int)${c}.length, ${c}.data);`):r.emitLine(`${t}fprintf(stderr, "%s\\n", ${c});`),r.emitLine(`${t}abort();`)}}else return`// Error: panic accepts 0 or 1 arguments, got ${e.args.length}`;return`(*((${H(i,n)}*)NULL))`}var wy=Z(()=>{Ne();Fe();Wt();yn()});function LC(e,t){if(!e)return"r";if(e.startsWith("raw:"))return e.slice(4);let n=wC[e];if(n)return n;let r=kC[e];return r?r[t]??r.x86_64??"r":e}function AC(e,t){let n="",r=0;for(;r<e.length;)if(e[r]==="{"){if(r+1<e.length&&e[r+1]==="{"){n+="{",r+=2;continue}let i=e.indexOf("}",r+1);if(i===-1){n+=e[r],r++;continue}let o=e.slice(r+1,i),a=o.indexOf(":"),s,l;a>=0?(s=o.slice(0,a),l=o.slice(a+1)):s=o;let u=l?FC[l]??l:void 0,c=parseInt(s,10);isNaN(c)?u?n+=`%${u}[${s}]`:n+=`%[${s}]`:u?n+=`%${u}${c}`:n+=`%${c}`,r=i+1}else e[r]==="}"&&r+1<e.length&&e[r+1]==="}"?(n+="}",r+=2):(n+=e[r],r++);return n}function SC(e,t,n,r){var h,v,T,$,b;let i=e.args,o=n.targetInfo.arch;if(r==="const_val"){let w,C=0;i.length===2&&((h=i[0].$)!=null&&h.value)&&ct(i[0].$.value)&&(w=i[0].$.value.value,C=1);let k=G(i[C],t,n);return{kind:"const_val",name:w,constraint:"",cExpr:k,cType:"",isDiscarded:!1,isVariableTarget:!1}}if(r==="sym"){let w,C=0;i.length===2&&((v=i[0].$)!=null&&v.value)&&ct(i[0].$.value)&&(w=i[0].$.value.value,C=1);let k=G(i[C],t,n);return{kind:"sym",name:w,constraint:"i",cExpr:k,cType:"",isDiscarded:!1,isVariableTarget:!1}}let a,s=0;if(i.length>=2){let w=i[0];(T=w.$)!=null&&T.value&&ct(w.$.value)&&!(w.tag==="Atom"&&Fy(w.token.value))&&(a=w.$.value.value,s=1)}let l=s<i.length-1,u,c;l?(u=IC(i[s],t,n),c=s+1):(a!==void 0&&(u=a),c=s);let _=LC(u,o),f=i[c];if(f.tag==="Atom"&&f.token.value==="_")return{kind:r,name:a,constraint:_,cExpr:"",cType:"int32_t",isDiscarded:!0,isVariableTarget:!1};if(($=f.$)!=null&&$.value&&Y(f.$.value)){let w=f.$.value.value,C=H(w,n);return{kind:r,name:a,constraint:_,cExpr:"",cType:C,isDiscarded:!1,isVariableTarget:!1}}let p=G(f,t,n),d=H((b=f.$)==null?void 0:b.type,n),m=(r==="out"||r==="lateout")&&f.tag==="Atom";return{kind:r,name:a,constraint:_,cExpr:p,cType:d,isDiscarded:!1,isVariableTarget:m}}function Fy(e){return["reg","reg_byte","reg_abcd","xmm_reg","ymm_reg","imm","mem"].includes(e)}function IC(e,t,n){var r,i;if(e.tag==="Atom"&&Fy(e.token.value))return e.token.value;if((r=e.$)!=null&&r.value&&ct(e.$.value))return e.$.value.value;if(E(e,"raw",1)){let o=e;if((i=o.args[0].$)!=null&&i.value&&ct(o.args[0].$.value))return`raw:${o.args[0].$.value.value}`}return"r"}function NC(e,t){var i;let n=[];if((e.func.tag==="Atom"?e.func.token.value:"clobber")==="clobber_abi"){let o=t.targetInfo.arch;if(o==="x86_64")n.push("rax","rcx","rdx","rsi","rdi","r8","r9","r10","r11","xmm0","xmm1","xmm2","xmm3","xmm4","xmm5","xmm6","xmm7","xmm8","xmm9","xmm10","xmm11","xmm12","xmm13","xmm14","xmm15","cc","memory");else if(o==="aarch64"){for(let a=0;a<=18;a++)n.push(`x${a}`);n.push("x30");for(let a=0;a<=31;a++)n.push(`v${a}`);n.push("cc","memory")}return n}for(let o of e.args)(i=o.$)!=null&&i.value&&ct(o.$.value)?n.push(o.$.value.value):o.tag==="Atom"&&n.push(o.token.value);return n}function xC(e){let t={isVolatile:!0,intelSyntax:!1,noreturn:!1,pure:!1};for(let n of e.args)if(n.tag==="Atom")switch(n.token.value){case"pure":t.pure=!0,t.isVolatile=!1;break;case"intel_syntax":t.intelSyntax=!0;break;case"noreturn":t.noreturn=!0;break;case"volatile":t.isVolatile=!0;break}return t}function Ly(e,t,n){var x,V;let r=n.emitter,i=(x=e.$)==null?void 0:x.type;if(!i)return"/* Error: asm() missing type information */";if(Zn(n.targetInfo))return r.emitLine(`${t}/* Error: inline assembly is not supported on WebAssembly */`),r.emitLine(`${t}abort();`),`(*((${H(i,n)}*)NULL))`;let o=[],a=0;for(;a<e.args.length;){let I=e.args[a];if(S(I))break;if((V=I.$)!=null&&V.value&&ct(I.$.value))o.push(I.$.value.value),a++;else break}let s=o.join(`
11090
- `),l=[],u=[],c={isVolatile:!0,intelSyntax:!1,noreturn:!1,pure:!1};for(;a<e.args.length;){let I=e.args[a];if(!S(I)){a++;continue}let D=I.func.tag==="Atom"?I.func.token.value:void 0;if(!D){a++;continue}["in","out","inout","lateout","inlateout","const_val","sym"].includes(D)?l.push(SC(I,t,n,D)):D==="clobber"||D==="clobber_abi"?u.push(...NC(I,n)):D==="asm_options"&&(c=xC(I)),a++}let _=new Map;for(let I=0;I<l.length;I++)l[I].name&&_.set(l[I].name,I);let f=s;for(let I=0;I<l.length;I++){let D=l[I];D.kind==="const_val"&&(D.name&&(f=f.replace(new RegExp(`\\{${D.name}(?::[^}]*)?\\}`,"g"),D.cExpr)),f=f.replace(new RegExp(`\\{${I}(?::[^}]*)?\\}`,"g"),D.cExpr))}let p=AC(f,_),d=[],g=[],m=[];for(let I=0;I<l.length;I++){let D=l[I];if(D.isDiscarded){let P=`__asm_discard_${Q_++}`;m.push({varName:P,cType:D.cType,operandIdx:I}),r.emitLine(`${t}${D.cType} ${P};`)}else if(D.kind==="out"||D.kind==="lateout"){if(!D.isVariableTarget){if(D.cType){let P=`__asm_out_${Q_++}`;d.push({varName:P,cType:D.cType,operandIdx:I}),r.emitLine(`${t}${D.cType} ${P};`)}}}else if(D.kind==="inout"||D.kind==="inlateout"){let P=`__asm_inout_${Q_++}`;g.push({varName:P,cType:D.cType,initExpr:D.cExpr,operandIdx:I}),r.emitLine(`${t}${D.cType} ${P} = ${D.cExpr};`)}}let h=c.isVolatile?" __volatile__":"",v=p;c.intelSyntax&&(n.needsIntelAsmSyntax=!0);let T=JSON.stringify(v),$=[];for(let I=0;I<l.length;I++){let D=l[I];if(D.kind==="in"||D.kind==="const_val"||D.kind==="sym")continue;let P;D.kind==="out"||D.kind==="lateout"?P=D.kind==="lateout"?"=&":"=":P=D.kind==="inlateout"?"+&":"+";let O=`${P}${D.constraint}`,J=D.name?`[${D.name}] `:"",U;D.isDiscarded?U=m.find(q=>q.operandIdx===I).varName:D.isVariableTarget?U=D.cExpr:D.kind==="out"||D.kind==="lateout"?U=d.find(q=>q.operandIdx===I).varName:U=g.find(q=>q.operandIdx===I).varName,$.push(`${J}"${O}" (${U})`)}let b=[];for(let I=0;I<l.length;I++){let D=l[I];if(D.kind!=="in"&&D.kind!=="sym")continue;let P=D.constraint,O=D.name?`[${D.name}] `:"";b.push(`${O}"${P}" (${D.cExpr})`)}let w=u.map(I=>`"${I}"`),C=$.join(", "),k=b.join(", "),A=w.join(", ");if(r.emitLine(`${t}__asm__${h} (`),r.emitLine(`${t} ${T}`),r.emitLine(`${t} : ${C}`),r.emitLine(`${t} : ${k}`),r.emitLine(`${t} : ${A}`),r.emitLine(`${t});`),c.noreturn)return r.emitLine(`${t}__builtin_unreachable();`),`(*((${H(i,n)}*)NULL))`;if(We(i))return"";let N=[];for(let I=0;I<l.length;I++){let D=l[I];if(!(D.isDiscarded||D.isVariableTarget)&&!(D.kind==="in"||D.kind==="const_val"||D.kind==="sym"))if(D.kind==="out"||D.kind==="lateout"){let P=d.find(O=>O.operandIdx===I);P&&N.push(P.varName)}else{let P=g.find(O=>O.operandIdx===I);P&&N.push(P.varName)}}if(N.length===1)return N[0];if(N.length>1){let I=H(i,n),D=N.map((P,O)=>`._${O} = ${P}`).join(", ");return`((${I}){ ${D} })`}return""}function Ay(e,t,n){var i;if(Zn(n.targetInfo))return"/* global_asm skipped: not supported on this target */";let r=e.args[0];if((i=r.$)!=null&&i.value&&ct(r.$.value)){let o=r.$.value.value;n.emitter.emitDeclarationLine(`__asm__(${JSON.stringify(o)});`)}return""}var kC,wC,FC,Q_,Sy=Z(()=>{Te();Sr();Ne();Fe();Wt();yn();kC={reg:{x86_64:"r",aarch64:"r",x86:"r",arm:"r"},reg_byte:{x86_64:"q",x86:"q"},reg_abcd:{x86_64:"Q",x86:"Q"},xmm_reg:{x86_64:"x",aarch64:"w"},ymm_reg:{x86_64:"x"},imm:{x86_64:"i",aarch64:"i",x86:"i",arm:"i"},mem:{x86_64:"m",aarch64:"m",x86:"m",arm:"m"}},wC={rax:"a",eax:"a",ax:"a",al:"a",rbx:"b",ebx:"b",bx:"b",bl:"b",rcx:"c",ecx:"c",cx:"c",cl:"c",rdx:"d",edx:"d",dx:"d",dl:"d",rsi:"S",esi:"S",si:"S",rdi:"D",edi:"D",di:"D"},FC={e:"k",x:"w",l:"b",h:"h",w:"w"};Q_=0});function Iy(e,t,n){var l,u,c,_,f,p,d,g,m,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=G(r,t,n),a=(l=r.$)==null?void 0:l.type,s=(u=r.$)==null?void 0:u.value;if(K(i)){let v=i.token.value,T=n;if(T.currentEvidenceParams&&K(r)){let b=`${r.token.value}.${v}`,w=T.currentEvidenceParams.get(b);if(w)return w.cParamName}if((c=e.$)!=null&&c.value&&we(e.$.value)){let $=e.$.value;return((_=n.functions[$.funcId])==null?void 0:_.cName)||$.funcId}if(!((f=e.$)!=null&&f.value)&&(F.___dispose.includes(v)||F.___drop.includes(v)||F.___dup.includes(v))&&a){let $=null;if((Ue(a)||Ze(a))&&($=a.trait),$){let b=$.fields.find(w=>w.label===v&&w.assignedValue&&we(w.assignedValue));if(b&&we(b.assignedValue)){let w=b.assignedValue;return((p=n.functions[w.funcId])==null?void 0:p.cName)||w.funcId}else return`/* ERROR: Rc method ${v} not found in type module */`}else return`/* ERROR: No module found for Rc method ${v} */`}if(it(a)||xt(s)){let $=(d=e.$)==null?void 0:d.value;if($){if(Me($)){if($.variableName)return Qe($.variableName,(g=e.$)==null?void 0:g.env);if((T.inAsyncStateMachine||T.inEffectStateMachine)&&T.stateMachineVariables){for(let[,b]of T.stateMachineVariables)if(b.name===v&&b.kind==="outer")return`sm->__capture.${v}`}}else if(!xt($))return lr($,n,e)}return Qe(v,(m=e.$)==null?void 0:m.env)}if(Gr(a)&&a.fields.length===1){let $=a.fields[0];if($&&$.label===v)return o}if(Ze(a)){let $=a;if(rr($))return o;for(let w of $.variants)if(w.fields){for(let C of w.fields)if(C.label===v){let k=w.name;return`${o}.data.${k}.${Ae(v)}`}}return`/* ERROR: field ${v} not found in enum ${$.typeName} */`}else if(Y(s)&&Ze(s.value)){let $=s.value,b=$.variants.find(C=>C.name===v),w=(h=n.types[$.id])==null?void 0:h.cName;if(b&&!b.fields&&w){let C=er($,b.name,n);return`(${w}){ .tag = ${C}, .data = { } }`}}else{if(Nn(a)&&v==="*")return`${o}->value`;if(ot(a)){if(v==="*")return`(*${o})`;if(Vt(a.childType))return`${o}->${Ae(v)}`;{let $=0,b=a;for(;ot(b);)$++,b=b.childType;if($>0&&Ue(b)&&b.isReferenceSemantics&&$++,Gr(b)&&b.fields.length===1){let w=b.fields[0];if(w&&w.label===v)return $===1?`(*${o})`:`${"*".repeat($)}(${o})`}return $>0?$===1?`${o}->${Ae(v)}`:`${`(${"*".repeat($-1)}${o})`}->${Ae(v)}`:`${o}.${Ae(v)}`}}else if(gt(a)){if(v.match(/^\d+$/))return`${o}._${v}`;{let $=a.fields.findIndex(b=>b.label===v);return`${o}._${$}`}}else return dt(a)?`${o}.vtable->${Ae(v)}`:pn(a)?`${o}->${Ae(v)}`:`${o}.${Ae(v)}`}}return"/* ERROR: field name must be an identifier */"}var Ny=Z(()=>{Te();Ne();Fe();Wt();ss();yn()});function xy(e,t,n){var l,u,c,_,f,p,d,g,m,h;if(!((l=e.$)==null?void 0:l.type))return`// Error: No type information for pointer/reference expression ${L(e)}
11091
- `;let i=e.args[0];if(S(i)){let v=(u=i.func.$)==null?void 0:u.type;if(v&&ut(v)){let T=i.args[0];if(T&&S(T)&&(E(T,"..")||E(T,"..="))){let $=E(T,"..="),b=G(i.func,t,n),w=G(T.args[0],t,n),C=G(T.args[1],t,n),k=`Slice_${Ae(H(v.childType,n))}`;return n.sliceStructTypes.has(k)||n.sliceStructTypes.set(k,{childType:H(v.childType,n)}),$?`(${k}){ .data = &${b}.data[${w}], .length = (${C}) - (${w}) + 1 }`:`(${k}){ .data = &${b}.data[${w}], .length = (${C}) - (${w}) }`}}else if(v&&(Vt(v)||ot(v)&&Vt(v.childType))){let T=Vt(v)?v:v.childType,$=i.args[0];if($&&S($)&&(E($,"..")||E($,"..="))){let b=E($,"..="),w=G(i.func,t,n),C=G($.args[0],t,n),k=G($.args[1],t,n),A=`Slice_${Ae(H(T.childType,n))}`;return n.sliceStructTypes.has(A)||n.sliceStructTypes.set(A,{childType:H(T.childType,n)}),b?`(${A}){ .data = &${w}.data[${C}], .length = (${k}) - (${C}) + 1 }`:`(${A}){ .data = &${w}.data[${C}], .length = (${k}) - (${C}) }`}}}let o=(c=i.$)==null?void 0:c.value,a=(_=i.$)==null?void 0:_.type;if(o!==void 0&&a){if(Rt(o)||It(o)){let v=G(i,t,n);return`(&(${H(a,n)}){${v}})`}if(ct(o)&&((f=i.$)!=null&&f.convertedRuntimeType))return`(&${G(i,t,n)})`}if((p=e.$)!=null&&p.isIndexTraitAddressOf&&S(i)&&((d=i.$)!=null&&d.indexMethodValue)){let v=i.$.indexMethodValue;if(we(v)){let T=i.func,$=G(T,t,n);if(S(T)&&!K(T)&&!E(T,".")&&((g=T.$)!=null&&g.type)&&!(((m=T.$)==null?void 0:m.variableName)&&$===Qe(T.$.variableName,T.$.env))){let N=H(T.$.type,n),x=`__yo_ptr_idx_tmp_${VC++}`;n.emitter.emitLine(`${t}${N} ${x} = ${$};`),$=x}let b=i.args[0],w=b?G(b,t,n):"0",C=ro(v);if(C&&(F.__yo_array_index.includes(C)||F.__yo_slice_index.includes(C)))return`(&((&${$})->data[${w}]))`;let k=(h=n.functions[v.funcId])==null?void 0:h.cName;if(k)return`${k}(&${$}, ${w})`}}return`(&${G(i,t,n)})`}var VC,Vy=Z(()=>{Te();Ne();Fe();Wt();yn();VC=0});function Dy(e,t,n){let r=e.args[0];return r?`__yo_decr_rc(${G(r,t,n)})`:"// Error: __yo_decr_rc requires exactly 1 argument"}function My(e,t,n){let r=e.args[0];return r?`__yo_incr_rc(${G(r,t,n)})`:"// Error: __yo_incr_rc requires exactly 1 argument"}function Oy(e,t,n){let r=e.args[0];return r?G(r,t,n):"// Error: __yo_rc_own requires exactly 1 argument"}function Ry(e,t,n){var _;let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_drop_array_element requires exactly 2 arguments";let o=G(r,t,n),a=G(i,t,n),s=(_=r.$)==null?void 0:_.type;if(!s||!ut(s))return"// Error: __yo_drop_array_element requires an array type";let l=s.childType,u=B(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(ut(u)){let f=u.length;if(!Rt(f))return"// Error: array element has non-constant length";let p=`i_${Math.floor(Math.random()*1e6)}`,d=n.emitter;d.emitLine(`for (size_t ${p} = 0; ${p} < ${f.value}; ${p}++) {`);let g=`(${o}).data[${a}].data[${p}]`;d.emitLine(" { // drop nested array element");let m=To(g,u.childType,n);return m&&d.emitLine(` ${m};`),d.emitLine(" }"),d.emitLine("}"),""}let c=io(u,n);return c?`${c}((${o}).data[${a}])`:"// No drop function for array element type"}function Py(e,t,n){var _;let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_dup_array_element requires exactly 2 arguments";let o=G(r,t,n),a=G(i,t,n),s=(_=r.$)==null?void 0:_.type;if(!s||!ut(s))return"// Error: __yo_dup_array_element requires an array type";let l=s.childType,u=B(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(ut(u)){let f=u.length;if(!Rt(f))return"// Error: array element has non-constant length";let p=`temp_array_${Math.floor(Math.random()*1e6)}`,d=`i_${Math.floor(Math.random()*1e6)}`,g=H(u,n),m=n.emitter;m.emitLine(`${g} ${p} = (${o}).data[${a}];`),m.emitLine(`for (size_t ${d} = 0; ${d} < ${f.value}; ${d}++) {`);let h=as(`${p}.data[${d}]`,u.childType,n);return m.emitLine(` ${p}.data[${d}] = ${h};`),m.emitLine("}"),p}let c=ri(u,n);return c?`${c}((${o}).data[${a}])`:"// No dup function for array element type"}function zy(e,t,n){var f,p;let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_drop_tuple_element requires exactly 2 arguments";let o=G(r,t,n);G(i,t,n);let a=(f=r.$)==null?void 0:f.type;if(!a||!gt(a))return"// Error: __yo_drop_tuple_element requires a tuple type";let s=(p=i.$)==null?void 0:p.value;if(!Rt(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=B(u)&&u.resolvedConcreteType?u.resolvedConcreteType:u;if(gt(c)){let d=`(${o})._${l}`;return To(d,c,n)}let _=io(c,n);return _?`${_}((${o})._${l})`:"// No drop function for tuple element type"}function Uy(e,t,n){var f,p;let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_dup_tuple_element requires exactly 2 arguments";let o=G(r,t,n);G(i,t,n);let a=(f=r.$)==null?void 0:f.type;if(!a||!gt(a))return"// Error: __yo_dup_tuple_element requires a tuple type";let s=(p=i.$)==null?void 0:p.value;if(!Rt(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=B(u)&&u.resolvedConcreteType?u.resolvedConcreteType:u;if(gt(c)){let d=`(${o})._${l}`;return as(d,c,n)}let _=ri(c,n);return _?`${_}((${o})._${l})`:"// No dup function for tuple element type"}function By(e,t,n){var a,s;let r=e.args[0];if(!r)return"// Error: ___dup requires exactly 1 argument";let i=G(r,t,n),o=((a=r.$)==null?void 0:a.type)??((s=e.$)==null?void 0:s.type);return o?as(i,o,n):i}function Gy(e,t,n){var a,s;let r=e.args[0];if(!r)return"// Error: ___drop requires exactly 1 argument";let i=G(r,t,n),o=((a=r.$)==null?void 0:a.type)??((s=e.$)==null?void 0:s.type);return o?To(i,o,n):""}function Wy(e,t,n){let r=e.args[0];return r?`__yo_decr_rc((void*)(${G(r,t,n)}).data)`:"// Error: __yo_dyn_drop requires exactly 1 argument"}function Yy(e,t,n){let r=e.args[0];return r?`__yo_incr_rc((void*)(${G(r,t,n)}).data)`:"// Error: __yo_dyn_dup requires exactly 1 argument"}function qy(e,t,n){let r=e.args[0];return r?`__yo_incr_rc_atomic(${G(r,t,n)})`:"// Error: __yo_incr_rc_atomic requires exactly 1 argument"}function Hy(e,t,n){let r=e.args[0];return r?`__yo_decr_rc_atomic(${G(r,t,n)})`:"// Error: __yo_decr_rc_atomic requires exactly 1 argument"}function jy(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&&B(i)&&ft(i)){let l=G(r,t,n);return`if (${l} != NULL) { __yo_decr_rc((void*)${l}); }`}if(i&&B(i)&&i.resolvedConcreteType){let u=(a=i.resolvedConcreteType.trait)==null?void 0:a.fields.find(c=>c.label===F.___drop[0]);if(u&&u.assignedValue&&we(u.assignedValue)){let c=(s=n.functions[u.assignedValue.funcId])==null?void 0:s.cName;if(c){let _=G(r,t,n);return`${c}(${_})`}}}return"/* __yo_sometype_drop: no-op */"}function Ky(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&&B(i)&&ft(i))return`__yo_incr_rc((void*)${G(r,t,n)})`;if(i&&B(i)&&i.resolvedConcreteType){let u=(a=i.resolvedConcreteType.trait)==null?void 0:a.fields.find(c=>c.label===F.___dup[0]);if(u&&u.assignedValue&&we(u.assignedValue)){let c=(s=n.functions[u.assignedValue.funcId])==null?void 0:s.cName;if(c){let _=G(r,t,n);return`${c}(${_})`}}}return"/* __yo_sometype_dup: no-op */"}function Xy(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=G(r,t,n);return br(i)?`((__yo_ref_header_t*)(${o}))->ref_count`:"1"}var Qy=Z(()=>{qt();Te();Ne();Fe();Wt();kr();yn()});function Zy(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=G(s,t,n);if((u=s.$)!=null&&u.deferredDupExpressions&&s.$.deferredDupExpressions.length>0){Jt(s,t,o);let _=s.$.deferredDupExpressions[0];if(S(_)&&((c=_.$)!=null&&c.variableName))return Qe(_.$.variableName,_.$.env)}return l}).join(", ");return`${n.currentFunctionName}(${a})`}else return`// Error: No arguments for recur call ${L(e)}
11092
- `}var Jy=Z(()=>{Te();Wt();kr();yn()});function eg(e,t,n){let r=e.args[0];return`sizeof(${G(r,t,n)})`}var tg=Z(()=>{yn()});function ng(e,t,n){var a,s,l,u,c,_,f,p,d;let r=(a=e.$)==null?void 0:a.runtimeArgExprsInOrder,i=(u=n.types[((l=(s=e.$)==null?void 0:s.type)==null?void 0:l.id)??""])==null?void 0:u.cName,o=(c=e.$)==null?void 0:c.variableName;if(r&&i){let g=n,m=r.map((h,v)=>{var b,w;let $=G(h,t,n);if((b=h.$)!=null&&b.deferredDupExpressions&&h.$.deferredDupExpressions.length>0){Jt(h,t,g);let C=h.$.deferredDupExpressions[0];S(C)&&((w=C.$)!=null&&w.variableName)&&($=Qe(C.$.variableName,C.$.env))}return`._${v} = ${$}`}).join(", ");if(o&&((_=e.$)!=null&&_.type)){let h=`(${i}){ ${m} }`,v=an(e.$.type,o,n);return n.emitter.emitLine(`${t}${v} = ${h};`),o}else return`(${i}){ ${m} }`}else{if(e.args.length===0)return"";{let g=r??e.args;if(!i)return`/* Error: tuple type not found - typeId: ${((p=(f=e.$)==null?void 0:f.type)==null?void 0:p.id)??"none"} */`;let m=g.map((h,v)=>{let T=G(h,t,n);return`._${v} = ${T}`}).join(", ");if(o&&((d=e.$)!=null&&d.type)){let h=`(${i}){ ${m} }`,v=an(e.$.type,o,n);return n.emitter.emitLine(`${t}${v} = ${h};`),o}else return`(${i}){ ${m} }`}}}var rg=Z(()=>{Te();Wt();kr();yn()});function ig(e,t,n){var u,c;let i=(u=e.args[0].$)==null?void 0:u.value;if(!i||!Y(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_${Ae(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}`}var og=Z(()=>{Fe();Wt()});function DC(e,t){if(S(e)&&E(e,R.begin)){let n=[];for(let r of e.args)if(S(r)&&E(r,"=",2)){let i=r.args[0],o=r.args[1],a=G(i,"",t),s=G(o,"",t);n.push(`${a} = ${s}`)}return n.join(", ")}else if(S(e)&&E(e,"=",2)){let n=e.args[0],r=e.args[1],i=G(n,"",t),o=G(r,"",t);return`${i} = ${o}`}return G(e,"",t)}function Z_(e,t,n){var r,i,o,a;if(S(e)&&E(e,R.begin)){let s=n,l=s.pendingDeferredDrops,u=((r=e.$)==null?void 0:r.deferredDropExpressions)??[],c=new Map;for(let d of u){let g=qr(d);g&&c.set(g,d)}s.pendingDeferredDrops=[...l??[]];let _=s.consumedVarPendingDrops,f=((i=e.$)==null?void 0:i.consumedVariableDropExpressions)??[];s.consumedVarPendingDrops=[...f,..._??[]];let p=new Set;for(let d of e.args){let g=G(d,t,n);if(g&&n.emitter.emitLine(`${t}${g};`),(o=d.$)!=null&&o.env&&c.size>p.size)for(let m of d.$.env.frames)for(let h of m.variables)c.has(h.name)&&!p.has(h.name)&&(p.add(h.name),s.pendingDeferredDrops.unshift(c.get(h.name)))}if((a=e.$)!=null&&a.deferredDropExpressions)for(let d of e.$.deferredDropExpressions){let g=G(d,t,n);g&&n.emitter.emitLine(`${t}${g};`)}s.pendingDeferredDrops=l,s.consumedVarPendingDrops=_}else{let s=G(e,t,n);s&&n.emitter.emitLine(`${t}${s};`)}}function ag(e,t,n){var i,o,a;if((i=e.$)!=null&&i.comptimeUnrolledBodies){for(let s of e.$.comptimeUnrolledBodies)Z_(s,t,n);return""}let r=e.args;if(r.length===2){let s=r[0],l=r[1],u=n.currentLoopLabel,c=`loop_${Math.random().toString(36).substr(2,9)}`;n.currentLoopLabel=c;let _=n,f=_.loopBodyDropsBaselineCount;_.loopBodyDropsBaselineCount=((o=_.pendingDeferredDrops)==null?void 0:o.length)??0,n.emitter.emitLine(`${t}while (true) {`);let p=G(s,t+" ",n);return n.emitter.emitLine(`${t} if (!(${p})) {`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t} }`),Z_(l,t+" ",n),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}${c}:;`),_.loopBodyDropsBaselineCount=f,n.currentLoopLabel=u,""}else if(r.length===3){let s=r[0],l=r[1],u=r[2],c=n.currentLoopLabel,_=n.currentContinueLabel,f=`loop_${Math.random().toString(36).substr(2,9)}`,p=`continue_${Math.random().toString(36).substr(2,9)}`;n.currentLoopLabel=f,n.currentContinueLabel=p;let d=n,g=d.loopBodyDropsBaselineCount;d.loopBodyDropsBaselineCount=((a=d.pendingDeferredDrops)==null?void 0:a.length)??0,n.emitter.emitLine(`${t}while (true) {`);let m=G(s,t+" ",n);n.emitter.emitLine(`${t} if (!(${m})) {`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t} }`),Z_(u,t+" ",n),n.emitter.emitLine(`${t}${p}:;`);let h=DC(l,n);return n.emitter.emitLine(`${t} ${h};`),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}${f}:;`),d.loopBodyDropsBaselineCount=g,n.currentLoopLabel=c,n.currentContinueLabel=_,""}else return n.emitter.emitLine(`${t}/* Error: while loop expects 2 or 3 arguments, got ${r.length} */`),""}var sg=Z(()=>{Te();Wt();yn()});function OC(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;B(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),nn(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function RC(e,t,n){var c,_,f,p,d,g,m,h;let r=(c=e.$)==null?void 0:c.indexMethodValue;if(!r||!we(r))return"/* Error: Index trait method value missing */";let i=e.func,o=G(i,t,n);if(S(i)&&!K(i)&&!E(i,".")&&((_=i.$)!=null&&_.type)&&!(((f=i.$)==null?void 0:f.variableName)&&o===Qe(i.$.variableName,i.$.env))){let T=H(i.$.type,n),$=`__yo_idx_tmp_${MC++}`;n.emitter.emitLine(`${t}${T} ${$} = ${o};`),o=$}let a=e.args[0],s=a?G(a,t,n):"0",l,u=ro(r);if(u)if(F.__yo_array_index.includes(u)||F.__yo_slice_index.includes(u))l=`(&((&${o})->data[${s}]))`;else if((F.__yo_array_index_range.includes(u)||F.__yo_slice_index_range.includes(u))&&((p=e.$)!=null&&p.indexTraitPtrType)&&ot(e.$.indexTraitPtrType))l=`(&(${H(e.$.indexTraitPtrType.childType,n)}){ .data = &((&${o})->data[(${s}).start]), .length = (${s}).end - (${s}).start })`;else if((F.__yo_array_index_range_inclusive.includes(u)||F.__yo_slice_index_range_inclusive.includes(u))&&((d=e.$)!=null&&d.indexTraitPtrType)&&ot(e.$.indexTraitPtrType))l=`(&(${H(e.$.indexTraitPtrType.childType,n)}){ .data = &((&${o})->data[(${s}).start]), .length = (${s}).end - (${s}).start + 1 })`;else{let v=(g=n.functions[r.funcId])==null?void 0:g.cName;if(!v)return`/* Error: Index method ${r.funcId} not found in function registry */`;l=`${v}(&${o}, ${s})`}else{let v=(m=n.functions[r.funcId])==null?void 0:m.cName;if(!v)return`/* Error: Index method ${r.funcId} not found in function registry */`;l=`${v}(&${o}, ${s})`}return(h=e.$)!=null&&h.isIndexTraitAddressOf?l:`(*${l})`}function PC(e,t,n,r){var _,f,p,d;let i=e.args[0];if(!((_=i==null?void 0:i.$)!=null&&_.type))return;let o=e.args.find(g=>S(g)&&E(g,R.using));if(!o)return;let a=Wn(i.$.type);if(!((f=a==null?void 0:a.isFuture.effects)!=null&&f.length))return;let s=OC(a.isFuture.effects),l=o.args,u=r,c=u.emitter;for(let g=0;g<s.length&&g<l.length;g++){let m=s[g],h=l[g];if(ne(m.type)){let v=m.label,T;if(u.currentEvidenceParams){for(let $ of u.currentEvidenceParams.values())if($.fieldLabel===v){T=$.cParamName;break}}if(!T&&u.stateMachineVariables){for(let[,$]of u.stateMachineVariables)if($.name===v&&$.kind==="outer"){T=`sm->__capture.${v}`;break}}if(!T){let $=(p=h.$)==null?void 0:p.value;if($&&we($)){let b=r.functions[$.funcId];b&&(T=b.cName)}}T||(T=G(h,n,r)),T&&c.emitLine(`${n} ${t}->__capture.${v} = (void*)${T};`)}else if(it(m.type)){let v=m.type;for(let T of v.fields){if(!ne(T.type))continue;let $;if(u.stateMachineVariables){for(let[,b]of u.stateMachineVariables)if(b.name===T.label&&b.kind==="outer"){$=`sm->__capture.${T.label}`;break}}if(!$){let b=(d=h.$)==null?void 0:d.value;if(b&&xt(b)){let w=v.fields.indexOf(T),C=b.fields[w];if(C&&we(C)){let k=r.functions[C.funcId];k&&($=k.cName)}}}if(!$&&u.currentEvidenceParams){for(let b of u.currentEvidenceParams.values())if(b.fieldLabel===T.label){$=b.cParamName;break}}$||($=zC(T.label,v,u,e)),$&&c.emitLine(`${n} ${t}->__capture.${T.label} = (void*)${$};`)}}}}function zC(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=Dr(i,c=>c.isImplicit===!0);for(let c=o.length-1;c>=0;c--){let _=o[c],f=(l=_.value)==null?void 0:l[_.value.length-1];if(f&&xt(f)){let p=f.type.fields.findIndex(d=>d.label===e);if(p>=0){let d=f.fields[p];if(d&&we(d)){let g=(u=n.functions[d.funcId])==null?void 0:u.cName;if(g)return g}}}}}function UC(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=G(i,t,n);if(r.effectHandlerParamDrops)for(let _ of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${_};`);r.emitter.emitLine(`${t}${o.directReturnVar} = ${c};`),r.emitter.emitLine(`${t}goto ${o.directExitLabel};`)}else{if(r.effectHandlerParamDrops)for(let c of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${c};`);r.emitter.emitLine(`${t}goto ${o.directExitLabel};`)}return""}if(r.inAsyncStateMachine){let c=r.emitter;if(i){let _=G(i,t,n);_&&_!=="(void)0"&&c.emitLine(`${t}(void)${_};`)}if(r.effectHandlerParamDrops)for(let _ of r.effectHandlerParamDrops)c.emitLine(`${t}${_};`);return wr(t,r,e,!1,!0,!0),wi(t,r,e,!0),ai({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(wr(t,r,e,!1,!0,!0),wi(t,r,e,!0),r.currentFunctionType){let c=r.currentFunctionType.return.type;if(!We(c)){let _=r.overrideReturnTypeStr??H(c,n);if(_!=="void")return`return (${_}){0}`}}return"return"}let s=G(i,t,n);if(r.effectHandlerParamDrops)for(let c of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${c};`);if(wr(t,r,e,!1,!0,!0),wi(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&&!We(c)){let f=H(c,n);r.emitter.emitLine(`${t}{ ${f} _esc_val = ${s}; memcpy(__yo_effect_escape_value, &_esc_val, sizeof(${f})); }`)}let _=r.currentFunctionType.return.type;if(!We(_)){let f=r.overrideReturnTypeStr??H(_,n);if(f!=="void")return`return (${f}){0}`}return"return"}return`return ${s}`}function lg(e,t,n){let r;switch(e.tag){case"FnCall":r=BC(e,t,n);break;case"Atom":r=ps(e,n,t);break}return r}function BC(e,t,n){var r,i,o,a,s,l,u,c,_,f,p,d,g,m,h;if((r=e.$)!=null&&r.macroExpansion)return G(e.$.macroExpansion,t,n);if(S(e.func)&&E(e.func,".",2)&&e.func.args[1]&&K(e.func.args[1])){let v=e.func.args[1].token.value,T=e.func.args[0],$=(i=T==null?void 0:T.$)==null?void 0:i.type;if($&&B($)&&ft($)){if(v===F.___drop[0]){let b=G(T,t,n);return`if (${b} != NULL) { __yo_decr_rc((void*)${b}); }`}if(v===F.___dup[0])return`__yo_incr_rc((void*)${G(T,t,n)})`}}if(xd(e))return Vd(e,t,n);if(E(e,F.__yo_decr_rc))return Dy(e,t,n);if(E(e,F.__yo_incr_rc))return My(e,t,n);if(E(e,F.__yo_rc_own))return Oy(e,t,n);if(E(e,F.__yo_drop_array_element))return Ry(e,t,n);if(E(e,F.__yo_dup_array_element))return Py(e,t,n);if(E(e,F.__yo_drop_tuple_element))return zy(e,t,n);if(E(e,F.__yo_dup_tuple_element))return Uy(e,t,n);if(E(e,F.___dup))return By(e,t,n);if(E(e,F.___drop))return Gy(e,t,n);if(E(e,F.__yo_dyn_drop))return Wy(e,t,n);if(E(e,F.__yo_dyn_dup))return Yy(e,t,n);if(E(e,F.__yo_incr_rc_atomic))return qy(e,t,n);if(E(e,F.__yo_decr_rc_atomic))return Hy(e,t,n);if(E(e,F.__yo_iso_extract))return sy(e,t,n);if(E(e,F.__yo_iso_dispose))return ly(e,t,n);if(E(e,F.__yo_arc_dispose))return Im(e,t,n);if(q_(e))return uy(e,t,n);if(W_(e))return Nm(e,t,n);if(E(e,F.__yo_sometype_drop))return jy(e,t,n);if(E(e,F.__yo_sometype_dup))return Ky(e,t,n);if(E(e,F.__yo_gc_collect))return ry(e,t,n);if(E(e,F.rc))return Xy(e,t,n);if(E(e,F.panic))return ky(e,t,n);if(E(e,F.asm))return Ly(e,t,n);if(E(e,F.global_asm))return Ay(e,t,n);if(E(e,R.test))return"/* test declaration skipped */";if(E(e,F.__yo_thread_set_maximum_threads))return vy(e,t,n);if(E(e,R.op_and))return Lm(e,t,n);if(E(e,R.op_or))return Am(e,t,n);if(Xn(e))return(o=e.$)!=null&&o.awaitAnalysis?Dd(e,t,n):zd(e,t,n);if(E(e,R.dyn))return ty(e,t,n);if(Vr(e))return zm(e,t,n);if(Zp(e))return Um(e,t,n);if(zu(e)){let v=e.args[0];if(!v)return"// Error: spawn requires a Future argument";let $=n.emitter,b=G(v,t,n),w=(a=v.$)==null?void 0:a.type,C=w?H(w,n):"void*",k=(s=e.$)==null?void 0:s.type,A=k?H(k,n):null,N=(l=e.$)!=null&&l.variableName?`__spawn_future_${e.$.variableName}`:"__spawn_future",x=(u=e.$)!=null&&u.variableName?`__spawn_state_${e.$.variableName}`:"__spawn_state";return $.emitLine(`${t}// io.spawn \u2014 start cold Future, return JoinHandle`),$.emitLine(`${t}${C} ${N} = ${b};`),$.emitLine(`${t}int ${x} = ${N}->state;`),$.emitLine(`${t}if (${x} == -2) {`),$.emitLine(`${t} fprintf(stderr, "panic: attempted to spawn an aborted Future\\n");`),$.emitLine(`${t} abort();`),$.emitLine(`${t}}`),gl((c=v.$)==null?void 0:c.type)||($.emitLine(`${t}if (${x} == 0 && ${N}->__yo_resume_fn) {`),PC(e,N,t,n),$.emitLine(`${t} __yo_incr_rc((void*)${N});`),$.emitLine(`${t} ${N}->__yo_resume_fn((void*)${N});`),$.emitLine(`${t}}`)),A?`(${A}){ .__future = (void*)${N} }`:`(void*)${N}`}if(Jp(e))return Bm(e,t,n);if(E(e,R.return))return um(e,t,n);if(E(e,R.escape))return UC(e,t,n);if(E(e,F.__yo_array_fill,2))return Dm(e,t,n);if(E(e,"::",2))return"";if(E(e,":",2))return Hm(e,t,n);if(E(e,":=",2)){let v=oy(e,t,n);if(v!==void 0)return v}else{if(E(e,"=",2))return Om(e,t,n);if((_=e.$)!=null&&_.value&&!Me((f=e.$)==null?void 0:f.value)&&!We(e.$.type)&&!Zt((p=e.$)==null?void 0:p.controlFlow))return lr(e.$.value,n,e);if(E(e,".",2))return Iy(e,t,n);if(E(e,R.begin))return Ym(e,t,n);if(E(e,R.cond))return Km(e,t,n);if(E(e,R.match))return fy(e,t,n);if(E(e,F.__yo_address_of,1))return xy(e,t,n);if(E(e,R.tuple))return ng(e,t,n);if(E(e,R.array)){let v=Vm(e,t,n);if(v!==void 0)return v}else{if(E(e,R.recur))return Zy(e,t,n);if(E(e,R.runtime,1))return G(e.args[0],t,n);if(E(e,F.sizeof,1))return eg(e,t,n);if(E(e,F.typeid,1))return ig(e,t,n);if(E(e,F.downcast,2))return Jm(e,t,n);if(E(e,va)){let v=((d=e.$)==null?void 0:d.runtimeArgExprsInOrder)||e.args;if(v){let T=n,$=v.map(b=>{var C,k;let w=G(b,t,n);if((C=b.$)!=null&&C.deferredDupExpressions&&b.$.deferredDupExpressions.length>0){Jt(b,t,T);let A=b.$.deferredDupExpressions[0];if(S(A)&&((k=A.$)!=null&&k.variableName))return Qe(A.$.variableName,A.$.env)}return w});return $l(e.func.token.value,$,e,n,t)}}else{if(E(e,R.while))return ag(e,t,n);if(E(e,"->",2)&&S(e.args[0])&&E(e.args[0],R.fn)){let v=(g=e.$)==null?void 0:g.value;return we(v)?lr(v,n):"// Error: Anonymous function missing function value"}else{if(E(e,F.consume))return Qm(e,t,n);if(E(e,F.comptime_expect_error)||E(e,F.comptime_assert)||E(e,F.__yo_var_print_info)||E(e,F.__yo_var_is_owning_the_rc_value)||E(e,F.__yo_var_has_other_aliases))return"";if(E(e,R.open))return dy(e,t,n);if((m=e.$)!=null&&m.indexTraitPtrType&&((h=e.$)!=null&&h.indexMethodType))return RC(e,t,n);{let v=by(e,t,n);if(v!==void 0)return v}}}}}if(S(e))throw new Error(`Unhandled function call: ${L(e)}`);return`// Failed to transpile ${L(e)}`}var MC,ug=Z(()=>{fi();qt();Te();Ne();Fe();mt();zo();pl();Wt();Sm();xm();Mm();Rm();A_();ha();tc();Wm();qm();jm();hl();ss();Xm();Zm();ey();kr();ny();yn();iy();ay();Y_();cy();py();my();Cy();wy();Sy();j_();Ny();Vy();Qy();Jy();Tl();tg();rg();og();sg();MC=0});function cg({expr:e,env:t,context:n}){rt(e,F.alignof,1);let r=e.args[0],i=z({expr:r,env:t,context:{...n}});if(!i.$)throw y({token:r.token,errorMessage:"Failed to evaluate expression."});t=i.$.env;let o;i.$.value&&Y(i.$.value)?o=i.$.value.value:o=i.$.type;let a=Ai(o),s;return a===null?s=de(Fn(),{env:t,context:n}):s=sr("Usize",a),e.$={env:t,type:Fn(),value:s,pathCollection:[]},e}var _g=Z(()=>{De();Te();Et();at();Fe();ur();et()});function fg({expr:e,env:t,context:n}){let r=E(e,R.op_and)?"and":"or",i=e.args;if(i.length===0){let u=dn(r==="and");return e.$={env:t,type:Yt(),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],_=z({expr:c,env:o,context:{...n}});if(!_.$||!Nr(_.$.type))throw y({token:c.token,errorMessage:`Expected bool type for "${r}" argument, got:
11089
+ `),s}function gy(e,t,n){var m,h,v,T,$,b;let r=(m=e.$)==null?void 0:m.runtimeArgExprsInOrder;if(!r||r.length!==1)return"/* Error: __yo_thread_spawn requires exactly 1 argument */";let i=r[0],o=(h=i.$)==null?void 0:h.type;if(!o)return"/* Error: __yo_thread_spawn argument has no type */";let a,s;if(B(o)){let w=o;w.resolvedConcreteType&&(a=w.resolvedConcreteType.id,s=w.resolvedConcreteType)}else Ue(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),_=yy(u,l,n,((v=e.$)==null?void 0:v.env.modulePath)??""),f=G(i,t,n),p=(T=i.$)!=null&&T.variableName?Qe(i.$.variableName,i.$.env):f,d=`_thread_closure_data_${Lt((($=e.$)==null?void 0:$.env.modulePath)??"")}`;n.emitter.emitLine(`${t}${c}* ${d} = (${c}*)__yo_malloc(sizeof(${c}));`),n.emitter.emitLine(`${t}*${d} = ${p};`);let g=(b=e.$)==null?void 0:b.variableName;return g?(n.emitter.emitLine(`${t}__yo_thread_t ${g} = __yo_thread_spawn(${_}, ${d});`),g):`__yo_thread_spawn(${_}, ${d})`}function hy(e,t,n){var g,m,h,v,T;let r=(g=e.$)==null?void 0:g.runtimeArgExprsInOrder;if(!r||r.length!==1)return"/* Error: __yo_worker_spawn requires exactly 1 argument */";let i=r[0],o=(m=i.$)==null?void 0:m.type;if(!o)return"/* Error: __yo_worker_spawn argument has no type */";let a,s;if(B(o)){let $=o;$.resolvedConcreteType&&(a=$.resolvedConcreteType.id,s=$.resolvedConcreteType)}else Ue(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),_=yy(u,l,n,((h=e.$)==null?void 0:h.env.modulePath)??""),f=G(i,t,n),p=(v=i.$)!=null&&v.variableName?Qe(i.$.variableName,i.$.env):f,d=`_worker_closure_data_${Lt(((T=e.$)==null?void 0:T.env.modulePath)??"")}`;return n.emitter.emitLine(`${t}${c}* ${d} = (${c}*)__yo_malloc(sizeof(${c}));`),n.emitter.emitLine(`${t}*${d} = ${p};`),n.emitter.emitLine(`${t}__yo_worker_spawn(${_}, ${d});`),""}function vy(e,t,n){let r=e.args[0];return r?`__yo_thread_set_maximum_threads(${G(r,t,n)})`:"// Error: __yo_thread_set_maximum_threads requires exactly 1 argument"}var j_=Z(()=>{Ne();Cn();Wt();Ea();yn()});function Ty(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 Hr(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&&ft(i.type))return;let o=`var_${i.id}`,a=Le(e);n.emitter.emitLine(`${t}sm->${o} = ${a};`)}}function by(e,t,n){var o,a,s,l,u,c,_,f,p,d,g,m,h,v,T,$,b,w,C,k,A,N,x,V,I,D,P,O,J,U,W,q,j,ue,ye,X,re,le,Oe,$e,ae,Ae,se,me,he,Re,_t,bt,Mt,en,lt,kt,kn,Ot,je,Be,tt,Bt,jn,Xt,Sn,te,ve,_e,Ce,xe,Pe,st,Je,ie,ee;if(((o=e.$)==null?void 0:o.value)!==void 0&&!Me(e.$.value))return(a=e.$)!=null&&a.deferredDropExpressions&&Ln(e,t,n),We(e.$.type)?"":lr(e.$.value,n,e);let r=(s=e.func.$)==null?void 0:s.value,i=((l=e.func.$)==null?void 0:l.type)??(we(r)?r.specializedType??r.type:void 0);if(ne(i)){let Q=(u=e.$)==null?void 0:u.runtimeArgExprsInOrder;if(Q){let oe=!1;if(S(e.func)&&E(e.func,".",2)){let be=e.func.args[0],Ee=(c=be==null?void 0:be.$)==null?void 0:c.type;Ee&&dt(Ee)&&(oe=!0)}let Ge=Q.map((be,Ee)=>{var ze,nt,He,Xe,Se,vt,Ie,pt,Tt;if((ze=be.$)!=null&&ze.variableName&&((nt=be.$)!=null&&nt.type)){let At=n,jt=At.currentClosureCaptures&&At.currentClosureCaptures.includes(be.$.variableName)&&K(be)&&be.$.env&&At.currentClosureCaptureFrameLevel!==void 0&&ao(be.token.value,be.$.env,At.currentClosureCaptureFrameLevel),Gt=G(be,t,n),sn=!1;if(K(be)&&be.$.env&&be.$.variableName){let hr=fe(be.$.env,be.$.variableName);hr.length>0&&hr[hr.length-1].isCompileTimeOnly&&(sn=!0)}let bn=(At.inAsyncStateMachine||At.inEffectStateMachine)&&Gt.startsWith("sm->"),mr=!1;if(Gt&&Gt!==be.$.variableName&&!jt&&!bn&&!sn){let hr=Qe(be.$.variableName,be.$.env);if(Gt!==hr){let Ar=be.$.convertedRuntimeType||be.$.type,lo=an(Ar,be.$.variableName,n);n.emitter.emitLine(`${t}${lo} = ${Gt};`),mr=!0,Hr(be.$.variableName,t,n)}}let Fi=mr?be.$.variableName:Gt;if((He=be.$)!=null&&He.deferredDupExpressions&&be.$.deferredDupExpressions.length>0){let hr=new Set;(Xe=be.$)!=null&&Xe.variableName&&hr.add(Qe(be.$.variableName,be.$.env)),Gt&&hr.add(Gt),K(be)&&hr.add(Qe(be.token.value,be.$.env));let Ar=be.$.deferredDupExpressions.find(lo=>{var Zo;let Fo=Zu(lo);return Fo?hr.has(Qe(Fo,(Zo=lo.$)==null?void 0:Zo.env)):!1});Ar&&(Jt(be,t,At),S(Ar)&&((Se=Ar.$)!=null&&Se.variableName)&&(Fi=Qe(Ar.$.variableName,Ar.$.env)))}if(oe&&Ee===0){if(S(e.func)&&E(e.func,".",2)){let Ar=e.func.args[0],lo=(vt=Ar==null?void 0:Ar.$)==null?void 0:vt.type,Fo=e.func.args[1];if(K(Fo)&&dt(lo)){let Zo=Fo.token.value;if(lo.trait.fields.find(zc=>zc.label===Zo))return bn?Gt:Le(Fi,be.$.type.isExtern==="c")}}let hr=(Ie=be.$)==null?void 0:Ie.type;return hr&&ot(hr)?bn?`${Gt}->data`:`${Le(Fi,be.$.type.isExtern==="c")}->data`:bn?`(${Gt}).data`:`(${Le(Fi,be.$.type.isExtern==="c")}).data`}else return jt||bn||sn?Gt:Le(Fi,be.$.type.isExtern==="c")}else if(oe&&Ee===0){let At=G(be,t,n);if(S(e.func)&&E(e.func,".",2)){let Gt=e.func.args[0],sn=(pt=Gt==null?void 0:Gt.$)==null?void 0:pt.type,bn=e.func.args[1];if(K(bn)&&dt(sn)){let mr=bn.token.value;if(sn.trait.fields.find(hr=>hr.label===mr))return At}}let jt=(Tt=be.$)==null?void 0:Tt.type;return jt&&ot(jt)?`(${At})->data`:`(${At}).data`}else return G(be,t,n)}),ge=Ge.join(", ");if(i.isExtern==="yo"&&i.externName){let be=i.externName;return va.includes(be)?$l(be,Ge,e,n,t):be==="__yo_thread_spawn"?gy(e,t,n):be==="__yo_worker_spawn"?hy(e,t,n):We(i.return.type)?(n.emitter.emitLine(`${t}${be}(${ge});`),(_=e.$)!=null&&_.deferredDropExpressions&&Ln(e,t,n),""):`${be}(${ge})`}{let be=n;if((f=be.currentEvidenceParams)!=null&&f.size){let Ee=(p=e.func.token)==null?void 0:p.value,ze;if(Ee==="."&&S(e.func)&&E(e.func,".",2)){let nt=e.func.args[1];nt&&K(nt)&&(Ee=nt.token.value);let He=e.func.args[0];if(He&&K(He))ze=He.token.value;else if(He&&S(He)&&E(He,".",2)){let Xe=He.args[0];Xe&&K(Xe)&&(ze=Xe.token.value)}}if(Ee&&Ee!=="."){for(let nt of be.currentEvidenceParams.values())if(nt.fieldLabel===Ee||nt.implicitLabel===Ee||nt.fieldPath[nt.fieldPath.length-1]===Ee){if(ze&&ze!==nt.implicitLabel)continue;return $y(nt.cParamName,i,Ge,Q,e,t,be,nt)}}}}if(we(r)){let be=ro(r);if(be)return $l(be,Ge,e,n,t);let Ee=r.specializedType??r.type,ze=n;if(ze.currentEvidenceParams&&r.isModuleEffectMember){let He,Xe=((d=e.func.$)==null?void 0:d.env)??((g=e.$)==null?void 0:g.env);if(Xe)for(let Se of ze.currentEvidenceParams.values()){let vt=fe(Xe,Se.implicitLabel),Ie=vt[vt.length-1],pt=(m=Ie==null?void 0:Ie.value)==null?void 0:m[0];if(pt&&xt(pt)){let Tt=pt,At=!0;for(let jt=0;jt<Se.fieldPath.length-1;jt++){let Gt=Se.fieldPath[jt],sn=Tt.type.fields.findIndex(bn=>bn.label===Gt);if(sn>=0&&Tt.fields[sn]&&xt(Tt.fields[sn]))Tt=Tt.fields[sn];else{At=!1;break}}if(At){let jt=Se.fieldPath[Se.fieldPath.length-1],Gt=Tt.type.fields.findIndex(sn=>sn.label===jt);if(Gt>=0){let sn=Tt.fields[Gt];if(sn&&we(sn)&&sn.funcId===r.funcId){He=Se;break}}}}}if(He){let Se=He.cParamName;return $y(Se,Ee,Ge,Q,e,t,ze,He)}}let nt=(h=n.functions[r.funcId])==null?void 0:h.cName;if(nt){let He=r.specializedType??r.type,Xe=An(He);if(Xe.length===0&&r.specializedType){let Ie=An(r.type);Ie.length>0&&Ie.some(pt=>pt.fieldFunctionType.forallParameters&&pt.fieldFunctionType.forallParameters.length>0)&&(Xe=Ie)}if(Xe.length>0){let{args:Ie,isHandlerInstallation:pt}=K_(Xe,r,e,n);if(Ie.length>0){let Tt=ge?`${ge}, ${Ie.join(", ")}`:Ie.join(", ");return X_(nt,Tt,Ee,e,Q,t,n,pt)}}let Se=r.isControlFunction||r.isModuleEffectMember||(($=(T=(v=r.body)==null?void 0:v.$)==null?void 0:T.effectAnalysis)==null?void 0:$.hasEffects),vt=!1;if(Se){if(r.isControlFunction||r.isModuleEffectMember){let Ie=((w=(b=e.func)==null?void 0:b.$)==null?void 0:w.env)??((C=e.$)==null?void 0:C.env);if(Ie){let pt=_l(Ie,Tt=>{var At;return Tt.isImplicit===!0&&we((At=Tt.value)==null?void 0:At[0])&&Tt.value[0].funcId===r.funcId});pt>=0&&pt>Ie.functionDeclarationFrameLevel&&((k=Ie.frames[pt])!=null&&k.isBeginBlockFrame)&&(vt=!0)}}else if(r.specializedType){let Ie=An(r.type);if(Ie.length>0){let pt=((N=(A=e.func)==null?void 0:A.$)==null?void 0:N.env)??((x=e.$)==null?void 0:x.env);if(pt)for(let Tt of Ie){let At=_l(pt,jt=>jt.isImplicit===!0&&(jt.name===Tt.implicitLabel||jt.name===Tt.fieldLabel));if(At>=0&&At>pt.functionDeclarationFrameLevel&&((V=pt.frames[At])!=null&&V.isBeginBlockFrame)){vt=!0;break}}}}}if(We(Ee.return.type))return n.emitter.emitLine(`${t}${nt}(${ge});`),(I=e.$)!=null&&I.deferredDropExpressions&&Ln(e,t,n),Se&&Ey(t,n,vt,e),"";{let Ie=(D=e.$)==null?void 0:D.variableName;if(Ie){let pt=((P=r.specializedType)==null?void 0:P.return.type)??Ee.return.type,Tt=(O=e.$)==null?void 0:O.type,At=Tt&&ft(Tt),jt=pt&&ft(pt),Gt;if(At&&jt){let bn=r.body;if(bn&&E(bn,"begin")){let mr=bn.args;if(mr.length>0){let Fi=mr[mr.length-1];Xn(Fi)&&(bn=Fi)}}if(bn&&Xn(bn)&&((J=bn.$)!=null&&J.asyncStateMachineStructName)){let mr=bn.$.asyncStateMachineStructName;Gt=`${mr}*`,n.tempVarAsyncStructNames||(n.tempVarAsyncStructNames=new Map),n.tempVarAsyncStructNames.set(Ie,mr)}else Tt&&B(Tt)&&Tt.resolvedConcreteType?Gt=H(Tt,n):Gt=H(pt,n)}else Gt=H(pt??Tt,n);let sn=n;return sn.declaredTempVars||(sn.declaredTempVars=new Set),sn.declaredTempVars.has(Ie)||(sn.declaredTempVars.add(Ie),n.emitter.emitLine(`${t}${Gt} ${Ie} = ${nt}(${ge});`)),Hr(Ie,t,n),(U=e.$)!=null&&U.deferredDropExpressions&&Ln(e,t,n),Se&&Ey(t,n,vt,e),Ie}else return`// Error: Regular function call returns ${H(((W=r.specializedType)==null?void 0:W.return.type)??Ee.return.type,n)} but no temp variable assigned`}}}else{let be=n.externFunctions[i.id];if(be){let Ee=be.cName;return(q=e.$)!=null&&q.deferredDropExpressions&&Ln(e,t,n),`${Ee}(${ge})`}else{let Ee=G(e.func,t,n);if(r&&ne(r.type)){let Ie=An(r.type);if(Ie.length>0){let{args:pt,isHandlerInstallation:Tt}=K_(Ie,r,e,n);if(pt.length>0){let At=ge?`${ge}, ${pt.join(", ")}`:pt.join(", ");return X_(Ee,At,i,e,Q,t,n,Tt)}}}let ze=((j=e.$)==null?void 0:j.type)??i.return.type,nt=H(ze,n),He=i.parameters.filter(Ie=>!Ie.isCompileTimeOnly).map(Ie=>H(Ie.type,n)),Xe=`((${nt} (*)(${He.join(", ")}))${Ee})`,Se=n,vt=Ee.includes("__capture.")&&!!Se.inAsyncStateMachine;if(vt&&n.emitter.emitLine(`${t}__yo_effect_escaped = 0;`),We(i.return.type)||We(ze)){if(n.emitter.emitLine(`${t}${Xe}(${ge});`),(ue=e.$)!=null&&ue.deferredDropExpressions&&Ln(e,t,n),vt){if(n.emitter.emitLine(`${t}if (__yo_effect_escaped) {`),Q){for(let Ie of Q)if((ye=Ie.$)!=null&&ye.variableName&&((X=Ie.$)!=null&&X.type)&&ht(Ie.$.type)){let pt=Ty(Le(Ie.$.variableName),n),Tt=To(pt,Ie.$.type,n);Tt&&(n.emitter.emitLine(`${t} ${Tt};`),n.emitter.emitLine(`${t} memset(&${pt}, 0, sizeof(${pt}));`))}}ai({emitter:n.emitter,indent:t+" ",resultCode:void 0,debugLabel:void 0}),n.emitter.emitLine(`${t}}`)}return""}else{let Ie=(re=e.$)==null?void 0:re.variableName;if(Ie){let pt=i.return.type,Tt=(le=e.$)==null?void 0:le.type,At=Tt&&pt&&ft(Tt)&&ft(pt)?pt:Tt??pt,jt=n;if(jt.declaredTempVars||(jt.declaredTempVars=new Set),jt.declaredTempVars.has(Ie)||(jt.declaredTempVars.add(Ie),n.emitter.emitLine(`${t}${H(At,n)} ${Ie} = ${Xe}(${ge});`)),Hr(Ie,t,n),(Oe=e.$)!=null&&Oe.deferredDropExpressions&&Ln(e,t,n),vt){if(n.emitter.emitLine(`${t}if (__yo_effect_escaped) {`),Q){for(let Gt of Q)if(($e=Gt.$)!=null&&$e.variableName&&((ae=Gt.$)!=null&&ae.type)&&ht(Gt.$.type)){let sn=Ty(Le(Gt.$.variableName),n),bn=To(sn,Gt.$.type,n);bn&&(n.emitter.emitLine(`${t} ${bn};`),n.emitter.emitLine(`${t} memset(&${sn}, 0, sizeof(${sn}));`))}}ai({emitter:n.emitter,indent:t+" ",resultCode:void 0,debugLabel:void 0}),n.emitter.emitLine(`${t}}`)}return Ie}else return`// Error: Function parameter call returns ${H(i.return.type,n)} but no temp variable assigned`}}}}}else if(i&&tr(i)){let Q=i,oe=pr(Q),Ge=dt(Q);{let ge=oe.isFn.callType,be=(Ae=e.$)==null?void 0:Ae.runtimeArgExprsInOrder;if(be){let Ee=n;for(let Se of be)if((se=Se.$)!=null&&se.variableName&&((me=Se.$)!=null&&me.type)){let vt=Ee.currentClosureCaptures&&Ee.currentClosureCaptures.includes(Se.$.variableName)&&K(Se)&&Se.$.env&&Ee.currentClosureCaptureFrameLevel!==void 0&&ao(Se.token.value,Se.$.env,Ee.currentClosureCaptureFrameLevel),Ie=G(Se,t,n),pt=!1;if(K(Se)&&Se.$.env&&Se.$.variableName){let At=fe(Se.$.env,Se.$.variableName);At.length>0&&At[At.length-1].isCompileTimeOnly&&(pt=!0)}let Tt=(Ee.inAsyncStateMachine||Ee.inEffectStateMachine)&&Ie.startsWith("sm->");if(Ie&&Ie!==Se.$.variableName&&!vt&&!Tt&&!pt){let At=Se.$.convertedRuntimeType||Se.$.type,jt=an(At,Se.$.variableName,n);n.emitter.emitLine(`${t}${jt} = ${Ie};`),Hr(Se.$.variableName,t,n)}}let ze=G(e.func,t,n),nt=be.map(Se=>{var vt,Ie,pt,Tt;if((vt=Se.$)!=null&&vt.variableName&&((Ie=Se.$)!=null&&Ie.type)){if(Ee.currentClosureCaptures&&Ee.currentClosureCaptures.includes(Se.$.variableName)&&K(Se)&&Se.$.env&&Ee.currentClosureCaptureFrameLevel!==void 0&&ao(Se.token.value,Se.$.env,Ee.currentClosureCaptureFrameLevel))return G(Se,t,n);{let jt=Qe(Se.$.variableName,Se.$.env),Gt=(Ee.inAsyncStateMachine||Ee.inEffectStateMachine)&&jt.startsWith("sm->"),sn=jt;if((pt=Se.$)!=null&&pt.deferredDupExpressions&&Se.$.deferredDupExpressions.length>0){Jt(Se,t,Ee);let bn=Se.$.deferredDupExpressions[0];S(bn)&&((Tt=bn.$)!=null&&Tt.variableName)&&(sn=Qe(bn.$.variableName,bn.$.env))}return Gt?jt:sn}}else return G(Se,t,n)}),He;if(Ge){let Se=[`(${ze}).data`,...nt];He=`(${ze}).vtable->call(${Se.join(", ")})`}else{let Se;if(B(Q)){let Ie=Q;Ie.resolvedConcreteType&&(Se=Ie.resolvedConcreteType.id)}let vt=Se?n.implClosureCallMap.get(Se):void 0;if(vt){let Ie=An(ge);if(Ie.length>0){let{args:Tt,isHandlerInstallation:At}=K_(Ie,{},e,Ee);if(Tt.length>0){let jt=[`&(${ze})`,...nt,...Tt];return X_(vt.functionCName,jt.join(", "),ge,e,be,t,Ee,At)}}let pt=[`&(${ze})`,...nt];He=`${vt.functionCName}(${pt.join(", ")})`}else{let Ie=[`(${ze}).data`,...nt];He=`(${ze}).call(${Ie.join(", ")})`}}let Xe=ge.return.type;if(We(Xe))return n.emitter.emitLine(`${t}${He};`),(he=e.$)!=null&&he.deferredDropExpressions&&Ln(e,t,n),"";{let Se=(Re=e.$)==null?void 0:Re.variableName;return Se?(n.emitter.emitLine(`${t}${H(Xe,n)} ${Se} = ${He};`),Hr(Se,t,n),(_t=e.$)!=null&&_t.deferredDropExpressions&&Ln(e,t,n),Se):`// Error: Closure call returns ${H(Xe,n)} but no temp variable assigned`}}else return"// Error: No runtime args found for closure call"}}else if(Y(r))if(Ue(r.value)){let Q=r.value,oe=(bt=e.$)==null?void 0:bt.runtimeArgExprsInOrder,Ge=(Mt=n.types[Q.id])==null?void 0:Mt.cName,ge=Q.fields.map(Ee=>Ee.label),be=(en=e.$)==null?void 0:en.variableName;if(oe&&Ge&&ge.length===oe.length){if(Q.isNewtype&&Q.fields.length===1){let Ee=oe[0],ze=G(Ee,t,n),nt=ze;if((lt=Ee.$)!=null&&lt.deferredDupExpressions&&Ee.$.deferredDupExpressions.length>0){let Xe=n;if((kt=Ee.$)!=null&&kt.variableName&&((kn=Ee.$)!=null&&kn.type)){let vt=Qe(Ee.$.variableName,Ee.$.env);if(ze!==vt){let Ie=Ee.$.type,pt=H(Ie,n);n.emitter.emitLine(`${t}${pt} ${vt} = ${ze};`)}}Jt(Ee,t,Xe);let Se=Ee.$.deferredDupExpressions[0];S(Se)&&((Ot=Se.$)!=null&&Ot.variableName)&&(nt=Qe(Se.$.variableName,Se.$.env))}let He=`((${Ge})(${nt}))`;if(be&&((je=e.$)!=null&&je.type)){let Xe=an(e.$.type,be,n);return n.emitter.emitLine(`${t}${Xe} = ${He};`),Hr(be,t,n),be}else return He}if(Q.isReferenceSemantics){let Ee=n,ze=oe.map(Xe=>{var vt,Ie,pt,Tt;let Se=G(Xe,t,n);if((vt=Xe.$)!=null&&vt.deferredDupExpressions&&Xe.$.deferredDupExpressions.length>0){if((Ie=Xe.$)!=null&&Ie.variableName&&((pt=Xe.$)!=null&&pt.type)){let jt=Qe(Xe.$.variableName,Xe.$.env);if(Se!==jt){let Gt=Xe.$.type,sn=H(Gt,n);n.emitter.emitLine(`${t}${sn} ${jt} = ${Se};`)}}Jt(Xe,t,Ee);let At=Xe.$.deferredDupExpressions[0];if(S(At)&&((Tt=At.$)!=null&&Tt.variableName))return Qe(At.$.variableName,At.$.env)}return Se}).join(", "),He=`${`__yo_new_${Ge}`}(${ze})`;if(be&&((Be=e.$)!=null&&Be.type)){let Xe=an(e.$.type,be,n);return n.emitter.emitLine(`${t}${Xe} = ${He};`),Hr(be,t,n),be}else return He}else{let Ee=n,ze=oe.map((He,Xe)=>{var pt,Tt,At,jt;let Se=G(He,t,n),vt=gt(Q)?`_${Xe}`:Le(ge[Xe],Q.isExtern==="c"),Ie=Se;if((pt=He.$)!=null&&pt.deferredDupExpressions&&He.$.deferredDupExpressions.length>0){if((Tt=He.$)!=null&&Tt.variableName&&((At=He.$)!=null&&At.type)){let sn=Qe(He.$.variableName,He.$.env),bn=He.$.type,mr=H(bn,n);Se!==sn&&n.emitter.emitLine(`${t}${mr} ${sn} = ${Se};`)}Jt(He,t,Ee);let Gt=He.$.deferredDupExpressions[0];S(Gt)&&((jt=Gt.$)!=null&&jt.variableName)&&(Ie=Qe(Gt.$.variableName,Gt.$.env))}return`.${vt} = `+Ie}).join(", "),nt=`(${Ge}){ ${ze} }`;if(be&&((tt=e.$)!=null&&tt.type)){let He=an(e.$.type,be,n);return n.emitter.emitLine(`${t}${He} = ${nt};`),Hr(be,t,n),be}else return nt}}}else{if(tr(r.value))return"// Error: Closure construction should have been handled by closureFunctionValue check at top of generateFuncCall";if(Kt(r.value)){let Q=(Bt=e.$)==null?void 0:Bt.variableName,oe=e.args[0];if(oe&&S(oe)&&E(oe,":",2)){let Ge=oe.args[0],ge=oe.args[1],be=(jn=n.types[r.value.id])==null?void 0:jn.cName;if(be&&K(Ge)&&ge){let Ee=n,ze=Ge.token.value,nt=Qe(ze,(Xt=Ge.$)==null?void 0:Xt.env),Xe=G(ge,t,n);if((Sn=ge.$)!=null&&Sn.deferredDupExpressions&&ge.$.deferredDupExpressions.length>0){Jt(ge,t,Ee);let vt=ge.$.deferredDupExpressions[0];S(vt)&&((te=vt.$)!=null&&te.variableName)&&(Xe=Qe(vt.$.variableName,vt.$.env))}let Se=`(${be}){ .${nt} = ${Xe} }`;if(Q&&((ve=e.$)!=null&&ve.type)){let vt=an(e.$.type,Q,n);return n.emitter.emitLine(`${t}${vt} = ${Se};`),Hr(Q,t,n),Q}else return Se}}}else if(Ze(r.value)){let Q=r.value,oe=(_e=e.$)==null?void 0:_e.runtimeArgExprsInOrder,Ge=(Ce=n.types[Q.id])==null?void 0:Ce.cName,ge=(xe=e.$)==null?void 0:xe.variableName;if(Q.selectedVariantName&&oe&&Ge){if(rr(Q)){let He=Q.selectedVariantName,Xe=Q.variants.find(Se=>Se.name===He);if(Xe){if(!Xe.fields||Xe.fields.length===0){let Se="NULL";if(ge&&((Pe=e.$)!=null&&Pe.type)){let vt=an(e.$.type,ge,n);return n.emitter.emitLine(`${t}${vt} = ${Se};`),Hr(ge,t,n),ge}else return Se}else if(Xe.fields.length===1){let Se=G(oe[0],t,n);if(ge&&((st=e.$)!=null&&st.type)){let vt=an(e.$.type,ge,n);return n.emitter.emitLine(`${t}${vt} = ${Se};`),Hr(ge,t,n),ge}else return Se}}}if(ni(Q)){let He=Q.selectedVariantName,Xe=er(Q,He,n);if(ge&&((Je=e.$)!=null&&Je.type)){let Se=an(e.$.type,ge,n);return n.emitter.emitLine(`${t}${Se} = ${Xe};`),Hr(ge,t,n),ge}else return Xe}let ze=Q.selectedVariantName,nt=Q.variants.find(He=>He.name===ze);if(nt){let He=((ie=nt.fields)==null?void 0:ie.filter(Ie=>!We(Ie.type)))||[],Xe=n,Se=oe.map((Ie,pt)=>{var Tt,At,jt,Gt,sn;if(nt.fields){let bn=nt.fields[pt];if(bn&&!We(bn.type)){let mr=G(Ie,t,n),Fi=Qe(bn.label,(Tt=Ie.$)==null?void 0:Tt.env),hr=mr;if((At=Ie.$)!=null&&At.variableName&&((jt=Ie.$)!=null&&jt.type)){let Ar=Xe.currentClosureCaptures&&Xe.currentClosureCaptures.includes(Ie.$.variableName)&&K(Ie)&&Ie.$.env&&Xe.currentClosureCaptureFrameLevel!==void 0&&ao(Ie.token.value,Ie.$.env,Xe.currentClosureCaptureFrameLevel),lo=(Xe.inAsyncStateMachine||Xe.inEffectStateMachine)&&mr.startsWith("sm->"),Fo=!1;if(K(Ie)&&Ie.$.env&&Ie.$.variableName){let Ia=fe(Ie.$.env,Ie.$.variableName);Ia.length>0&&Ia[Ia.length-1].isCompileTimeOnly&&(Fo=!0)}let Zo=!1;if(mr&&mr!==Ie.$.variableName&&!Ar&&!lo&&!Fo){let Ia=Qe(Ie.$.variableName,Ie.$.env);if(mr!==Ia){let zc=an(Ie.$.type,Ie.$.variableName,n);n.emitter.emitLine(`${t}${zc} = ${mr};`),Zo=!0,Hr(Ie.$.variableName,t,n)}}Zo&&(hr=Qe(Ie.$.variableName,Ie.$.env))}if((Gt=Ie.$)!=null&&Gt.deferredDupExpressions&&Ie.$.deferredDupExpressions.length>0){Jt(Ie,t,Xe);let Ar=Ie.$.deferredDupExpressions[0];S(Ar)&&((sn=Ar.$)!=null&&sn.variableName)&&(hr=Qe(Ar.$.variableName,Ar.$.env))}return`.${Fi} = `+hr}return""}else return""}).filter(Ie=>Ie).join(", "),vt=He.length>0?`(${Ge}){ .tag = ${er(Q,ze,n)}, .data = { .${ze} = { ${Se} } } }`:`(${Ge}){ .tag = ${er(Q,ze,n)} }`;if(ge&&((ee=e.$)!=null&&ee.type)){let Ie=an(e.$.type,ge,n);return n.emitter.emitLine(`${t}${Ie} = ${vt};`),Hr(ge,t,n),ge}else return vt}}}}else if(ut(i)){let Q=e.args[0];if(Q&&S(Q)&&(E(Q,"..")||E(Q,"..="))){let ge=E(Q,"..="),be=G(e.func,t,n),Ee=G(Q.args[0],t,n),ze=G(Q.args[1],t,n),nt=`Slice_${Le(H(i.childType,n))}`;return n.sliceStructTypes.has(nt)||n.sliceStructTypes.set(nt,{childType:H(i.childType,n)}),ge?`(${nt}){ .data = &${be}.data[${Ee}], .length = (${ze}) - (${Ee}) + 1 }`:`(${nt}){ .data = &${be}.data[${Ee}], .length = (${ze}) - (${Ee}) }`}let oe=G(e.func,t,n),Ge=G(Q,t,n);return`${oe}.data[${Ge}]`}else if(Vt(i)){let Q=e.args[0];if(Q&&S(Q)&&(E(Q,"..")||E(Q,"..="))){let ge=E(Q,"..="),be=G(e.func,t,n),Ee=G(Q.args[0],t,n),ze=G(Q.args[1],t,n),nt=`Slice_${Le(H(i.childType,n))}`;return n.sliceStructTypes.has(nt)||n.sliceStructTypes.set(nt,{childType:H(i.childType,n)}),ge?`(${nt}){ .data = &${be}.data[${Ee}], .length = (${ze}) - (${Ee}) + 1 }`:`(${nt}){ .data = &${be}.data[${Ee}], .length = (${ze}) - (${Ee}) }`}let oe=G(e.func,t,n),Ge=G(Q,t,n);return`${oe}.data[${Ge}]`}else if(i&&ot(i)&&Vt(i.childType)){let Q=G(e.func,t,n),oe=G(e.args[0],t,n);return`${Q}.data[${oe}]`}}function Ey(e,t,n,r){var o,a;let i=t.emitter;if(i.emitLine(`${e}if (__yo_effect_escaped) {`),t.inAsyncStateMachine||(wr(e+" ",t,r,!1,!0,!1),wi(e+" ",t,r)),t.inAsyncStateMachine)n&&i.emitLine(`${e} __yo_effect_escaped = 0;`),ai({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&&!We(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&&!We(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 $y(e,t,n,r,i,o,a,s){var p,d,g,m,h,v,T,$,b,w,C,k,A,N;let l=n.join(", "),u=t.return.type,c=a.emitter,_,f=!1;if(s!=null&&s.fieldFunctionType.forallParameters&&s.fieldFunctionType.forallParameters.length>0){let x=s.fieldFunctionType.return.type;f=B(x);let V=f?"void":(p=i.$)!=null&&p.type?H(i.$.type,a):H(u,a),I=[],P=s.fieldFunctionType.parameters.filter(J=>!J.isCompileTimeOnly);for(let J=0;J<P.length;J++){let U=P[J].type,W=B(U)&&((g=(d=r==null?void 0:r[J])==null?void 0:d.$)!=null&&g.type)?r[J].$.type:U,q=ne(W)?oo(W,"(*)",a):H(W,a);I.push(q)}let O=I.join(", ");_=`((${V} (*)(${O}))${e})`}else _=e;if(We(u)){if(c.emitLine(`${o}${_}(${l});`),(m=i.$)!=null&&m.deferredDropExpressions&&Ln(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(wr(o+" ",a,i,!1,!0,!1),wi(o+" ",a,i)),a.inAsyncStateMachine)ai({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let x=(h=a.currentFunctionType)==null?void 0:h.return.type;if(x&&!We(x)){let V=H(x,a);V!=="void"?c.emitLine(`${o} return (${V}){0};`):c.emitLine(`${o} return;`)}else c.emitLine(`${o} return;`)}return c.emitLine(`${o}}`),""}else{let x=(v=i.$)==null?void 0:v.variableName;if(x){let V=(T=s==null?void 0:s.fieldFunctionType.forallParameters)!=null&&T.length&&(($=i.$)!=null&&$.type)?i.$.type:u,I=H(V,a);if(I==="void"||We(V)){if(c.emitLine(`${o}${_}(${l});`),(b=i.$)!=null&&b.deferredDropExpressions&&Ln(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(wr(o+" ",a,i,!1,!0,!1),wi(o+" ",a,i)),a.inAsyncStateMachine)ai({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let D=(w=a.currentFunctionType)==null?void 0:w.return.type;if(D&&!We(D)){let P=H(D,a);P!=="void"?c.emitLine(`${o} return (${P}){0};`):c.emitLine(`${o} return;`)}else c.emitLine(`${o} return;`)}return c.emitLine(`${o}}`),""}if(f){if(c.emitLine(`${o}${I} ${x} = (${I}){0};`),c.emitLine(`${o}${_}(${l});`),(C=i.$)!=null&&C.deferredDropExpressions&&Ln(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(wr(o+" ",a,i,!1,!0,!1),wi(o+" ",a,i)),a.inAsyncStateMachine)ai({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let D=(k=a.currentFunctionType)==null?void 0:k.return.type;if(D&&!We(D)){let P=H(D,a);P!=="void"?c.emitLine(`${o} return (${P}){0};`):c.emitLine(`${o} return;`)}else c.emitLine(`${o} return;`)}return c.emitLine(`${o}}`),Hr(x,o,a),x}if(c.emitLine(`${o}${I} ${x} = ${_}(${l});`),(A=i.$)!=null&&A.deferredDropExpressions&&Ln(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(wr(o+" ",a,i,!1,!0,!1),wi(o+" ",a,i)),a.inAsyncStateMachine)ai({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let D=(N=a.currentFunctionType)==null?void 0:N.return.type;if(D&&!We(D)){let P=H(D,a);P!=="void"?c.emitLine(`${o} return (${P}){0};`):c.emitLine(`${o} return;`)}else c.emitLine(`${o} return;`)}return c.emitLine(`${o}}`),x}else return`${_}(${l})`}}function K_(e,t,n,r){var s,l,u,c,_,f,p,d,g,m,h,v,T,$,b,w,C;let i=[],o=(l=(s=t.body)==null?void 0:s.$)==null?void 0:l.effectAnalysis,a=!1;for(let k of e){let A=`${k.implicitLabel}.${k.fieldLabel}`,N=!1;if(r.currentEvidenceParams){let x=r.currentEvidenceParams.get(A);x&&(i.push(x.cParamName),N=!0)}if(!N){if(o){if(o.effectHandlerInfos)for(let x of o.effectHandlerInfos){if(x.effectParameterName!==k.fieldLabel&&x.effectParameterName!==k.implicitLabel)continue;let V=x.handlerValue;if(V&&we(V)){if((u=V.specializedFunctionCaches)!=null&&u.length){let D=V.specializedFunctionCaches[0].specializedFunction,P=(c=r.functions[D.funcId])==null?void 0:c.cName;if(P){i.push(`(void*)${P}`),N=!0,a=!0;break}}let I=(_=r.functions[V.funcId])==null?void 0:_.cName;if(I){i.push(I),N=!0,a=!0;break}}}if(!N&&o.handlerValue&&e.length===1){let x=o.handlerValue;if(x&&we(x)){if((f=x.specializedFunctionCaches)!=null&&f.length){let V=x.specializedFunctionCaches[0].specializedFunction,I=(p=r.functions[V.funcId])==null?void 0:p.cName;I&&(i.push(`(void*)${I}`),N=!0,a=!0)}if(!N){let V=(d=r.functions[x.funcId])==null?void 0:d.cName;V&&(i.push(V),N=!0,a=!0)}}}}if(!N){let x=((g=n.func.$)==null?void 0:g.env)??((m=n.$)==null?void 0:m.env);if(x){let V=fe(x,k.implicitLabel),I=Dr(x,U=>U.isImplicit===!0&&ne(U.type)&&ne(k.fieldFunctionType)&&U.type===k.fieldFunctionType),D=V[V.length-1],P=I[I.length-1],O=P&&P!==D?P:D??P,J=(h=O==null?void 0:O.value)==null?void 0:h[0];if(J&&xt(J)){let U=J,W=!0;for(let q=0;q<k.fieldPath.length-1;q++){let j=k.fieldPath[q],ue=U.type.fields.findIndex(ye=>ye.label===j);if(ue>=0&&U.fields[ue]&&xt(U.fields[ue]))U=U.fields[ue];else{W=!1;break}}if(W){let q=k.fieldPath[k.fieldPath.length-1],j=U.type.fields.findIndex(ue=>ue.label===q);if(j>=0){let ue=U.fields[j];if(ue&&we(ue)){if(((v=ue.specializedFunctionCaches)==null?void 0:v.length)>0){let ye=ue.specializedFunctionCaches[0].specializedFunction,X=(T=r.functions[ye.funcId])==null?void 0:T.cName;X&&(i.push(`(void*)${X}`),N=!0)}if(!N){let ye=($=r.functions[ue.funcId])==null?void 0:$.cName;ye&&(i.push(ye),N=!0)}}}}}else if(J&&we(J)){if((b=J.specializedFunctionCaches)!=null&&b.length){let U=J.specializedFunctionCaches[0].specializedFunction,W=(w=r.functions[U.funcId])==null?void 0:w.cName;W&&(i.push(`(void*)${W}`),N=!0)}if(!N){let U=(C=r.functions[J.funcId])==null?void 0:C.cName;U&&(i.push(U),N=!0)}}N&&(a=!0)}}if(!N&&r.stateMachineVariables){let x=k.fieldPath[k.fieldPath.length-1];for(let[,V]of r.stateMachineVariables)if(V.name===x&&V.kind==="outer"){i.push(`sm->__capture.${x}`),N=!0;break}}if(!N)break}}return{args:i,isHandlerInstallation:a}}function X_(e,t,n,r,i,o,a,s=!1){var c,_,f,p,d;let l=a.emitter,u=n.return.type;if(l.emitLine(`${o}__yo_effect_escaped = 0;`),We(u)){if(l.emitLine(`${o}${e}(${t});`),(c=r.$)!=null&&c.deferredDropExpressions&&Ln(r,o,a),l.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(wr(o+" ",a,r,!1,!0,!1),wi(o+" ",a,r)),a.inAsyncStateMachine)ai({emitter:l,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let g=(_=a.currentFunctionType)==null?void 0:_.return.type;if(s&&l.emitLine(`${o} __yo_effect_escaped = 0;`),g&&!We(g))if(s){let m=H(g,a);m!=="void"?(l.emitLine(`${o} ${m} _esc_result;`),l.emitLine(`${o} memcpy(&_esc_result, __yo_effect_escape_value, sizeof(${m}));`),l.emitLine(`${o} return _esc_result;`)):l.emitLine(`${o} return;`)}else{let m=H(g,a);m!=="void"?l.emitLine(`${o} return (${m}){0};`):l.emitLine(`${o} return;`)}else l.emitLine(`${o} return;`)}return l.emitLine(`${o}}`),""}else{let g=(f=r.$)==null?void 0:f.variableName;if(g){let m=H(u,a);if(l.emitLine(`${o}${m} ${g} = ${e}(${t});`),Hr(g,o,a),(p=r.$)!=null&&p.deferredDropExpressions&&Ln(r,o,a),l.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(wr(o+" ",a,r,!1,!0,!1),wi(o+" ",a,r)),a.inAsyncStateMachine)ai({emitter:l,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let h=(d=a.currentFunctionType)==null?void 0:d.return.type;if(s&&h&&!We(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&&!We(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})`}}var Cy=Z(()=>{mt();fi();qt();Te();Ne();at();Fe();pl();Ea();Wt();ha();hl();ss();kr();yn();Y_();j_();Tl()});function ky(e,t,n){var a,s,l;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 u=e.args[0];if((s=u.$)!=null&&s.value&&ct(u.$.value)){let c=u.$.value.value;r.emitLine(`${t}fprintf(stderr, "%s\\n", ${JSON.stringify(c)});`),r.emitLine(`${t}abort();`)}else{let c=G(u,t,n),_=(l=u.$)==null?void 0:l.type;_&&Ue(_)&&Gr(_)&&_.typeName==="str"?r.emitLine(`${t}fprintf(stderr, "%.*s\\n", (int)${c}.length, ${c}.data);`):r.emitLine(`${t}fprintf(stderr, "%s\\n", ${c});`),r.emitLine(`${t}abort();`)}}else return`// Error: panic accepts 0 or 1 arguments, got ${e.args.length}`;return`(*((${H(i,n)}*)NULL))`}var wy=Z(()=>{Ne();Fe();Wt();yn()});function LC(e,t){if(!e)return"r";if(e.startsWith("raw:"))return e.slice(4);let n=wC[e];if(n)return n;let r=kC[e];return r?r[t]??r.x86_64??"r":e}function AC(e,t){let n="",r=0;for(;r<e.length;)if(e[r]==="{"){if(r+1<e.length&&e[r+1]==="{"){n+="{",r+=2;continue}let i=e.indexOf("}",r+1);if(i===-1){n+=e[r],r++;continue}let o=e.slice(r+1,i),a=o.indexOf(":"),s,l;a>=0?(s=o.slice(0,a),l=o.slice(a+1)):s=o;let u=l?FC[l]??l:void 0,c=parseInt(s,10);isNaN(c)?u?n+=`%${u}[${s}]`:n+=`%[${s}]`:u?n+=`%${u}${c}`:n+=`%${c}`,r=i+1}else e[r]==="}"&&r+1<e.length&&e[r+1]==="}"?(n+="}",r+=2):(n+=e[r],r++);return n}function SC(e,t,n,r){var h,v,T,$,b;let i=e.args,o=n.targetInfo.arch;if(r==="const_val"){let w,C=0;i.length===2&&((h=i[0].$)!=null&&h.value)&&ct(i[0].$.value)&&(w=i[0].$.value.value,C=1);let k=G(i[C],t,n);return{kind:"const_val",name:w,constraint:"",cExpr:k,cType:"",isDiscarded:!1,isVariableTarget:!1}}if(r==="sym"){let w,C=0;i.length===2&&((v=i[0].$)!=null&&v.value)&&ct(i[0].$.value)&&(w=i[0].$.value.value,C=1);let k=G(i[C],t,n);return{kind:"sym",name:w,constraint:"i",cExpr:k,cType:"",isDiscarded:!1,isVariableTarget:!1}}let a,s=0;if(i.length>=2){let w=i[0];(T=w.$)!=null&&T.value&&ct(w.$.value)&&!(w.tag==="Atom"&&Fy(w.token.value))&&(a=w.$.value.value,s=1)}let l=s<i.length-1,u,c;l?(u=IC(i[s],t,n),c=s+1):(a!==void 0&&(u=a),c=s);let _=LC(u,o),f=i[c];if(f.tag==="Atom"&&f.token.value==="_")return{kind:r,name:a,constraint:_,cExpr:"",cType:"int32_t",isDiscarded:!0,isVariableTarget:!1};if(($=f.$)!=null&&$.value&&Y(f.$.value)){let w=f.$.value.value,C=H(w,n);return{kind:r,name:a,constraint:_,cExpr:"",cType:C,isDiscarded:!1,isVariableTarget:!1}}let p=G(f,t,n),d=H((b=f.$)==null?void 0:b.type,n),m=(r==="out"||r==="lateout")&&f.tag==="Atom";return{kind:r,name:a,constraint:_,cExpr:p,cType:d,isDiscarded:!1,isVariableTarget:m}}function Fy(e){return["reg","reg_byte","reg_abcd","xmm_reg","ymm_reg","imm","mem"].includes(e)}function IC(e,t,n){var r,i;if(e.tag==="Atom"&&Fy(e.token.value))return e.token.value;if((r=e.$)!=null&&r.value&&ct(e.$.value))return e.$.value.value;if(E(e,"raw",1)){let o=e;if((i=o.args[0].$)!=null&&i.value&&ct(o.args[0].$.value))return`raw:${o.args[0].$.value.value}`}return"r"}function NC(e,t){var i;let n=[];if((e.func.tag==="Atom"?e.func.token.value:"clobber")==="clobber_abi"){let o=t.targetInfo.arch;if(o==="x86_64")n.push("rax","rcx","rdx","rsi","rdi","r8","r9","r10","r11","xmm0","xmm1","xmm2","xmm3","xmm4","xmm5","xmm6","xmm7","xmm8","xmm9","xmm10","xmm11","xmm12","xmm13","xmm14","xmm15","cc","memory");else if(o==="aarch64"){for(let a=0;a<=18;a++)n.push(`x${a}`);n.push("x30");for(let a=0;a<=31;a++)n.push(`v${a}`);n.push("cc","memory")}return n}for(let o of e.args)(i=o.$)!=null&&i.value&&ct(o.$.value)?n.push(o.$.value.value):o.tag==="Atom"&&n.push(o.token.value);return n}function xC(e){let t={isVolatile:!0,intelSyntax:!1,noreturn:!1,pure:!1};for(let n of e.args)if(n.tag==="Atom")switch(n.token.value){case"pure":t.pure=!0,t.isVolatile=!1;break;case"intel_syntax":t.intelSyntax=!0;break;case"noreturn":t.noreturn=!0;break;case"volatile":t.isVolatile=!0;break}return t}function Ly(e,t,n){var x,V;let r=n.emitter,i=(x=e.$)==null?void 0:x.type;if(!i)return"/* Error: asm() missing type information */";if(Zn(n.targetInfo))return r.emitLine(`${t}/* Error: inline assembly is not supported on WebAssembly */`),r.emitLine(`${t}abort();`),`(*((${H(i,n)}*)NULL))`;let o=[],a=0;for(;a<e.args.length;){let I=e.args[a];if(S(I))break;if((V=I.$)!=null&&V.value&&ct(I.$.value))o.push(I.$.value.value),a++;else break}let s=o.join(`
11090
+ `),l=[],u=[],c={isVolatile:!0,intelSyntax:!1,noreturn:!1,pure:!1};for(;a<e.args.length;){let I=e.args[a];if(!S(I)){a++;continue}let D=I.func.tag==="Atom"?I.func.token.value:void 0;if(!D){a++;continue}["in","out","inout","lateout","inlateout","const_val","sym"].includes(D)?l.push(SC(I,t,n,D)):D==="clobber"||D==="clobber_abi"?u.push(...NC(I,n)):D==="asm_options"&&(c=xC(I)),a++}let _=new Map;for(let I=0;I<l.length;I++)l[I].name&&_.set(l[I].name,I);let f=s;for(let I=0;I<l.length;I++){let D=l[I];D.kind==="const_val"&&(D.name&&(f=f.replace(new RegExp(`\\{${D.name}(?::[^}]*)?\\}`,"g"),D.cExpr)),f=f.replace(new RegExp(`\\{${I}(?::[^}]*)?\\}`,"g"),D.cExpr))}let p=AC(f,_),d=[],g=[],m=[];for(let I=0;I<l.length;I++){let D=l[I];if(D.isDiscarded){let P=`__asm_discard_${Q_++}`;m.push({varName:P,cType:D.cType,operandIdx:I}),r.emitLine(`${t}${D.cType} ${P};`)}else if(D.kind==="out"||D.kind==="lateout"){if(!D.isVariableTarget){if(D.cType){let P=`__asm_out_${Q_++}`;d.push({varName:P,cType:D.cType,operandIdx:I}),r.emitLine(`${t}${D.cType} ${P};`)}}}else if(D.kind==="inout"||D.kind==="inlateout"){let P=`__asm_inout_${Q_++}`;g.push({varName:P,cType:D.cType,initExpr:D.cExpr,operandIdx:I}),r.emitLine(`${t}${D.cType} ${P} = ${D.cExpr};`)}}let h=c.isVolatile?" __volatile__":"",v=p;c.intelSyntax&&(n.needsIntelAsmSyntax=!0);let T=JSON.stringify(v),$=[];for(let I=0;I<l.length;I++){let D=l[I];if(D.kind==="in"||D.kind==="const_val"||D.kind==="sym")continue;let P;D.kind==="out"||D.kind==="lateout"?P=D.kind==="lateout"?"=&":"=":P=D.kind==="inlateout"?"+&":"+";let O=`${P}${D.constraint}`,J=D.name?`[${D.name}] `:"",U;D.isDiscarded?U=m.find(q=>q.operandIdx===I).varName:D.isVariableTarget?U=D.cExpr:D.kind==="out"||D.kind==="lateout"?U=d.find(q=>q.operandIdx===I).varName:U=g.find(q=>q.operandIdx===I).varName,$.push(`${J}"${O}" (${U})`)}let b=[];for(let I=0;I<l.length;I++){let D=l[I];if(D.kind!=="in"&&D.kind!=="sym")continue;let P=D.constraint,O=D.name?`[${D.name}] `:"";b.push(`${O}"${P}" (${D.cExpr})`)}let w=u.map(I=>`"${I}"`),C=$.join(", "),k=b.join(", "),A=w.join(", ");if(r.emitLine(`${t}__asm__${h} (`),r.emitLine(`${t} ${T}`),r.emitLine(`${t} : ${C}`),r.emitLine(`${t} : ${k}`),r.emitLine(`${t} : ${A}`),r.emitLine(`${t});`),c.noreturn)return r.emitLine(`${t}__builtin_unreachable();`),`(*((${H(i,n)}*)NULL))`;if(We(i))return"";let N=[];for(let I=0;I<l.length;I++){let D=l[I];if(!(D.isDiscarded||D.isVariableTarget)&&!(D.kind==="in"||D.kind==="const_val"||D.kind==="sym"))if(D.kind==="out"||D.kind==="lateout"){let P=d.find(O=>O.operandIdx===I);P&&N.push(P.varName)}else{let P=g.find(O=>O.operandIdx===I);P&&N.push(P.varName)}}if(N.length===1)return N[0];if(N.length>1){let I=H(i,n),D=N.map((P,O)=>`._${O} = ${P}`).join(", ");return`((${I}){ ${D} })`}return""}function Ay(e,t,n){var i;if(Zn(n.targetInfo))return"/* global_asm skipped: not supported on this target */";let r=e.args[0];if((i=r.$)!=null&&i.value&&ct(r.$.value)){let o=r.$.value.value;n.emitter.emitDeclarationLine(`__asm__(${JSON.stringify(o)});`)}return""}var kC,wC,FC,Q_,Sy=Z(()=>{Te();Sr();Ne();Fe();Wt();yn();kC={reg:{x86_64:"r",aarch64:"r",x86:"r",arm:"r"},reg_byte:{x86_64:"q",x86:"q"},reg_abcd:{x86_64:"Q",x86:"Q"},xmm_reg:{x86_64:"x",aarch64:"w"},ymm_reg:{x86_64:"x"},imm:{x86_64:"i",aarch64:"i",x86:"i",arm:"i"},mem:{x86_64:"m",aarch64:"m",x86:"m",arm:"m"}},wC={rax:"a",eax:"a",ax:"a",al:"a",rbx:"b",ebx:"b",bx:"b",bl:"b",rcx:"c",ecx:"c",cx:"c",cl:"c",rdx:"d",edx:"d",dx:"d",dl:"d",rsi:"S",esi:"S",si:"S",rdi:"D",edi:"D",di:"D"},FC={e:"k",x:"w",l:"b",h:"h",w:"w"};Q_=0});function Iy(e,t,n){var l,u,c,_,f,p,d,g,m,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=G(r,t,n),a=(l=r.$)==null?void 0:l.type,s=(u=r.$)==null?void 0:u.value;if(K(i)){let v=i.token.value,T=n;if(T.currentEvidenceParams&&K(r)){let b=`${r.token.value}.${v}`,w=T.currentEvidenceParams.get(b);if(w)return w.cParamName}if((c=e.$)!=null&&c.value&&we(e.$.value)){let $=e.$.value;return((_=n.functions[$.funcId])==null?void 0:_.cName)||$.funcId}if(!((f=e.$)!=null&&f.value)&&(F.___dispose.includes(v)||F.___drop.includes(v)||F.___dup.includes(v))&&a){let $=null;if((Ue(a)||Ze(a))&&($=a.trait),$){let b=$.fields.find(w=>w.label===v&&w.assignedValue&&we(w.assignedValue));if(b&&we(b.assignedValue)){let w=b.assignedValue;return((p=n.functions[w.funcId])==null?void 0:p.cName)||w.funcId}else return`/* ERROR: Rc method ${v} not found in type module */`}else return`/* ERROR: No module found for Rc method ${v} */`}if(it(a)||xt(s)){let $=(d=e.$)==null?void 0:d.value;if($){if(Me($)){if($.variableName)return Qe($.variableName,(g=e.$)==null?void 0:g.env);if((T.inAsyncStateMachine||T.inEffectStateMachine)&&T.stateMachineVariables){for(let[,b]of T.stateMachineVariables)if(b.name===v&&b.kind==="outer")return`sm->__capture.${v}`}}else if(!xt($))return lr($,n,e)}return Qe(v,(m=e.$)==null?void 0:m.env)}if(Gr(a)&&a.fields.length===1){let $=a.fields[0];if($&&$.label===v)return o}if(Ze(a)){let $=a;if(rr($))return o;for(let w of $.variants)if(w.fields){for(let C of w.fields)if(C.label===v){let k=w.name;return`${o}.data.${k}.${Le(v)}`}}return`/* ERROR: field ${v} not found in enum ${$.typeName} */`}else if(Y(s)&&Ze(s.value)){let $=s.value,b=$.variants.find(C=>C.name===v),w=(h=n.types[$.id])==null?void 0:h.cName;if(b&&!b.fields&&w){let C=er($,b.name,n);return`(${w}){ .tag = ${C}, .data = { } }`}}else{if(Nn(a)&&v==="*")return`${o}->value`;if(ot(a)){if(v==="*")return`(*${o})`;if(Vt(a.childType))return`${o}->${Le(v)}`;{let $=0,b=a;for(;ot(b);)$++,b=b.childType;if($>0&&Ue(b)&&b.isReferenceSemantics&&$++,Gr(b)&&b.fields.length===1){let w=b.fields[0];if(w&&w.label===v)return $===1?`(*${o})`:`${"*".repeat($)}(${o})`}return $>0?$===1?`${o}->${Le(v)}`:`${`(${"*".repeat($-1)}${o})`}->${Le(v)}`:`${o}.${Le(v)}`}}else if(gt(a)){if(v.match(/^\d+$/))return`${o}._${v}`;{let $=a.fields.findIndex(b=>b.label===v);return`${o}._${$}`}}else return dt(a)?`${o}.vtable->${Le(v)}`:pn(a)?`${o}->${Le(v)}`:`${o}.${Le(v)}`}}return"/* ERROR: field name must be an identifier */"}var Ny=Z(()=>{Te();Ne();Fe();Wt();ss();yn()});function xy(e,t,n){var l,u,c,_,f,p,d,g,m,h;if(!((l=e.$)==null?void 0:l.type))return`// Error: No type information for pointer/reference expression ${L(e)}
11091
+ `;let i=e.args[0];if(S(i)){let v=(u=i.func.$)==null?void 0:u.type;if(v&&ut(v)){let T=i.args[0];if(T&&S(T)&&(E(T,"..")||E(T,"..="))){let $=E(T,"..="),b=G(i.func,t,n),w=G(T.args[0],t,n),C=G(T.args[1],t,n),k=`Slice_${Le(H(v.childType,n))}`;return n.sliceStructTypes.has(k)||n.sliceStructTypes.set(k,{childType:H(v.childType,n)}),$?`(${k}){ .data = &${b}.data[${w}], .length = (${C}) - (${w}) + 1 }`:`(${k}){ .data = &${b}.data[${w}], .length = (${C}) - (${w}) }`}}else if(v&&(Vt(v)||ot(v)&&Vt(v.childType))){let T=Vt(v)?v:v.childType,$=i.args[0];if($&&S($)&&(E($,"..")||E($,"..="))){let b=E($,"..="),w=G(i.func,t,n),C=G($.args[0],t,n),k=G($.args[1],t,n),A=`Slice_${Le(H(T.childType,n))}`;return n.sliceStructTypes.has(A)||n.sliceStructTypes.set(A,{childType:H(T.childType,n)}),b?`(${A}){ .data = &${w}.data[${C}], .length = (${k}) - (${C}) + 1 }`:`(${A}){ .data = &${w}.data[${C}], .length = (${k}) - (${C}) }`}}}let o=(c=i.$)==null?void 0:c.value,a=(_=i.$)==null?void 0:_.type;if(o!==void 0&&a){if(Rt(o)||It(o)){let v=G(i,t,n);return`(&(${H(a,n)}){${v}})`}if(ct(o)&&((f=i.$)!=null&&f.convertedRuntimeType))return`(&${G(i,t,n)})`}if((p=e.$)!=null&&p.isIndexTraitAddressOf&&S(i)&&((d=i.$)!=null&&d.indexMethodValue)){let v=i.$.indexMethodValue;if(we(v)){let T=i.func,$=G(T,t,n);if(S(T)&&!K(T)&&!E(T,".")&&((g=T.$)!=null&&g.type)&&!(((m=T.$)==null?void 0:m.variableName)&&$===Qe(T.$.variableName,T.$.env))){let N=H(T.$.type,n),x=`__yo_ptr_idx_tmp_${VC++}`;n.emitter.emitLine(`${t}${N} ${x} = ${$};`),$=x}let b=i.args[0],w=b?G(b,t,n):"0",C=ro(v);if(C&&(F.__yo_array_index.includes(C)||F.__yo_slice_index.includes(C)))return`(&((&${$})->data[${w}]))`;let k=(h=n.functions[v.funcId])==null?void 0:h.cName;if(k)return`${k}(&${$}, ${w})`}}return`(&${G(i,t,n)})`}var VC,Vy=Z(()=>{Te();Ne();Fe();Wt();yn();VC=0});function Dy(e,t,n){let r=e.args[0];return r?`__yo_decr_rc(${G(r,t,n)})`:"// Error: __yo_decr_rc requires exactly 1 argument"}function My(e,t,n){let r=e.args[0];return r?`__yo_incr_rc(${G(r,t,n)})`:"// Error: __yo_incr_rc requires exactly 1 argument"}function Oy(e,t,n){let r=e.args[0];return r?G(r,t,n):"// Error: __yo_rc_own requires exactly 1 argument"}function Ry(e,t,n){var _;let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_drop_array_element requires exactly 2 arguments";let o=G(r,t,n),a=G(i,t,n),s=(_=r.$)==null?void 0:_.type;if(!s||!ut(s))return"// Error: __yo_drop_array_element requires an array type";let l=s.childType,u=B(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(ut(u)){let f=u.length;if(!Rt(f))return"// Error: array element has non-constant length";let p=`i_${Math.floor(Math.random()*1e6)}`,d=n.emitter;d.emitLine(`for (size_t ${p} = 0; ${p} < ${f.value}; ${p}++) {`);let g=`(${o}).data[${a}].data[${p}]`;d.emitLine(" { // drop nested array element");let m=To(g,u.childType,n);return m&&d.emitLine(` ${m};`),d.emitLine(" }"),d.emitLine("}"),""}let c=io(u,n);return c?`${c}((${o}).data[${a}])`:"// No drop function for array element type"}function Py(e,t,n){var _;let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_dup_array_element requires exactly 2 arguments";let o=G(r,t,n),a=G(i,t,n),s=(_=r.$)==null?void 0:_.type;if(!s||!ut(s))return"// Error: __yo_dup_array_element requires an array type";let l=s.childType,u=B(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(ut(u)){let f=u.length;if(!Rt(f))return"// Error: array element has non-constant length";let p=`temp_array_${Math.floor(Math.random()*1e6)}`,d=`i_${Math.floor(Math.random()*1e6)}`,g=H(u,n),m=n.emitter;m.emitLine(`${g} ${p} = (${o}).data[${a}];`),m.emitLine(`for (size_t ${d} = 0; ${d} < ${f.value}; ${d}++) {`);let h=as(`${p}.data[${d}]`,u.childType,n);return m.emitLine(` ${p}.data[${d}] = ${h};`),m.emitLine("}"),p}let c=ri(u,n);return c?`${c}((${o}).data[${a}])`:"// No dup function for array element type"}function zy(e,t,n){var f,p;let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_drop_tuple_element requires exactly 2 arguments";let o=G(r,t,n);G(i,t,n);let a=(f=r.$)==null?void 0:f.type;if(!a||!gt(a))return"// Error: __yo_drop_tuple_element requires a tuple type";let s=(p=i.$)==null?void 0:p.value;if(!Rt(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=B(u)&&u.resolvedConcreteType?u.resolvedConcreteType:u;if(gt(c)){let d=`(${o})._${l}`;return To(d,c,n)}let _=io(c,n);return _?`${_}((${o})._${l})`:"// No drop function for tuple element type"}function Uy(e,t,n){var f,p;let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_dup_tuple_element requires exactly 2 arguments";let o=G(r,t,n);G(i,t,n);let a=(f=r.$)==null?void 0:f.type;if(!a||!gt(a))return"// Error: __yo_dup_tuple_element requires a tuple type";let s=(p=i.$)==null?void 0:p.value;if(!Rt(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=B(u)&&u.resolvedConcreteType?u.resolvedConcreteType:u;if(gt(c)){let d=`(${o})._${l}`;return as(d,c,n)}let _=ri(c,n);return _?`${_}((${o})._${l})`:"// No dup function for tuple element type"}function By(e,t,n){var a,s;let r=e.args[0];if(!r)return"// Error: ___dup requires exactly 1 argument";let i=G(r,t,n),o=((a=r.$)==null?void 0:a.type)??((s=e.$)==null?void 0:s.type);return o?as(i,o,n):i}function Gy(e,t,n){var a,s;let r=e.args[0];if(!r)return"// Error: ___drop requires exactly 1 argument";let i=G(r,t,n),o=((a=r.$)==null?void 0:a.type)??((s=e.$)==null?void 0:s.type);return o?To(i,o,n):""}function Wy(e,t,n){let r=e.args[0];return r?`__yo_decr_rc((void*)(${G(r,t,n)}).data)`:"// Error: __yo_dyn_drop requires exactly 1 argument"}function Yy(e,t,n){let r=e.args[0];return r?`__yo_incr_rc((void*)(${G(r,t,n)}).data)`:"// Error: __yo_dyn_dup requires exactly 1 argument"}function qy(e,t,n){let r=e.args[0];return r?`__yo_incr_rc_atomic(${G(r,t,n)})`:"// Error: __yo_incr_rc_atomic requires exactly 1 argument"}function Hy(e,t,n){let r=e.args[0];return r?`__yo_decr_rc_atomic(${G(r,t,n)})`:"// Error: __yo_decr_rc_atomic requires exactly 1 argument"}function jy(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&&B(i)&&ft(i)){let l=G(r,t,n);return`if (${l} != NULL) { __yo_decr_rc((void*)${l}); }`}if(i&&B(i)&&i.resolvedConcreteType){let u=(a=i.resolvedConcreteType.trait)==null?void 0:a.fields.find(c=>c.label===F.___drop[0]);if(u&&u.assignedValue&&we(u.assignedValue)){let c=(s=n.functions[u.assignedValue.funcId])==null?void 0:s.cName;if(c){let _=G(r,t,n);return`${c}(${_})`}}}return"/* __yo_sometype_drop: no-op */"}function Ky(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&&B(i)&&ft(i))return`__yo_incr_rc((void*)${G(r,t,n)})`;if(i&&B(i)&&i.resolvedConcreteType){let u=(a=i.resolvedConcreteType.trait)==null?void 0:a.fields.find(c=>c.label===F.___dup[0]);if(u&&u.assignedValue&&we(u.assignedValue)){let c=(s=n.functions[u.assignedValue.funcId])==null?void 0:s.cName;if(c){let _=G(r,t,n);return`${c}(${_})`}}}return"/* __yo_sometype_dup: no-op */"}function Xy(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=G(r,t,n);return br(i)?`((__yo_ref_header_t*)(${o}))->ref_count`:"1"}var Qy=Z(()=>{qt();Te();Ne();Fe();Wt();kr();yn()});function Zy(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=G(s,t,n);if((u=s.$)!=null&&u.deferredDupExpressions&&s.$.deferredDupExpressions.length>0){Jt(s,t,o);let _=s.$.deferredDupExpressions[0];if(S(_)&&((c=_.$)!=null&&c.variableName))return Qe(_.$.variableName,_.$.env)}return l}).join(", ");return`${n.currentFunctionName}(${a})`}else return`// Error: No arguments for recur call ${L(e)}
11092
+ `}var Jy=Z(()=>{Te();Wt();kr();yn()});function eg(e,t,n){let r=e.args[0];return`sizeof(${G(r,t,n)})`}var tg=Z(()=>{yn()});function ng(e,t,n){var a,s,l,u,c,_,f,p,d;let r=(a=e.$)==null?void 0:a.runtimeArgExprsInOrder,i=(u=n.types[((l=(s=e.$)==null?void 0:s.type)==null?void 0:l.id)??""])==null?void 0:u.cName,o=(c=e.$)==null?void 0:c.variableName;if(r&&i){let g=n,m=r.map((h,v)=>{var b,w;let $=G(h,t,n);if((b=h.$)!=null&&b.deferredDupExpressions&&h.$.deferredDupExpressions.length>0){Jt(h,t,g);let C=h.$.deferredDupExpressions[0];S(C)&&((w=C.$)!=null&&w.variableName)&&($=Qe(C.$.variableName,C.$.env))}return`._${v} = ${$}`}).join(", ");if(o&&((_=e.$)!=null&&_.type)){let h=`(${i}){ ${m} }`,v=an(e.$.type,o,n);return n.emitter.emitLine(`${t}${v} = ${h};`),o}else return`(${i}){ ${m} }`}else{if(e.args.length===0)return"";{let g=r??e.args;if(!i)return`/* Error: tuple type not found - typeId: ${((p=(f=e.$)==null?void 0:f.type)==null?void 0:p.id)??"none"} */`;let m=g.map((h,v)=>{let T=G(h,t,n);return`._${v} = ${T}`}).join(", ");if(o&&((d=e.$)!=null&&d.type)){let h=`(${i}){ ${m} }`,v=an(e.$.type,o,n);return n.emitter.emitLine(`${t}${v} = ${h};`),o}else return`(${i}){ ${m} }`}}}var rg=Z(()=>{Te();Wt();kr();yn()});function ig(e,t,n){var u,c;let i=(u=e.args[0].$)==null?void 0:u.value;if(!i||!Y(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_${Le(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}`}var og=Z(()=>{Fe();Wt()});function DC(e,t){if(S(e)&&E(e,R.begin)){let n=[];for(let r of e.args)if(S(r)&&E(r,"=",2)){let i=r.args[0],o=r.args[1],a=G(i,"",t),s=G(o,"",t);n.push(`${a} = ${s}`)}return n.join(", ")}else if(S(e)&&E(e,"=",2)){let n=e.args[0],r=e.args[1],i=G(n,"",t),o=G(r,"",t);return`${i} = ${o}`}return G(e,"",t)}function Z_(e,t,n){var r,i,o,a;if(S(e)&&E(e,R.begin)){let s=n,l=s.pendingDeferredDrops,u=((r=e.$)==null?void 0:r.deferredDropExpressions)??[],c=new Map;for(let d of u){let g=qr(d);g&&c.set(g,d)}s.pendingDeferredDrops=[...l??[]];let _=s.consumedVarPendingDrops,f=((i=e.$)==null?void 0:i.consumedVariableDropExpressions)??[];s.consumedVarPendingDrops=[...f,..._??[]];let p=new Set;for(let d of e.args){let g=G(d,t,n);if(g&&n.emitter.emitLine(`${t}${g};`),(o=d.$)!=null&&o.env&&c.size>p.size)for(let m of d.$.env.frames)for(let h of m.variables)c.has(h.name)&&!p.has(h.name)&&(p.add(h.name),s.pendingDeferredDrops.unshift(c.get(h.name)))}if((a=e.$)!=null&&a.deferredDropExpressions)for(let d of e.$.deferredDropExpressions){let g=G(d,t,n);g&&n.emitter.emitLine(`${t}${g};`)}s.pendingDeferredDrops=l,s.consumedVarPendingDrops=_}else{let s=G(e,t,n);s&&n.emitter.emitLine(`${t}${s};`)}}function ag(e,t,n){var i,o,a;if((i=e.$)!=null&&i.comptimeUnrolledBodies){for(let s of e.$.comptimeUnrolledBodies)Z_(s,t,n);return""}let r=e.args;if(r.length===2){let s=r[0],l=r[1],u=n.currentLoopLabel,c=`loop_${Math.random().toString(36).substr(2,9)}`;n.currentLoopLabel=c;let _=n,f=_.loopBodyDropsBaselineCount;_.loopBodyDropsBaselineCount=((o=_.pendingDeferredDrops)==null?void 0:o.length)??0,n.emitter.emitLine(`${t}while (true) {`);let p=G(s,t+" ",n);return n.emitter.emitLine(`${t} if (!(${p})) {`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t} }`),Z_(l,t+" ",n),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}${c}:;`),_.loopBodyDropsBaselineCount=f,n.currentLoopLabel=u,""}else if(r.length===3){let s=r[0],l=r[1],u=r[2],c=n.currentLoopLabel,_=n.currentContinueLabel,f=`loop_${Math.random().toString(36).substr(2,9)}`,p=`continue_${Math.random().toString(36).substr(2,9)}`;n.currentLoopLabel=f,n.currentContinueLabel=p;let d=n,g=d.loopBodyDropsBaselineCount;d.loopBodyDropsBaselineCount=((a=d.pendingDeferredDrops)==null?void 0:a.length)??0,n.emitter.emitLine(`${t}while (true) {`);let m=G(s,t+" ",n);n.emitter.emitLine(`${t} if (!(${m})) {`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t} }`),Z_(u,t+" ",n),n.emitter.emitLine(`${t}${p}:;`);let h=DC(l,n);return n.emitter.emitLine(`${t} ${h};`),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}${f}:;`),d.loopBodyDropsBaselineCount=g,n.currentLoopLabel=c,n.currentContinueLabel=_,""}else return n.emitter.emitLine(`${t}/* Error: while loop expects 2 or 3 arguments, got ${r.length} */`),""}var sg=Z(()=>{Te();Wt();yn()});function OC(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;B(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),nn(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function RC(e,t,n){var c,_,f,p,d,g,m,h;let r=(c=e.$)==null?void 0:c.indexMethodValue;if(!r||!we(r))return"/* Error: Index trait method value missing */";let i=e.func,o=G(i,t,n);if(S(i)&&!K(i)&&!E(i,".")&&((_=i.$)!=null&&_.type)&&!(((f=i.$)==null?void 0:f.variableName)&&o===Qe(i.$.variableName,i.$.env))){let T=H(i.$.type,n),$=`__yo_idx_tmp_${MC++}`;n.emitter.emitLine(`${t}${T} ${$} = ${o};`),o=$}let a=e.args[0],s=a?G(a,t,n):"0",l,u=ro(r);if(u)if(F.__yo_array_index.includes(u)||F.__yo_slice_index.includes(u))l=`(&((&${o})->data[${s}]))`;else if((F.__yo_array_index_range.includes(u)||F.__yo_slice_index_range.includes(u))&&((p=e.$)!=null&&p.indexTraitPtrType)&&ot(e.$.indexTraitPtrType))l=`(&(${H(e.$.indexTraitPtrType.childType,n)}){ .data = &((&${o})->data[(${s}).start]), .length = (${s}).end - (${s}).start })`;else if((F.__yo_array_index_range_inclusive.includes(u)||F.__yo_slice_index_range_inclusive.includes(u))&&((d=e.$)!=null&&d.indexTraitPtrType)&&ot(e.$.indexTraitPtrType))l=`(&(${H(e.$.indexTraitPtrType.childType,n)}){ .data = &((&${o})->data[(${s}).start]), .length = (${s}).end - (${s}).start + 1 })`;else{let v=(g=n.functions[r.funcId])==null?void 0:g.cName;if(!v)return`/* Error: Index method ${r.funcId} not found in function registry */`;l=`${v}(&${o}, ${s})`}else{let v=(m=n.functions[r.funcId])==null?void 0:m.cName;if(!v)return`/* Error: Index method ${r.funcId} not found in function registry */`;l=`${v}(&${o}, ${s})`}return(h=e.$)!=null&&h.isIndexTraitAddressOf?l:`(*${l})`}function PC(e,t,n,r){var _,f,p,d;let i=e.args[0];if(!((_=i==null?void 0:i.$)!=null&&_.type))return;let o=e.args.find(g=>S(g)&&E(g,R.using));if(!o)return;let a=Wn(i.$.type);if(!((f=a==null?void 0:a.isFuture.effects)!=null&&f.length))return;let s=OC(a.isFuture.effects),l=o.args,u=r,c=u.emitter;for(let g=0;g<s.length&&g<l.length;g++){let m=s[g],h=l[g];if(ne(m.type)){let v=m.label,T;if(u.currentEvidenceParams){for(let $ of u.currentEvidenceParams.values())if($.fieldLabel===v){T=$.cParamName;break}}if(!T&&u.stateMachineVariables){for(let[,$]of u.stateMachineVariables)if($.name===v&&$.kind==="outer"){T=`sm->__capture.${v}`;break}}if(!T){let $=(p=h.$)==null?void 0:p.value;if($&&we($)){let b=r.functions[$.funcId];b&&(T=b.cName)}}T||(T=G(h,n,r)),T&&c.emitLine(`${n} ${t}->__capture.${v} = (void*)${T};`)}else if(it(m.type)){let v=m.type;for(let T of v.fields){if(!ne(T.type))continue;let $;if(u.stateMachineVariables){for(let[,b]of u.stateMachineVariables)if(b.name===T.label&&b.kind==="outer"){$=`sm->__capture.${T.label}`;break}}if(!$){let b=(d=h.$)==null?void 0:d.value;if(b&&xt(b)){let w=v.fields.indexOf(T),C=b.fields[w];if(C&&we(C)){let k=r.functions[C.funcId];k&&($=k.cName)}}}if(!$&&u.currentEvidenceParams){for(let b of u.currentEvidenceParams.values())if(b.fieldLabel===T.label){$=b.cParamName;break}}$||($=zC(T.label,v,u,e)),$&&c.emitLine(`${n} ${t}->__capture.${T.label} = (void*)${$};`)}}}}function zC(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=Dr(i,c=>c.isImplicit===!0);for(let c=o.length-1;c>=0;c--){let _=o[c],f=(l=_.value)==null?void 0:l[_.value.length-1];if(f&&xt(f)){let p=f.type.fields.findIndex(d=>d.label===e);if(p>=0){let d=f.fields[p];if(d&&we(d)){let g=(u=n.functions[d.funcId])==null?void 0:u.cName;if(g)return g}}}}}function UC(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=G(i,t,n);if(r.effectHandlerParamDrops)for(let _ of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${_};`);r.emitter.emitLine(`${t}${o.directReturnVar} = ${c};`),r.emitter.emitLine(`${t}goto ${o.directExitLabel};`)}else{if(r.effectHandlerParamDrops)for(let c of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${c};`);r.emitter.emitLine(`${t}goto ${o.directExitLabel};`)}return""}if(r.inAsyncStateMachine){let c=r.emitter;if(i){let _=G(i,t,n);_&&_!=="(void)0"&&c.emitLine(`${t}(void)${_};`)}if(r.effectHandlerParamDrops)for(let _ of r.effectHandlerParamDrops)c.emitLine(`${t}${_};`);return wr(t,r,e,!1,!0,!0),wi(t,r,e,!0),ai({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(wr(t,r,e,!1,!0,!0),wi(t,r,e,!0),r.currentFunctionType){let c=r.currentFunctionType.return.type;if(!We(c)){let _=r.overrideReturnTypeStr??H(c,n);if(_!=="void")return`return (${_}){0}`}}return"return"}let s=G(i,t,n);if(r.effectHandlerParamDrops)for(let c of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${c};`);if(wr(t,r,e,!1,!0,!0),wi(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&&!We(c)){let f=H(c,n);r.emitter.emitLine(`${t}{ ${f} _esc_val = ${s}; memcpy(__yo_effect_escape_value, &_esc_val, sizeof(${f})); }`)}let _=r.currentFunctionType.return.type;if(!We(_)){let f=r.overrideReturnTypeStr??H(_,n);if(f!=="void")return`return (${f}){0}`}return"return"}return`return ${s}`}function lg(e,t,n){let r;switch(e.tag){case"FnCall":r=BC(e,t,n);break;case"Atom":r=ps(e,n,t);break}return r}function BC(e,t,n){var r,i,o,a,s,l,u,c,_,f,p,d,g,m,h;if((r=e.$)!=null&&r.macroExpansion)return G(e.$.macroExpansion,t,n);if(S(e.func)&&E(e.func,".",2)&&e.func.args[1]&&K(e.func.args[1])){let v=e.func.args[1].token.value,T=e.func.args[0],$=(i=T==null?void 0:T.$)==null?void 0:i.type;if($&&B($)&&ft($)){if(v===F.___drop[0]){let b=G(T,t,n);return`if (${b} != NULL) { __yo_decr_rc((void*)${b}); }`}if(v===F.___dup[0])return`__yo_incr_rc((void*)${G(T,t,n)})`}}if(xd(e))return Vd(e,t,n);if(E(e,F.__yo_decr_rc))return Dy(e,t,n);if(E(e,F.__yo_incr_rc))return My(e,t,n);if(E(e,F.__yo_rc_own))return Oy(e,t,n);if(E(e,F.__yo_drop_array_element))return Ry(e,t,n);if(E(e,F.__yo_dup_array_element))return Py(e,t,n);if(E(e,F.__yo_drop_tuple_element))return zy(e,t,n);if(E(e,F.__yo_dup_tuple_element))return Uy(e,t,n);if(E(e,F.___dup))return By(e,t,n);if(E(e,F.___drop))return Gy(e,t,n);if(E(e,F.__yo_dyn_drop))return Wy(e,t,n);if(E(e,F.__yo_dyn_dup))return Yy(e,t,n);if(E(e,F.__yo_incr_rc_atomic))return qy(e,t,n);if(E(e,F.__yo_decr_rc_atomic))return Hy(e,t,n);if(E(e,F.__yo_iso_extract))return sy(e,t,n);if(E(e,F.__yo_iso_dispose))return ly(e,t,n);if(E(e,F.__yo_arc_dispose))return Im(e,t,n);if(q_(e))return uy(e,t,n);if(W_(e))return Nm(e,t,n);if(E(e,F.__yo_sometype_drop))return jy(e,t,n);if(E(e,F.__yo_sometype_dup))return Ky(e,t,n);if(E(e,F.__yo_gc_collect))return ry(e,t,n);if(E(e,F.rc))return Xy(e,t,n);if(E(e,F.panic))return ky(e,t,n);if(E(e,F.asm))return Ly(e,t,n);if(E(e,F.global_asm))return Ay(e,t,n);if(E(e,R.test))return"/* test declaration skipped */";if(E(e,F.__yo_thread_set_maximum_threads))return vy(e,t,n);if(E(e,R.op_and))return Lm(e,t,n);if(E(e,R.op_or))return Am(e,t,n);if(Xn(e))return(o=e.$)!=null&&o.awaitAnalysis?Dd(e,t,n):zd(e,t,n);if(E(e,R.dyn))return ty(e,t,n);if(Vr(e))return zm(e,t,n);if(Zp(e))return Um(e,t,n);if(zu(e)){let v=e.args[0];if(!v)return"// Error: spawn requires a Future argument";let $=n.emitter,b=G(v,t,n),w=(a=v.$)==null?void 0:a.type,C=w?H(w,n):"void*",k=(s=e.$)==null?void 0:s.type,A=k?H(k,n):null,N=(l=e.$)!=null&&l.variableName?`__spawn_future_${e.$.variableName}`:"__spawn_future",x=(u=e.$)!=null&&u.variableName?`__spawn_state_${e.$.variableName}`:"__spawn_state";return $.emitLine(`${t}// io.spawn \u2014 start cold Future, return JoinHandle`),$.emitLine(`${t}${C} ${N} = ${b};`),$.emitLine(`${t}int ${x} = ${N}->state;`),$.emitLine(`${t}if (${x} == -2) {`),$.emitLine(`${t} fprintf(stderr, "panic: attempted to spawn an aborted Future\\n");`),$.emitLine(`${t} abort();`),$.emitLine(`${t}}`),gl((c=v.$)==null?void 0:c.type)||($.emitLine(`${t}if (${x} == 0 && ${N}->__yo_resume_fn) {`),PC(e,N,t,n),$.emitLine(`${t} __yo_incr_rc((void*)${N});`),$.emitLine(`${t} ${N}->__yo_resume_fn((void*)${N});`),$.emitLine(`${t}}`)),A?`(${A}){ .__future = (void*)${N} }`:`(void*)${N}`}if(Jp(e))return Bm(e,t,n);if(E(e,R.return))return um(e,t,n);if(E(e,R.escape))return UC(e,t,n);if(E(e,F.__yo_array_fill,2))return Dm(e,t,n);if(E(e,"::",2))return"";if(E(e,":",2))return Hm(e,t,n);if(E(e,":=",2)){let v=oy(e,t,n);if(v!==void 0)return v}else{if(E(e,"=",2))return Om(e,t,n);if((_=e.$)!=null&&_.value&&!Me((f=e.$)==null?void 0:f.value)&&!We(e.$.type)&&!Zt((p=e.$)==null?void 0:p.controlFlow))return lr(e.$.value,n,e);if(E(e,".",2))return Iy(e,t,n);if(E(e,R.begin))return Ym(e,t,n);if(E(e,R.cond))return Km(e,t,n);if(E(e,R.match))return fy(e,t,n);if(E(e,F.__yo_address_of,1))return xy(e,t,n);if(E(e,R.tuple))return ng(e,t,n);if(E(e,R.array)){let v=Vm(e,t,n);if(v!==void 0)return v}else{if(E(e,R.recur))return Zy(e,t,n);if(E(e,R.runtime,1))return G(e.args[0],t,n);if(E(e,F.sizeof,1))return eg(e,t,n);if(E(e,F.typeid,1))return ig(e,t,n);if(E(e,F.downcast,2))return Jm(e,t,n);if(E(e,va)){let v=((d=e.$)==null?void 0:d.runtimeArgExprsInOrder)||e.args;if(v){let T=n,$=v.map(b=>{var C,k;let w=G(b,t,n);if((C=b.$)!=null&&C.deferredDupExpressions&&b.$.deferredDupExpressions.length>0){Jt(b,t,T);let A=b.$.deferredDupExpressions[0];if(S(A)&&((k=A.$)!=null&&k.variableName))return Qe(A.$.variableName,A.$.env)}return w});return $l(e.func.token.value,$,e,n,t)}}else{if(E(e,R.while))return ag(e,t,n);if(E(e,"->",2)&&S(e.args[0])&&E(e.args[0],R.fn)){let v=(g=e.$)==null?void 0:g.value;return we(v)?lr(v,n):"// Error: Anonymous function missing function value"}else{if(E(e,F.consume))return Qm(e,t,n);if(E(e,F.comptime_expect_error)||E(e,F.comptime_assert)||E(e,F.__yo_var_print_info)||E(e,F.__yo_var_is_owning_the_rc_value)||E(e,F.__yo_var_has_other_aliases))return"";if(E(e,R.open))return dy(e,t,n);if((m=e.$)!=null&&m.indexTraitPtrType&&((h=e.$)!=null&&h.indexMethodType))return RC(e,t,n);{let v=by(e,t,n);if(v!==void 0)return v}}}}}if(S(e))throw new Error(`Unhandled function call: ${L(e)}`);return`// Failed to transpile ${L(e)}`}var MC,ug=Z(()=>{fi();qt();Te();Ne();Fe();mt();zo();pl();Wt();Sm();xm();Mm();Rm();A_();ha();tc();Wm();qm();jm();hl();ss();Xm();Zm();ey();kr();ny();yn();iy();ay();Y_();cy();py();my();Cy();wy();Sy();j_();Ny();Vy();Qy();Jy();Tl();tg();rg();og();sg();MC=0});function cg({expr:e,env:t,context:n}){rt(e,F.alignof,1);let r=e.args[0],i=z({expr:r,env:t,context:{...n}});if(!i.$)throw y({token:r.token,errorMessage:"Failed to evaluate expression."});t=i.$.env;let o;i.$.value&&Y(i.$.value)?o=i.$.value.value:o=i.$.type;let a=Ai(o),s;return a===null?s=de(Fn(),{env:t,context:n}):s=sr("Usize",a),e.$={env:t,type:Fn(),value:s,pathCollection:[]},e}var _g=Z(()=>{De();Te();Et();at();Fe();ur();et()});function fg({expr:e,env:t,context:n}){let r=E(e,R.op_and)?"and":"or",i=e.args;if(i.length===0){let u=dn(r==="and");return e.$={env:t,type:Yt(),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],_=z({expr:c,env:o,context:{...n}});if(!_.$||!Nr(_.$.type))throw y({token:c.token,errorMessage:`Expected bool type for "${r}" argument, got:
11093
11093
  ${L(c)}`});o=_.$.env;let f=_.$.value;if(Me(f)){s=!0;continue}if(It(f)){let p=f.value;if(r==="and"){if(!p){a=dn(!1);break}!s&&!l&&(a=dn(!0))}else{if(p){a=dn(!0);break}!s&&!l&&(a=dn(!1))}}else l=!0}return It(a)||(l||s)&&(l?a=void 0:a=de(Yt(),{env:o,context:n})),e.$={env:o,type:Yt(),value:a,pathCollection:[],isAccessingProperty:!1},e}var pg=Z(()=>{De();Te();Et();Ne();Fe();et()});function dg({expr:e,env:t,context:n}){var g,m,h,v,T;rt(e,F.__yo_array_fill,2);let r=e.args[0],i=e.args[1],o=z({expr:r,env:t,context:{...n}});(g=o.$)!=null&&g.env&&(t=o.$.env);let a=(m=o.$)==null?void 0:m.value;if(!Y(a)||!ut(a.value))throw y({token:r.token,errorMessage:`__yo_array_fill expects first argument to be an ArrayType, got ${a?Ct(a):"undefined"}`});let s=a.value,l=z({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=(T=l.$)==null?void 0:T.value;if(!u)throw y({token:i.token,errorMessage:"Failed to evaluate fill value"});if(!c)throw y({token:i.token,errorMessage:"__yo_array_fill expects second argument to be a compile-time known value, got runtime value"});if(!ce({type:s.childType,env:t},{type:u,env:t}))throw y({token:i.token,errorMessage:`Fill value type ${M(u)} is not compatible with array element type ${M(s.childType)}`});let _=s.length;if(Me(_)){let $=de(s,{env:t,context:n});return e.$={env:t,type:s,value:$,pathCollection:[]},e}let f;if(Rt(_)){let $=_.value;if(f=typeof $=="bigint"?Number($):$,!Number.isInteger(f)||f<0)throw y({token:i.token,errorMessage:`Array length must be a non-negative integer, got ${f}`})}else throw y({token:i.token,errorMessage:`Array length must be a compile-time known integer, got ${Ct(_)}`});let p=[];if(Me(c)){let $=de(s,{env:t,context:n});return e.$={env:t,type:s,value:$,pathCollection:[]},e}for(let $=0;$<f;$++)p.push(c);let d=So(s,p);return e.$={env:t,type:s,value:d,pathCollection:[]},e}var mg=Z(()=>{De();Te();rn();Ne();at();Fe();et()});function yg({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)??pe.type;return e.$={env:t,type:c,value:We(c)?pe:de(c,{env:t,context:n}),pathCollection:[]},e}let r=e.args[0],i=e.args[1],o=z({expr:r,env:t,context:{...n}});if(!o.$||!It(o.$.value))throw y({token:r.token,errorMessage:`Expected bool value for "comptime_assert", got:
11094
11094
  ${L(r)}
11095
11095
 
@@ -11214,13 +11214,13 @@ Got: ${Ct(d.$.value)}`});let m=d.$.value;if(!n.isCompileTimeOnly&&ra(g,d.$.env
11214
11214
  ${L(d)}`});let h=n.isCompileTimeOnly||s.forceCompileTimeBindings===!0,{env:v}=qe({env:o,variable:{name:n.label,type:g,isCompileTimeOnly:h,value:m?[m]:void 0,token:(c==null?void 0:c.token)??Ve,initializedAtToken:(c==null?void 0:c.token)??Ve,consumedAtToken:void 0,isOwningTheRcValue:n.isOwningTheRcValue}});if(o=v,m&&Y(m)&&B(m.value)){let I=m.value,D=_i(a,I);if(D){for(let P of D.requiredTraits){let O={...P,receiverType:I};o=Oi({env:o,someType:I,traitType:O,isNegated:!1})}for(let P of D.negativeTraits){let O={...P,receiverType:I};o=Oi({env:o,someType:I,traitType:O,isNegated:!0})}}}try{let{expectedEnv:I}=Ut({type:f,env:o},{type:g,env:a});o=I}catch(I){throw y({token:(c==null?void 0:c.token)??Ve,errorMessage:`Failed to synthesize types for parameter "${n.label}":
11215
11215
  ${I.message}`})}let{parameterType:T,calleeEnv:$}=wl({functionType:e,definitionSiteEnclosingFunctionType:t,parameter:n,calleeEnv:o,context:{...s,isEvaluatingFunctionType:!0}});if(o=$,!ce({type:T,env:o},{type:g,env:a},i===0&&l))throw y({token:(c==null?void 0:c.token)??Ve,errorMessage:`Type mismatch for parameter "${n.label}":
11216
11216
  Expected: ${M(T)}
11217
- Got: ${M(g)}`});return{calleeEnv:o,callerEnv:a,context:{...s},argValue:m,argType:g,parameterType:T}}function Es(e){if(e&&we(e))return e}function gc(e){let t=process.env[e];return t==="1"||(t==null?void 0:t.toLowerCase())==="true"}function Wo({expr:e,functionValue:t,functionType:n,functionCalleeExpr:r,argExprs:i,callerEnv:o,context:a,isMethodCall:s,skipSpecialization:l,skipCtfeExecution:u}){var Oe,$e,ae,Le,se,me,he,Re,_t,bt,Mt,en,lt,kt,kn,Ot,je,Be,tt,Bt,jn,Xt,Sn,te,ve,_e,Ce,xe,Pe,st,Je;if(hc){so.tryCallCount++;let ie="(unknown)";t&&"funcName"in t&&t.funcName?ie=t.funcName:t&&"funcId"in t?ie=String(t.funcId):r&&(ie=L(r).slice(0,60)),so.tryCallNames.set(ie,(so.tryCallNames.get(ie)??0)+1),so.tryCallCount<=5&&console.log(`[DEBUG tryCall] #${so.tryCallCount}: name=${ie}, hasFuncValue=${!!t}, hasFuncCalleeExpr=${!!r}`)}t&&(t.specializedType?n=t.specializedType:n=t.type);let c,_=[],f=[],p=[],d=t==null?void 0:t.definitionSiteEnclosingFunctionType,g=0;i.length>0&&S(i[0])&&E(i[0],R.forall)?(c=i[0],g=1):s&&i.length>1&&S(i[1])&&E(i[1],R.forall)&&(c=i[1],i=[i[0],...i.slice(2)]);let m,h=i.slice(g),v=h.findIndex(ie=>S(ie)&&E(ie,R.using));if(v!==-1){let ie=h.findIndex((ee,Q)=>Q>v&&S(ee)&&E(ee,R.using));if(ie!==-1)throw y({token:h[ie].token,errorMessage:'Only one "using(...)" is allowed per function call. Combine all implicit arguments into a single using(), e.g.: func(..., using(a, b))'});m=h[v],h=[...h.slice(0,v),...h.slice(v+1)]}let T=n.parameters.length,$=h;if(!n.variadicParameter){if($.length>T){let ie=n.parameters.at(-1);if(!(ie&&ie.isQuote&&ga(ie.type)))throw y({token:(r==null?void 0:r.token)??Ve,errorMessage:`Too many arguments for function call:
11217
+ Got: ${M(g)}`});return{calleeEnv:o,callerEnv:a,context:{...s},argValue:m,argType:g,parameterType:T}}function Es(e){if(e&&we(e))return e}function gc(e){let t=process.env[e];return t==="1"||(t==null?void 0:t.toLowerCase())==="true"}function Wo({expr:e,functionValue:t,functionType:n,functionCalleeExpr:r,argExprs:i,callerEnv:o,context:a,isMethodCall:s,skipSpecialization:l,skipCtfeExecution:u}){var Oe,$e,ae,Ae,se,me,he,Re,_t,bt,Mt,en,lt,kt,kn,Ot,je,Be,tt,Bt,jn,Xt,Sn,te,ve,_e,Ce,xe,Pe,st,Je;if(hc){so.tryCallCount++;let ie="(unknown)";t&&"funcName"in t&&t.funcName?ie=t.funcName:t&&"funcId"in t?ie=String(t.funcId):r&&(ie=L(r).slice(0,60)),so.tryCallNames.set(ie,(so.tryCallNames.get(ie)??0)+1),so.tryCallCount<=5&&console.log(`[DEBUG tryCall] #${so.tryCallCount}: name=${ie}, hasFuncValue=${!!t}, hasFuncCalleeExpr=${!!r}`)}t&&(t.specializedType?n=t.specializedType:n=t.type);let c,_=[],f=[],p=[],d=t==null?void 0:t.definitionSiteEnclosingFunctionType,g=0;i.length>0&&S(i[0])&&E(i[0],R.forall)?(c=i[0],g=1):s&&i.length>1&&S(i[1])&&E(i[1],R.forall)&&(c=i[1],i=[i[0],...i.slice(2)]);let m,h=i.slice(g),v=h.findIndex(ie=>S(ie)&&E(ie,R.using));if(v!==-1){let ie=h.findIndex((ee,Q)=>Q>v&&S(ee)&&E(ee,R.using));if(ie!==-1)throw y({token:h[ie].token,errorMessage:'Only one "using(...)" is allowed per function call. Combine all implicit arguments into a single using(), e.g.: func(..., using(a, b))'});m=h[v],h=[...h.slice(0,v),...h.slice(v+1)]}let T=n.parameters.length,$=h;if(!n.variadicParameter){if($.length>T){let ie=n.parameters.at(-1);if(!(ie&&ie.isQuote&&ga(ie.type)))throw y({token:(r==null?void 0:r.token)??Ve,errorMessage:`Too many arguments for function call:
11218
11218
  Expected: ${T} arguments
11219
11219
  Got: ${$.length} arguments`})}else if($.length<T&&!n.parameters.slice($.length).every(ee=>ee.exprs.defaultValueExpr!==void 0))throw y({token:(r==null?void 0:r.token)??Ve,errorMessage:`Too few arguments for function call:
11220
11220
  Expected: ${T} arguments
11221
11221
  Got: ${$.length} arguments`})}let b=h.slice(0,T),w=h.slice(T);i=b,o=Ft(o);let C=Ft(n.env);if(n.SelfType){let ie=ke(n.SelfType),{env:ee}=qe({env:C,variable:{name:"Self",token:Ve,type:ie.type,isCompileTimeOnly:!0,initializedAtToken:Ve,consumedAtToken:void 0,value:[ie],isOwningTheRcValue:!1},allowVariableShadowing:!0});C=ee}for(let ie=0;ie<n.forallParameters.length;ie++){let ee=n.forallParameters[ie],Q;if(ee.exprs.labelExpr&&ee.label){let Ge=Pt(ee.type)&&ee.type.level===1&&S(ee.exprs.expr)&&E(ee.exprs.expr,"...",1)?ke(ca(ee.label,C)):de(ee.type,{variableName:ee.label,env:C,context:a}),{env:ge,variable:be}=qe({env:C,variable:{name:ee.label,type:ee.type,isCompileTimeOnly:!0,value:[Ge],token:ee.exprs.labelExpr.token,initializedAtToken:ee.exprs.labelExpr.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});C=ge,Q=be}if(c){let oe=c.args[ie],Ge;if(S(oe)&&E(oe,":",2)){if(Ge=oe.args[0],oe=oe.args[1],!K(Ge))throw y({token:Ge.token,errorMessage:`Expected identifier for type parameter label, got:
11222
11222
  ${L(Ge)}`});if(ee.label!==Ge.token.value)throw y({token:Ge.token,errorMessage:`Expected type parameter label "${ee.label}", got "${Ge.token.value}".`})}let ge;if(K(oe)&&oe.token.value==="_")continue;if(!oe||K(oe)&&En(oe,R.undefined))if(ee.exprs.defaultValueExpr){let ze=z({expr:yt(ee.exprs.defaultValueExpr),env:C,context:{...a}});if((Oe=ze.$)!=null&&Oe.env&&(o=ze.$.env),oe&&(oe.$=ze.$),!Y(($e=ze.$)==null?void 0:$e.value))throw y({token:(oe==null?void 0:oe.token)??(r==null?void 0:r.token)??Ve,errorMessage:oe?`Expected type for default value, got:
11223
- ${L(oe)}`:"Expected type for default value."});ge=(ae=ze.$)==null?void 0:ae.value}else throw y({token:(oe==null?void 0:oe.token)??(r==null?void 0:r.token)??Ve,errorMessage:"Type parameter does not have default value."});else{let ze=z({expr:oe,env:o,context:{...a,expectedType:{type:ee.type,env:C}}});if((Le=ze.$)!=null&&Le.env&&(o=ze.$.env),ne(ee.type)){if(!we((se=ze.$)==null?void 0:se.value))throw y({token:oe.token,errorMessage:`Expected type constructor for HKT parameter "${ee.label}", got:
11223
+ ${L(oe)}`:"Expected type for default value."});ge=(ae=ze.$)==null?void 0:ae.value}else throw y({token:(oe==null?void 0:oe.token)??(r==null?void 0:r.token)??Ve,errorMessage:"Type parameter does not have default value."});else{let ze=z({expr:oe,env:o,context:{...a,expectedType:{type:ee.type,env:C}}});if((Ae=ze.$)!=null&&Ae.env&&(o=ze.$.env),ne(ee.type)){if(!we((se=ze.$)==null?void 0:se.value))throw y({token:oe.token,errorMessage:`Expected type constructor for HKT parameter "${ee.label}", got:
11224
11224
  ${L(oe)}`});ge=(me=ze.$)==null?void 0:me.value}else{if(!Y((he=ze.$)==null?void 0:he.value))throw y({token:oe.token,errorMessage:`Expected type for argument, got:
11225
11225
  ${L(oe)}`});ge=(Re=ze.$)==null?void 0:Re.value}}Ge&&(Ge.$={env:C,type:ge.type,value:ge,pathCollection:[]});let be=ne(ee.type),Ee=ee.type;if(!be){let{parameterType:ze,calleeEnv:nt}=wl({parameter:ee,calleeEnv:C,definitionSiteEnclosingFunctionType:d,context:{...a,isEvaluatingFunctionType:!0},functionType:n});C=nt,Ee=ze;let{expectedEnv:He,givenEnv:Xe}=Ut({type:Ee,env:C},{type:ge.type,env:o});if(C=He,o=Xe,!ce({type:Ee,env:C},{type:ge.type,env:o}))throw y({token:(oe==null?void 0:oe.token)??(r==null?void 0:r.token)??Ve,errorMessage:`Type mismatch for type parameter "${ee.label}":
11226
11226
  Expected: ${M(Ee)}
@@ -11235,7 +11235,7 @@ Or pass it explicitly:
11235
11235
  ${(t==null?void 0:t.funcName)??"func"}(..., using(<value>))`});if(ge[ge.length-1].isFromEffectSpread&&!(()=>{if(!r||!K(r))return!1;let Se=r.token.value,vt=a.isEvaluatingFunctionBodyOrAsyncBlock;return!vt||vt.kind!=="function-body"?!1:vt.type.parameters.some(pt=>pt.label===Se)})())throw y({token:(r==null?void 0:r.token)??(e==null?void 0:e.token)??Ve,errorMessage:`Effect "${ee.label}" of type ${M(oe)} is available through an effect row spread but not explicitly declared in the function's using clause.
11236
11236
  Add it explicitly:
11237
11237
  using(${ee.label} : ${M(oe)}, ...(E))`});let Ee=ge;if(Ee.length>1){let Xe=_l(o,Se=>Se.isImplicit===!0&&Se.isCompileTimeOnly===!0&&ce({type:oe,env:C},{type:Se.type,env:o}));if(Xe>=0){let vt=o.frames[Xe].variables.filter(Ie=>Ie.isImplicit===!0&&Ie.isCompileTimeOnly===!0&&ce({type:oe,env:C},{type:Ie.type,env:o}));vt.length>0&&(Ee=vt)}}if(Ee.length>1)throw y({token:(r==null?void 0:r.token)??(e==null?void 0:e.token)??Ve,errorMessage:`Ambiguous implicit parameter "${ee.label}": found ${Ee.length} "given" variables with compatible type ${M(oe)} in the same scope.
11238
- Please use explicit using() to disambiguate.`});let ze=Ee[Ee.length-1],nt=(jn=ze.value)==null?void 0:jn[0];if(!nt)throw y({token:(r==null?void 0:r.token)??(e==null?void 0:e.token)??Ve,errorMessage:`The "given" variable "${ze.name}" has no compile-time value.`});I.push({value:nt,parameterType:oe,argType:ze.type});let{env:He}=qe({env:C,variable:{name:ee.label,type:oe,isCompileTimeOnly:!0,isImplicit:!0,value:[nt],token:((Xt=ee.exprs.labelExpr)==null?void 0:Xt.token)??Ve,initializedAtToken:((Sn=ee.exprs.labelExpr)==null?void 0:Sn.token)??Ve,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});C=He}}let D={args:f,forallArgs:_,implicitArgs:I,variadicArgs:x},P;if(n.return.isCompileTimeOnly)if(u)P=de(A,{variableName:n.return.label,env:n.env,context:a});else if(we(t)){let{value:ie,callerEnv:ee,calleeEnv:Q}=gs({functionCalleeExpr:r,functionType:n,functionValue:t,argValues:D,callerEnv:o,calleeEnv:C,context:{...a}});P=ie,A=ie.type,o=ee,C=Q}else{let ie=Pt(A)&&A.level===0,ee=`${n.id}_return_sometype`;if(ie)if((te=a.expectedType)!=null&&te.type)P=ke(a.expectedType.type);else if(a.isEvaluatingFunctionType){let Q=Br(A,n.return.label,{id:ee,env:C,context:a});Q.functionApplication=e;let oe=Kn(C,Q);P=ke(oe)}else throw y({token:(e==null?void 0:e.token)??(r==null?void 0:r.token)??Ve,errorMessage:"Cannot infer comptime return type. Please provide the expected type."});else P=de(A,{variableName:n.return.label,env:n.env,context:a})}ak({returnType:A,env:C,expr:e,context:a});let O,J=((ve=a.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:ve.kind)==="function-body"&&a.isEvaluatingFunctionBodyOrAsyncBlock.value&&we(a.isEvaluatingFunctionBodyOrAsyncBlock.value)&&t&&we(t)&&a.isEvaluatingFunctionBodyOrAsyncBlock.value.funcId===t.funcId,U=(_e=D.implicitArgs)==null?void 0:_e.some(ie=>Me(ie.value)),W=U&&!((Ce=D.implicitArgs)!=null&&Ce.some(ie=>Me(ie.value)&&!it(ie.parameterType))),q=D.args.some(ie=>ie.argType&&B(ie.argType)),j=W&&q,ue=(()=>{if(!U||!n.implicitParameters.some(oe=>oe.isEffectRowSpread))return!1;let ee=0;for(let oe of n.implicitParameters)oe.isEffectRowSpread||ee++;let Q=D.implicitArgs??[];for(let oe=0;oe<ee&&oe<Q.length;oe++)if(Me(Q[oe].value))return!1;return!0})(),X=ki(n)&&!no(n)&&n.implicitParameters.some(ie=>it(ie.type)?ie.type.fields.some(ee=>ne(ee.type)&&ee.type.forallParameters.length===0):!!ie.isEffectRowSpread);if(!l&&!X&&t&&we(t)&&!t.isControlFunction&&ki(n)&&!J&&(!U||j||ue)){if(O=ik({originalFunction:t,argValues:D,calleeEnv:C,callerEnv:o,context:a}),O&&B(A)){let ie=(Pe=(xe=O.body)==null?void 0:xe.$)==null?void 0:Pe.type;ie&&!B(ie)&&(A=ie,O.specializedType&&(O.specializedType={...O.specializedType,return:{...O.specializedType.return,type:ie}}))}if(O){let ie=new Set,ee=0;for(let Q=0;Q<n.parameters.length;Q++)if(!n.parameters[Q].isCompileTimeOnly){let Ge=D.args[Q],ge=Ge==null?void 0:Ge.value;ge&&we(ge)&&ge.type.implicitParameters.some(be=>ne(be.type)||it(be.type))&&ie.add(ee),ee++}if(ie.size>0)for(let Q=p.length-1;Q>=0;Q--)ie.has(Q)&&p.splice(Q,1)}}if(!l&&t&&we(t)&&t.isControlFunction&&n.forallParameters.length>0&&!O&&(O=ok({originalFunction:t,argValues:D,calleeEnv:C,callerEnv:o,context:a}),O&&B(A))){let ie=(Je=(st=O.body)==null?void 0:st.$)==null?void 0:Je.type;ie&&!B(ie)&&(A=ie,O.specializedType&&(O.specializedType={...O.specializedType,return:{...O.specializedType.return,type:ie}}))}let re=os(o),le;if(re.length>0){let ie=nk({variablesToDrop:re,env:o,context:a});le=ie.deferredDropExpressions,o=ie.env}return{returnType:A,calleeEnv:C,callerEnv:o,pathCollection:V,argValues:D,returnValue:P,specializedFunctionValue:O,runtimeArgExprsInOrder:p,deferredDropExpressions:le}}function ik({originalFunction:e,argValues:t,calleeEnv:n,callerEnv:r,context:i}){var x,V,I,D,P,O,J,U,W,q,j,ue,ye;if(hc){so.specializeCount++;let X=e.funcName??e.funcId;so.specializeNames.set(X,(so.specializeNames.get(X)??0)+1)}let o=e.type,a=[],s=[];t.forallArgs&&a.push(...t.forallArgs.map(X=>X.value)),t.implicitArgs&&a.push(...t.implicitArgs.map(X=>X.value)),o.parameters.forEach((X,re)=>{let le=t.args[re];if(X.isCompileTimeOnly)le.value&&a.push(le.value);else if(le.value&&we(le.value)&&le.value.type.implicitParameters.some($e=>ne($e.type)||it($e.type)))le.value&&a.push(le.value);else{let ae=B(le.argType)&&le.argType.resolvedConcreteType&&!ft(le.argType)?le.argType.resolvedConcreteType:le.argType;s.push({...X,type:ae})}});let l=s.map(X=>X.type),u=e.specializedFunctionCaches.find(X=>X.compileTimeArgValues.length===a.length&&X.compileTimeArgValues.every((Oe,$e)=>{let ae=a[$e];return Rn({value:Oe,env:X.env},{value:ae,env:r})})?X.runtimeParameterTypes.length===l.length&&X.runtimeParameterTypes.every((Oe,$e)=>{let ae=l[$e];return ce({type:Oe,env:X.env},{type:ae,env:r},!0)}):!1);if(u)return hc&&so.cacheHitCount++,u.specializedFunction;hc&&so.cacheMissCount++;let c=n;for(let X of r.frames)for(let re of X.variables){if(!re.isCompileTimeOnly||fe(c,re.name).length>0)continue;let{env:Oe}=qe({env:c,variable:{...re},allowVariableShadowing:!0});c=Oe}for(let X of s){let re=fe(c,X.label);if(re.length>0){let le=re[re.length-1],Oe={...le,value:void 0};c=Nt(c,le,Oe)}}let _=yt(e.body),{returnType:f,calleeEnv:p}=ba({functionType:o,calleeEnv:c,context:{...i,isEvaluatingFunctionType:!0},functionCalleeExpr:void 0});c=p;let d=i.enclosingFunctionReturnType,g=((x=t.implicitArgs)==null?void 0:x.some(X=>we(X.value)&&X.value.isControlFunction||xt(X.value)&&Nh(X.value.type,X.value)))??!1,m=$n({expr:_,env:c,context:{...i,expectedType:{type:f,env:c},isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:o,value:e,evaluationEnv:c},isEvaluatingLoopBody:void 0,capturedVariables:void 0,functionReturnImplConcreteType:[],hasControlFunctionImplicitParams:g,...d?{enclosingFunctionReturnType:d}:{}},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(!m.$)throw y({token:e.body.token,errorMessage:"Failed to evaluate function body for specialization."});let h=[],v=0;for(let X=0;X<o.implicitParameters.length;X++){let re=o.implicitParameters[X];if(ne(re.type)){let le=(V=t.implicitArgs)==null?void 0:V[v],Oe=le&&we(le.value)?le.value:void 0;Oe!=null&&Oe.isControlFunction&&h.push({handlerArgIndex:v,label:re.label,type:re.type,fromSpread:!1}),v+=1}else if(re.isEffectRowSpread){let le=re.type;if(B(le)){let $e=(D=(I=fe(c,re.label).at(-1))==null?void 0:I.value)==null?void 0:D[0];if($e&&Y($e)&&nn($e.value))le=$e.value;else{let ae=Kn(c,le);ae&&(le=ae)}}if(nn(le)){for(let Oe=0;Oe<le.implicitParameters.length;Oe++){let $e=le.implicitParameters[Oe];if(ne($e.type)){let ae=(P=t.implicitArgs)==null?void 0:P[v+Oe],Le=ae&&we(ae.value)?ae.value:void 0;Le!=null&&Le.isControlFunction&&h.push({handlerArgIndex:v+Oe,label:$e.label,type:$e.type,fromSpread:!0})}else if(it($e.type)){let ae=(O=t.implicitArgs)==null?void 0:O[v+Oe],Le=ae&&xt(ae.value)?ae.value:void 0,se=[],me=(he,Re,_t)=>{for(let bt=0;bt<he.fields.length;bt++){let Mt=he.fields[bt];if(ne(Mt.type)){let en=_t==null?void 0:_t.fields[bt];if(en&&we(en)&&en.isControlFunction){let lt=en.specializedType??Mt.type;se.push({path:[...Re,Mt.label],type:lt})}}else if(it(Mt.type)){let en=_t==null?void 0:_t.fields[bt];me(Mt.type,[...Re,Mt.label],en&&xt(en)?en:void 0)}}};me($e.type,[],Le);for(let he of se)h.push({handlerArgIndex:v+Oe,label:$e.label,type:he.type,fromSpread:!0,effectFieldPath:he.path})}}v+=le.implicitParameters.length}else v+=1}else if(it(re.type)){let le=[],Oe=(J=t.implicitArgs)==null?void 0:J[v],$e=(ae,Le,se)=>{for(let me=0;me<ae.fields.length;me++){let he=ae.fields[me];if(ne(he.type)){let Re=se==null?void 0:se.fields[me];if(Re&&we(Re)&&Re.isControlFunction){let _t=Re.specializedType??he.type;le.push({path:[...Le,he.label],type:_t})}}else if(it(he.type)){let Re=se==null?void 0:se.fields[me];$e(he.type,[...Le,he.label],Re&&xt(Re)?Re:void 0)}}};$e(re.type,[],Oe&&xt(Oe.value)?Oe.value:void 0);for(let ae of le)h.push({handlerArgIndex:v,label:re.label,type:ae.type,fromSpread:!1,effectFieldPath:ae.path});v+=1}else v+=1}let T=[];for(let X of h){let re=Ah(m,X.label,X.type,!0,X.effectFieldPath);if(re.hasEffects){let le=(U=t.implicitArgs)==null?void 0:U[X.handlerArgIndex],Oe,$e=X.effectFieldPath;if(le&&we(le.value))Oe=le.value;else if(le&&xt(le.value)&&$e&&$e.length>0){let ae=le.value;for(let Le of $e){if(!xt(ae)){ae=void 0;break}let se=ae.type.fields.findIndex(me=>me.label===Le);if(se<0||!ae.fields[se]){ae=void 0;break}ae=ae.fields[se]}ae&&we(ae)&&(Oe=ae)}if(Oe){let ae=Oe,Le=X.type,se=!ae.body.$;if(!se&&ae.isControlFunction&&S(ae.body)&&ae.body.args.length>0&&!((W=ae.body.args[0])!=null&&W.$)&&(se=!0),se&&ne(Le)&&Le.forallParameters.length>0&&re.effectCallPoints.length>0){let me=new Map,he=Le.return.type,Re=re.effectCallPoints[0].operationResultType;if(B(he)&&me.set(he.name,Re),me.size===0&&Le.forallParameters.length===1){let kt=Le.forallParameters[0];me.set(kt.label,Re)}let _t=yt(ae.body),bt=((q=ae.body.$)==null?void 0:q.env)??c;bt=Ft(bt);for(let kt of Le.forallParameters){let kn=me.get(kt.label);kn&&(bt=qe({env:bt,variable:{name:kt.label,type:kt.type,isCompileTimeOnly:!0,value:[ke(kn)],token:Ve,initializedAtToken:Ve,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0}).env)}let Mt=ae.specializedType??ae.type,en=((j=ae.definitionSiteEnclosingFunctionType)==null?void 0:j.return.type)??ci(),lt={...i,expectedType:void 0,enclosingFunctionReturnType:en,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:Mt,value:ae,evaluationEnv:bt}};try{let kt=Yo({expr:_t,env:bt,context:lt}),kn=Mt.parameters.map(tt=>{if(tt.isCompileTimeOnly)return tt;if(B(tt.type)){let Bt=me.get(tt.type.name);if(Bt)return{...tt,type:Bt}}return tt}),Ot=Mt.return.type;if(B(Ot)){let tt=me.get(Ot.name);tt&&(Ot=tt)}let je={...Mt,parameters:kn,return:{...Mt.return,type:Ot}},Be={...ae,body:kt,specializedType:je};re.handlerValue=Be,re.effectParameterType=je;for(let tt of re.effectCallPoints)tt.isTransitiveEffectCall&&(tt.operationArgTypes=tt.operationArgTypes.map(Bt=>B(Bt)?me.get(Bt.name)??Bt:Bt))}catch(kt){if(S(ae.body)&&ae.body.args.length>0&&!((ue=ae.body.args[0])!=null&&ue.$))throw kt;re.handlerValue=ae}}else re.handlerValue=ae}else le&&(re.handlerValue=le.value);T.push({analysis:re,ctlParam:X})}}if(T.length===1)m.$.effectAnalysis=T[0].analysis;else if(T.length>1){let X=[],re=new Map,le=new Map,Oe=[];for(let Le=0;Le<T.length;Le++){let{analysis:se}=T[Le];Oe.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 me of se.effectCallPoints)X.push({...me,effectIndex:Le});for(let me of se.capturedVariables)re.has(me.id)||re.set(me.id,me);for(let[me,he]of se.variableIdRemapping)le.set(me,he)}if(S(m)&&E(m,R.begin)){let Le=m.args,se=new Map;for(let he=0;he<Le.length;he++)se.set(Le[he],he);let me=he=>{for(let Re=0;Re<Le.length;Re++)if(ff(Le[Re],he.expr))return Re;return 999};X.sort((he,Re)=>me(he)-me(Re))}for(let Le=0;Le<X.length;Le++)X[Le].index=Le;let $e=T[0].analysis,ae={effectCallPoints:X,capturedVariables:Array.from(re.values()),hasEffects:!0,variableIdRemapping:le,effectParameterName:$e.effectParameterName,effectParameterType:$e.effectParameterType,effectFieldPath:$e.effectFieldPath,handlerValue:$e.handlerValue,effectHandlerInfos:Oe};m.$.effectAnalysis=ae}let $=[],b=X=>{if(Y(X)){let re=X.value;if(!re.typeName&&re.id)return`${Ct(X)}_id${re.id}`}return we(X)?`fn_${X.funcId}`:Ct(X)};o.forallParameters.forEach((X,re)=>{var le,Oe;if(re<t.forallArgs.length){let $e=t.forallArgs[re];$.push(Ae(b($e.value)))}else{let $e=X.label,ae=fe(n,$e);ae.length>0&&((Oe=(le=ae[ae.length-1])==null?void 0:le.value)!=null&&Oe[0])?$.push(Ae(b(ae[ae.length-1].value[0]))):$.push("unknown")}}),o.parameters.forEach((X,re)=>{if(X.isCompileTimeOnly&&re<t.args.length){let le=t.args[re];le?$.push(Ae(b(le.value))):$.push("unknown")}}),t.implicitArgs&&t.implicitArgs.forEach(X=>{$.push(Ae(b(X.value)))}),s.forEach((X,re)=>{let le=X.type;(!le.typeName&&le.id||Ye(le))&&$.push(`rtparam${re}_${Ae(M(le))}_id${le.id}`)});let w=$.join("_"),C=[];for(let X of o.implicitParameters)if(X.isEffectRowSpread){let re=X.type;if(B(re)){if(t.forallArgs){for(let le=0;le<o.forallParameters.length;le++)if(o.forallParameters[le].label===re.name&&le<t.forallArgs.length){let $e=t.forallArgs[le].value;Y($e)&&nn($e.value)&&(re=$e.value);break}}if(B(re)&&re.resolvedConcreteType&&nn(re.resolvedConcreteType)&&(re=re.resolvedConcreteType),B(re)){let le=fe(c,re.name);if(le.length>0){let $e=(ye=le[le.length-1].value)==null?void 0:ye[0];$e&&Y($e)&&nn($e.value)&&(re=$e.value)}}}nn(re)&&C.push(...re.implicitParameters)}else it(X.type)&&C.push(X);let k=mo({forallParameters:[],parameters:s,implicitParameters:C.length>0?C:void 0,variadicParameter:void 0,return_:{...o.return,type:f},parametersFrame:c.frames[c.frames.length-1],env:o.env,SelfType:o.SelfType}),A={...e,specializedType:k,body:m,isControlFunction:e.isControlFunction||Di(m),funcId:`${e.funcId}_${w}`,funcName:`${e.funcName}_${w}`,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},N={funcId:e.funcId,compileTimeArgValues:a,runtimeParameterTypes:l,specializedFunction:A,env:m.$.env};return e.specializedFunctionCaches=[...e.specializedFunctionCaches,N],A}function ok({originalFunction:e,calleeEnv:t,callerEnv:n,context:r}){var h,v,T;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)??ci(),s=Ae(M(o)),l=e.specializedFunctionCaches.find($=>$.specializedFunction.funcId===`${e.funcId}_ctl_${s}`);if(l)return l.specializedFunction;let u=Ft(t);for(let $ of n.frames)for(let b of $.variables){if(!b.isCompileTimeOnly||fe(u,b.name).length>0)continue;let{env:C}=qe({env:u,variable:{...b},allowVariableShadowing:!0});u=C}for(let $ of i.forallParameters){let b=o,{env:w}=qe({env:u,variable:{name:$.label,type:$.type,isCompileTimeOnly:!0,value:[ke(b)],token:Ve,initializedAtToken:Ve,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});u=w}let c=yt(e.body),_={...r,expectedType:void 0,enclosingFunctionReturnType:a,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:i,value:e,evaluationEnv:u},functionReturnImplConcreteType:[]},f=Yo({expr:c,env:u,context:_}),p={...e,body:f,isControlFunction:e.isControlFunction||Di(f),funcId:`${e.funcId}_ctl_${s}`,funcName:`${e.funcName??e.funcId}_ctl_${s}`,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},d=new Set(i.forallParameters.map($=>$.type)),g=$=>B($)&&d.has($)?o:$,m=mo({forallParameters:[],parameters:i.parameters.map($=>({...$,type:g($.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 p.specializedType=m,e.specializedFunctionCaches=[...e.specializedFunctionCaches,{funcId:e.funcId,compileTimeArgValues:[],runtimeParameterTypes:[],specializedFunction:p,env:((T=f.$)==null?void 0:T.env)??u}],p}function ak({returnType:e,expr:t,env:n,context:r}){var o;if(r.isEvaluatingFunctionType||r.expectedType)return;let i=n_(e);for(let a of i){if(ft(a)||tr(a)||a.resolvedConcreteType||a.requiredTraits&&a.requiredTraits.length>0)continue;if(!fe(n,a.name).length){let l=Dr(n,()=>!0),u=!1;for(let c of l)if(Y((o=c.value)==null?void 0:o[0])){let _=c.value[0].value,f=n_(_);for(let p of f)if(p.name===a.name){u=!0;break}if(u)break}if(u)continue;throw y({token:(t==null?void 0:t.token)??Ve,errorMessage:`Failed to infer the function call return type.
11238
+ Please use explicit using() to disambiguate.`});let ze=Ee[Ee.length-1],nt=(jn=ze.value)==null?void 0:jn[0];if(!nt)throw y({token:(r==null?void 0:r.token)??(e==null?void 0:e.token)??Ve,errorMessage:`The "given" variable "${ze.name}" has no compile-time value.`});I.push({value:nt,parameterType:oe,argType:ze.type});let{env:He}=qe({env:C,variable:{name:ee.label,type:oe,isCompileTimeOnly:!0,isImplicit:!0,value:[nt],token:((Xt=ee.exprs.labelExpr)==null?void 0:Xt.token)??Ve,initializedAtToken:((Sn=ee.exprs.labelExpr)==null?void 0:Sn.token)??Ve,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});C=He}}let D={args:f,forallArgs:_,implicitArgs:I,variadicArgs:x},P;if(n.return.isCompileTimeOnly)if(u)P=de(A,{variableName:n.return.label,env:n.env,context:a});else if(we(t)){let{value:ie,callerEnv:ee,calleeEnv:Q}=gs({functionCalleeExpr:r,functionType:n,functionValue:t,argValues:D,callerEnv:o,calleeEnv:C,context:{...a}});P=ie,A=ie.type,o=ee,C=Q}else{let ie=Pt(A)&&A.level===0,ee=`${n.id}_return_sometype`;if(ie)if((te=a.expectedType)!=null&&te.type)P=ke(a.expectedType.type);else if(a.isEvaluatingFunctionType){let Q=Br(A,n.return.label,{id:ee,env:C,context:a});Q.functionApplication=e;let oe=Kn(C,Q);P=ke(oe)}else throw y({token:(e==null?void 0:e.token)??(r==null?void 0:r.token)??Ve,errorMessage:"Cannot infer comptime return type. Please provide the expected type."});else P=de(A,{variableName:n.return.label,env:n.env,context:a})}ak({returnType:A,env:C,expr:e,context:a});let O,J=((ve=a.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:ve.kind)==="function-body"&&a.isEvaluatingFunctionBodyOrAsyncBlock.value&&we(a.isEvaluatingFunctionBodyOrAsyncBlock.value)&&t&&we(t)&&a.isEvaluatingFunctionBodyOrAsyncBlock.value.funcId===t.funcId,U=(_e=D.implicitArgs)==null?void 0:_e.some(ie=>Me(ie.value)),W=U&&!((Ce=D.implicitArgs)!=null&&Ce.some(ie=>Me(ie.value)&&!it(ie.parameterType))),q=D.args.some(ie=>ie.argType&&B(ie.argType)),j=W&&q,ue=(()=>{if(!U||!n.implicitParameters.some(oe=>oe.isEffectRowSpread))return!1;let ee=0;for(let oe of n.implicitParameters)oe.isEffectRowSpread||ee++;let Q=D.implicitArgs??[];for(let oe=0;oe<ee&&oe<Q.length;oe++)if(Me(Q[oe].value))return!1;return!0})(),X=ki(n)&&!no(n)&&n.implicitParameters.some(ie=>it(ie.type)?ie.type.fields.some(ee=>ne(ee.type)&&ee.type.forallParameters.length===0):!!ie.isEffectRowSpread);if(!l&&!X&&t&&we(t)&&!t.isControlFunction&&ki(n)&&!J&&(!U||j||ue)){if(O=ik({originalFunction:t,argValues:D,calleeEnv:C,callerEnv:o,context:a}),O&&B(A)){let ie=(Pe=(xe=O.body)==null?void 0:xe.$)==null?void 0:Pe.type;ie&&!B(ie)&&(A=ie,O.specializedType&&(O.specializedType={...O.specializedType,return:{...O.specializedType.return,type:ie}}))}if(O){let ie=new Set,ee=0;for(let Q=0;Q<n.parameters.length;Q++)if(!n.parameters[Q].isCompileTimeOnly){let Ge=D.args[Q],ge=Ge==null?void 0:Ge.value;ge&&we(ge)&&ge.type.implicitParameters.some(be=>ne(be.type)||it(be.type))&&ie.add(ee),ee++}if(ie.size>0)for(let Q=p.length-1;Q>=0;Q--)ie.has(Q)&&p.splice(Q,1)}}if(!l&&t&&we(t)&&t.isControlFunction&&n.forallParameters.length>0&&!O&&(O=ok({originalFunction:t,argValues:D,calleeEnv:C,callerEnv:o,context:a}),O&&B(A))){let ie=(Je=(st=O.body)==null?void 0:st.$)==null?void 0:Je.type;ie&&!B(ie)&&(A=ie,O.specializedType&&(O.specializedType={...O.specializedType,return:{...O.specializedType.return,type:ie}}))}let re=os(o),le;if(re.length>0){let ie=nk({variablesToDrop:re,env:o,context:a});le=ie.deferredDropExpressions,o=ie.env}return{returnType:A,calleeEnv:C,callerEnv:o,pathCollection:V,argValues:D,returnValue:P,specializedFunctionValue:O,runtimeArgExprsInOrder:p,deferredDropExpressions:le}}function ik({originalFunction:e,argValues:t,calleeEnv:n,callerEnv:r,context:i}){var x,V,I,D,P,O,J,U,W,q,j,ue,ye;if(hc){so.specializeCount++;let X=e.funcName??e.funcId;so.specializeNames.set(X,(so.specializeNames.get(X)??0)+1)}let o=e.type,a=[],s=[];t.forallArgs&&a.push(...t.forallArgs.map(X=>X.value)),t.implicitArgs&&a.push(...t.implicitArgs.map(X=>X.value)),o.parameters.forEach((X,re)=>{let le=t.args[re];if(X.isCompileTimeOnly)le.value&&a.push(le.value);else if(le.value&&we(le.value)&&le.value.type.implicitParameters.some($e=>ne($e.type)||it($e.type)))le.value&&a.push(le.value);else{let ae=B(le.argType)&&le.argType.resolvedConcreteType&&!ft(le.argType)?le.argType.resolvedConcreteType:le.argType;s.push({...X,type:ae})}});let l=s.map(X=>X.type),u=e.specializedFunctionCaches.find(X=>X.compileTimeArgValues.length===a.length&&X.compileTimeArgValues.every((Oe,$e)=>{let ae=a[$e];return Rn({value:Oe,env:X.env},{value:ae,env:r})})?X.runtimeParameterTypes.length===l.length&&X.runtimeParameterTypes.every((Oe,$e)=>{let ae=l[$e];return ce({type:Oe,env:X.env},{type:ae,env:r},!0)}):!1);if(u)return hc&&so.cacheHitCount++,u.specializedFunction;hc&&so.cacheMissCount++;let c=n;for(let X of r.frames)for(let re of X.variables){if(!re.isCompileTimeOnly||fe(c,re.name).length>0)continue;let{env:Oe}=qe({env:c,variable:{...re},allowVariableShadowing:!0});c=Oe}for(let X of s){let re=fe(c,X.label);if(re.length>0){let le=re[re.length-1],Oe={...le,value:void 0};c=Nt(c,le,Oe)}}let _=yt(e.body),{returnType:f,calleeEnv:p}=ba({functionType:o,calleeEnv:c,context:{...i,isEvaluatingFunctionType:!0},functionCalleeExpr:void 0});c=p;let d=i.enclosingFunctionReturnType,g=((x=t.implicitArgs)==null?void 0:x.some(X=>we(X.value)&&X.value.isControlFunction||xt(X.value)&&Nh(X.value.type,X.value)))??!1,m=$n({expr:_,env:c,context:{...i,expectedType:{type:f,env:c},isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:o,value:e,evaluationEnv:c},isEvaluatingLoopBody:void 0,capturedVariables:void 0,functionReturnImplConcreteType:[],hasControlFunctionImplicitParams:g,...d?{enclosingFunctionReturnType:d}:{}},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(!m.$)throw y({token:e.body.token,errorMessage:"Failed to evaluate function body for specialization."});let h=[],v=0;for(let X=0;X<o.implicitParameters.length;X++){let re=o.implicitParameters[X];if(ne(re.type)){let le=(V=t.implicitArgs)==null?void 0:V[v],Oe=le&&we(le.value)?le.value:void 0;Oe!=null&&Oe.isControlFunction&&h.push({handlerArgIndex:v,label:re.label,type:re.type,fromSpread:!1}),v+=1}else if(re.isEffectRowSpread){let le=re.type;if(B(le)){let $e=(D=(I=fe(c,re.label).at(-1))==null?void 0:I.value)==null?void 0:D[0];if($e&&Y($e)&&nn($e.value))le=$e.value;else{let ae=Kn(c,le);ae&&(le=ae)}}if(nn(le)){for(let Oe=0;Oe<le.implicitParameters.length;Oe++){let $e=le.implicitParameters[Oe];if(ne($e.type)){let ae=(P=t.implicitArgs)==null?void 0:P[v+Oe],Ae=ae&&we(ae.value)?ae.value:void 0;Ae!=null&&Ae.isControlFunction&&h.push({handlerArgIndex:v+Oe,label:$e.label,type:$e.type,fromSpread:!0})}else if(it($e.type)){let ae=(O=t.implicitArgs)==null?void 0:O[v+Oe],Ae=ae&&xt(ae.value)?ae.value:void 0,se=[],me=(he,Re,_t)=>{for(let bt=0;bt<he.fields.length;bt++){let Mt=he.fields[bt];if(ne(Mt.type)){let en=_t==null?void 0:_t.fields[bt];if(en&&we(en)&&en.isControlFunction){let lt=en.specializedType??Mt.type;se.push({path:[...Re,Mt.label],type:lt})}}else if(it(Mt.type)){let en=_t==null?void 0:_t.fields[bt];me(Mt.type,[...Re,Mt.label],en&&xt(en)?en:void 0)}}};me($e.type,[],Ae);for(let he of se)h.push({handlerArgIndex:v+Oe,label:$e.label,type:he.type,fromSpread:!0,effectFieldPath:he.path})}}v+=le.implicitParameters.length}else v+=1}else if(it(re.type)){let le=[],Oe=(J=t.implicitArgs)==null?void 0:J[v],$e=(ae,Ae,se)=>{for(let me=0;me<ae.fields.length;me++){let he=ae.fields[me];if(ne(he.type)){let Re=se==null?void 0:se.fields[me];if(Re&&we(Re)&&Re.isControlFunction){let _t=Re.specializedType??he.type;le.push({path:[...Ae,he.label],type:_t})}}else if(it(he.type)){let Re=se==null?void 0:se.fields[me];$e(he.type,[...Ae,he.label],Re&&xt(Re)?Re:void 0)}}};$e(re.type,[],Oe&&xt(Oe.value)?Oe.value:void 0);for(let ae of le)h.push({handlerArgIndex:v,label:re.label,type:ae.type,fromSpread:!1,effectFieldPath:ae.path});v+=1}else v+=1}let T=[];for(let X of h){let re=Ah(m,X.label,X.type,!0,X.effectFieldPath);if(re.hasEffects){let le=(U=t.implicitArgs)==null?void 0:U[X.handlerArgIndex],Oe,$e=X.effectFieldPath;if(le&&we(le.value))Oe=le.value;else if(le&&xt(le.value)&&$e&&$e.length>0){let ae=le.value;for(let Ae of $e){if(!xt(ae)){ae=void 0;break}let se=ae.type.fields.findIndex(me=>me.label===Ae);if(se<0||!ae.fields[se]){ae=void 0;break}ae=ae.fields[se]}ae&&we(ae)&&(Oe=ae)}if(Oe){let ae=Oe,Ae=X.type,se=!ae.body.$;if(!se&&ae.isControlFunction&&S(ae.body)&&ae.body.args.length>0&&!((W=ae.body.args[0])!=null&&W.$)&&(se=!0),se&&ne(Ae)&&Ae.forallParameters.length>0&&re.effectCallPoints.length>0){let me=new Map,he=Ae.return.type,Re=re.effectCallPoints[0].operationResultType;if(B(he)&&me.set(he.name,Re),me.size===0&&Ae.forallParameters.length===1){let kt=Ae.forallParameters[0];me.set(kt.label,Re)}let _t=yt(ae.body),bt=((q=ae.body.$)==null?void 0:q.env)??c;bt=Ft(bt);for(let kt of Ae.forallParameters){let kn=me.get(kt.label);kn&&(bt=qe({env:bt,variable:{name:kt.label,type:kt.type,isCompileTimeOnly:!0,value:[ke(kn)],token:Ve,initializedAtToken:Ve,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0}).env)}let Mt=ae.specializedType??ae.type,en=((j=ae.definitionSiteEnclosingFunctionType)==null?void 0:j.return.type)??ci(),lt={...i,expectedType:void 0,enclosingFunctionReturnType:en,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:Mt,value:ae,evaluationEnv:bt}};try{let kt=Yo({expr:_t,env:bt,context:lt}),kn=Mt.parameters.map(tt=>{if(tt.isCompileTimeOnly)return tt;if(B(tt.type)){let Bt=me.get(tt.type.name);if(Bt)return{...tt,type:Bt}}return tt}),Ot=Mt.return.type;if(B(Ot)){let tt=me.get(Ot.name);tt&&(Ot=tt)}let je={...Mt,parameters:kn,return:{...Mt.return,type:Ot}},Be={...ae,body:kt,specializedType:je};re.handlerValue=Be,re.effectParameterType=je;for(let tt of re.effectCallPoints)tt.isTransitiveEffectCall&&(tt.operationArgTypes=tt.operationArgTypes.map(Bt=>B(Bt)?me.get(Bt.name)??Bt:Bt))}catch(kt){if(S(ae.body)&&ae.body.args.length>0&&!((ue=ae.body.args[0])!=null&&ue.$))throw kt;re.handlerValue=ae}}else re.handlerValue=ae}else le&&(re.handlerValue=le.value);T.push({analysis:re,ctlParam:X})}}if(T.length===1)m.$.effectAnalysis=T[0].analysis;else if(T.length>1){let X=[],re=new Map,le=new Map,Oe=[];for(let Ae=0;Ae<T.length;Ae++){let{analysis:se}=T[Ae];Oe.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 me of se.effectCallPoints)X.push({...me,effectIndex:Ae});for(let me of se.capturedVariables)re.has(me.id)||re.set(me.id,me);for(let[me,he]of se.variableIdRemapping)le.set(me,he)}if(S(m)&&E(m,R.begin)){let Ae=m.args,se=new Map;for(let he=0;he<Ae.length;he++)se.set(Ae[he],he);let me=he=>{for(let Re=0;Re<Ae.length;Re++)if(ff(Ae[Re],he.expr))return Re;return 999};X.sort((he,Re)=>me(he)-me(Re))}for(let Ae=0;Ae<X.length;Ae++)X[Ae].index=Ae;let $e=T[0].analysis,ae={effectCallPoints:X,capturedVariables:Array.from(re.values()),hasEffects:!0,variableIdRemapping:le,effectParameterName:$e.effectParameterName,effectParameterType:$e.effectParameterType,effectFieldPath:$e.effectFieldPath,handlerValue:$e.handlerValue,effectHandlerInfos:Oe};m.$.effectAnalysis=ae}let $=[],b=X=>{if(Y(X)){let re=X.value;if(!re.typeName&&re.id)return`${Ct(X)}_id${re.id}`}return we(X)?`fn_${X.funcId}`:Ct(X)};o.forallParameters.forEach((X,re)=>{var le,Oe;if(re<t.forallArgs.length){let $e=t.forallArgs[re];$.push(Le(b($e.value)))}else{let $e=X.label,ae=fe(n,$e);ae.length>0&&((Oe=(le=ae[ae.length-1])==null?void 0:le.value)!=null&&Oe[0])?$.push(Le(b(ae[ae.length-1].value[0]))):$.push("unknown")}}),o.parameters.forEach((X,re)=>{if(X.isCompileTimeOnly&&re<t.args.length){let le=t.args[re];le?$.push(Le(b(le.value))):$.push("unknown")}}),t.implicitArgs&&t.implicitArgs.forEach(X=>{$.push(Le(b(X.value)))}),s.forEach((X,re)=>{let le=X.type;(!le.typeName&&le.id||Ye(le))&&$.push(`rtparam${re}_${Le(M(le))}_id${le.id}`)});let w=$.join("_"),C=[];for(let X of o.implicitParameters)if(X.isEffectRowSpread){let re=X.type;if(B(re)){if(t.forallArgs){for(let le=0;le<o.forallParameters.length;le++)if(o.forallParameters[le].label===re.name&&le<t.forallArgs.length){let $e=t.forallArgs[le].value;Y($e)&&nn($e.value)&&(re=$e.value);break}}if(B(re)&&re.resolvedConcreteType&&nn(re.resolvedConcreteType)&&(re=re.resolvedConcreteType),B(re)){let le=fe(c,re.name);if(le.length>0){let $e=(ye=le[le.length-1].value)==null?void 0:ye[0];$e&&Y($e)&&nn($e.value)&&(re=$e.value)}}}nn(re)&&C.push(...re.implicitParameters)}else it(X.type)&&C.push(X);let k=mo({forallParameters:[],parameters:s,implicitParameters:C.length>0?C:void 0,variadicParameter:void 0,return_:{...o.return,type:f},parametersFrame:c.frames[c.frames.length-1],env:o.env,SelfType:o.SelfType}),A={...e,specializedType:k,body:m,isControlFunction:e.isControlFunction||Di(m),funcId:`${e.funcId}_${w}`,funcName:`${e.funcName}_${w}`,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},N={funcId:e.funcId,compileTimeArgValues:a,runtimeParameterTypes:l,specializedFunction:A,env:m.$.env};return e.specializedFunctionCaches=[...e.specializedFunctionCaches,N],A}function ok({originalFunction:e,calleeEnv:t,callerEnv:n,context:r}){var h,v,T;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)??ci(),s=Le(M(o)),l=e.specializedFunctionCaches.find($=>$.specializedFunction.funcId===`${e.funcId}_ctl_${s}`);if(l)return l.specializedFunction;let u=Ft(t);for(let $ of n.frames)for(let b of $.variables){if(!b.isCompileTimeOnly||fe(u,b.name).length>0)continue;let{env:C}=qe({env:u,variable:{...b},allowVariableShadowing:!0});u=C}for(let $ of i.forallParameters){let b=o,{env:w}=qe({env:u,variable:{name:$.label,type:$.type,isCompileTimeOnly:!0,value:[ke(b)],token:Ve,initializedAtToken:Ve,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});u=w}let c=yt(e.body),_={...r,expectedType:void 0,enclosingFunctionReturnType:a,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:i,value:e,evaluationEnv:u},functionReturnImplConcreteType:[]},f=Yo({expr:c,env:u,context:_}),p={...e,body:f,isControlFunction:e.isControlFunction||Di(f),funcId:`${e.funcId}_ctl_${s}`,funcName:`${e.funcName??e.funcId}_ctl_${s}`,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},d=new Set(i.forallParameters.map($=>$.type)),g=$=>B($)&&d.has($)?o:$,m=mo({forallParameters:[],parameters:i.parameters.map($=>({...$,type:g($.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 p.specializedType=m,e.specializedFunctionCaches=[...e.specializedFunctionCaches,{funcId:e.funcId,compileTimeArgValues:[],runtimeParameterTypes:[],specializedFunction:p,env:((T=f.$)==null?void 0:T.env)??u}],p}function ak({returnType:e,expr:t,env:n,context:r}){var o;if(r.isEvaluatingFunctionType||r.expectedType)return;let i=n_(e);for(let a of i){if(ft(a)||tr(a)||a.resolvedConcreteType||a.requiredTraits&&a.requiredTraits.length>0)continue;if(!fe(n,a.name).length){let l=Dr(n,()=>!0),u=!1;for(let c of l)if(Y((o=c.value)==null?void 0:o[0])){let _=c.value[0].value,f=n_(_);for(let p of f)if(p.name===a.name){u=!0;break}if(u)break}if(u)continue;throw y({token:(t==null?void 0:t.token)??Ve,errorMessage:`Failed to infer the function call return type.
11239
11239
  Please consider providing the expected type.`})}}}function ff(e,t){if(e===t)return!0;if(e.tag==="FnCall"){if(ff(e.func,t))return!0;for(let n of e.args)if(ff(n,t))return!0}return!1}var hc,Ih,so,pf=Z(()=>{Wt();mt();De();Te();Do();Gi();gn();rn();Et();bi();Ne();at();Fe();Sh();vc();Ci();et();qt();Co();fa();lc();hc=gc("YO_DEBUG_CALL")||gc("YO_DEBUG_CALL_PROFILE")||gc("YO_DEBUG_EVAL")||gc("YO_DEBUG_EVAL_PROFILE"),Ih=globalThis,so=Ih.__yoCallProfilerState??(Ih.__yoCallProfilerState={tryCallCount:0,specializeCount:0,cacheHitCount:0,cacheMissCount:0,specializeNames:new Map,tryCallNames:new Map})});function xh({concreteType:e,env:t}){let n=[];if(e.trait)for(let i of e.trait.fields){if(i.label===""&&i.assignedValue&&vn(i.assignedValue)){let o=i.assignedValue,a=o.type,s=a.fields.findIndex(l=>l.label==="index"&&ne(l.type));if(s>=0){let l=a.fields[s];if(ne(l.type)){let u=o.fields[s],c=l.type;we(u)&&u.specializedType&&(c=u.specializedType),n.push({type:c,value:u})}}}i.label==="index"&&ne(i.type)&&n.push({type:i.type,value:i.assignedValue})}let r=pi({concreteType:e,methodName:"index",env:t});return n.push(...r),n}function sk({concreteType:e,argType:t,env:n}){let r=xh({concreteType:e,env:n});if(r.length!==0)for(let i of r){let o=i.type;if(o.parameters.length!==2)continue;let a=o.parameters[0],s=o.parameters[1];if(ot(a.type)&&ce({type:s.type,env:n},{type:t,env:n})&&ot(o.return.type))return i}}function df({expr:e,valueType:t,argExprs:n,callerEnv:r,context:i}){if(n.length!==1)throw y({token:e.func.token,errorMessage:`Index trait expects exactly 1 argument, got ${n.length}.`});let o=n[0],a=z({expr:o,env:r,context:{...i,expectedType:void 0}});if(!a.$)throw y({token:o.token,errorMessage:`Failed to evaluate index argument:
11240
11240
  ${L(o)}`});r=a.$.env;let s=a.$.type,l=sk({concreteType:t,argType:s,env:r});if(!l)throw y({token:e.func.token,errorMessage:`Type "${M(t)}" does not implement Index(${M(s)}).`});let u=l.type,c=u.return.type;if(!ot(c))throw y({token:e.func.token,errorMessage:`Index method must return a pointer type, got: ${M(c)}`});let _=c.childType,f=de(_,{env:r,context:i});return Me(f)&&(f.isRuntimeOnly=!0),{value:f,type:_,ptrType:c,indexMethodType:u,indexMethodValue:l.value,callerEnv:r}}function mf({concreteType:e,argExprs:t,callerEnv:n,_context:r}){if(t.length!==1)return!1;if(ut(e)||Vt(e))return!0;try{return xh({concreteType:e,env:n}).length>0}catch{return!1}}var Vh=Z(()=>{De();Te();rn();Ne();at();Fe();et();to()});function Dh({expr:e,env:t,context:n}){let r=e.args[0],i=z({expr:r,env:t,context:{...n}});if(!i.$)throw y({token:r.token,errorMessage:`Failed to evaluate the argument expression for Iso:
11241
11241
  ${L(r)}`});if(t=i.$.env,!Y(i.$.value))throw y({token:r.token,errorMessage:`Iso expects a type as argument, but got:
@@ -11267,7 +11267,7 @@ ${L(d)}`});if(d){let v=d.token.value,T=e.find($=>$.label===v);if(T){if(T.assigne
11267
11267
  ${ja(T)}`});f=T}else throw y({token:p.token,errorMessage:`Failed to find "${v}" in the type.`})}if(a.has(f))throw y({token:p.token,errorMessage:`Type member "${f.label}" is already implemented.`});let g=e.indexOf(f),m=z({expr:p,env:r,context:{...i,expectedType:{type:f.type,env:r}}});if(!m.$)throw y({token:p.token,errorMessage:`Failed to evaluate argument expression:
11268
11268
  ${L(p)}`});nr(m,i),r=m.$.env;let h=m.$.type;if(ra(f.type,r)||(h=Tn({type:h,expectedType:f.type,expr:m,env:r})),d&&(d.$=m.$),!ce({type:f.type,env:r},{type:h,env:r}))throw y({token:p.token,errorMessage:`Type mismatch for type member "${f.label}":
11269
11269
  Expected: ${M(f.type)}
11270
- Got: ${M(h)}`});s[g]=(c=m.$)==null?void 0:c.value,l[g]=m,a.add(f)}if(!o)for(let _=0;_<e.length;_++){let f=e[_];if(!a.has(f)){if(!f.defaultValue&&!f.assignedValue)throw y({token:t.token,errorMessage:`Type member "${f.label}" is not provided and has no default value or assigned value.`});s[_]=f.defaultValue??f.assignedValue,l[_]=f.exprs.defaultValueExpr??f.exprs.assignedValueExpr}}return{values:s,pathCollection:[],callerEnv:r,runtimeArgExprsInOrder:l}}var Wh=Z(()=>{De();Te();rn();at();et()});function lk(e,t,n){if(!e.recursiveTypeRef)return;let{functionValue:r,argValues:i}=e.recursiveTypeRef,o=r.calledComptimeFunctionCaches.find(s=>s.argValues.length===i.length&&s.argValues.every((l,u)=>{let c=i[u];return Y(l)&&Y(c)?ce({type:l.value,env:s.env},{type:c.value,env:t},!0):Rn({value:l,env:s.env},{value:c,env:t})}));if(o&&Y(o.value)&&!(B(o.value.value)&&o.value.value.recursiveTypeRef))return o.value.value;if(n!=null&&n.SelfType&&pn(n.SelfType)||n!=null&&n.SelfType&&Ue(n.SelfType))return n.SelfType;let a=r.calledComptimeFunctionCaches.find(s=>!(!Y(s.value)||B(s.value.value)&&s.value.value.recursiveTypeRef));if(a&&Y(a.value))return a.value.value}function di({expr:e,env:t,context:n,givenFunc:r,forMacroExpansion:i}){var v,T,$,b,w,C,k,A,N,x,V,I,D,P,O,J,U,W,q,j,ue,ye,X,re,le,Oe,$e,ae,Le,se,me,he,Re,_t,bt,Mt,en,lt,kt,kn,Ot,je,Be,tt,Bt,jn,Xt,Sn;let o=e.func,a=e.args,s,l=[];if(r)l=[r];else if(S(o)){let te=E(o,"."),ve=z({expr:o,env:t,context:te?{...n}:{...n,expectedType:void 0}});if(o=ve,(v=o.$)!=null&&v.env&&(t=o.$.env),(T=ve.$)!=null&&T.type)l=[{type:ve.$.type,value:ve.$.value}];else if(S(ve)&&E(ve,".",2)){let _e=ve.args[0];s=ve.args[1];let Ce=($=_e.$)==null?void 0:$.type;if(!Ce)throw y({token:_e.token,errorMessage:"Expected to be evaluated."});let xe=(b=_e.$)==null?void 0:b.value,Pe=Y(xe);if(K(s)){let st=s.token.value;if(Pe){let Je=xe.value;l=md({env:t,context:n,methodName:st,type:Je}).map(ee=>({type:ee.type,value:ee.value,args:a}))}else l=g_({env:t,context:n,methodName:st,receiverType:Ce,isInfixOperatorCall:!1}).map(ie=>{let ee;if(ie.needsPointerConversion){let Q={tag:"Atom",token:_e.token,$:void 0};Q.token={..._e.token,value:"&",type:"identifier"},ee=[{tag:"FnCall",func:Q,args:[_e],token:_e.token,$:void 0},...a]}else ee=[_e,...a];return{type:ie.type,value:ie.value,needsPointerConversion:ie.needsPointerConversion,args:ee}})}else{let st=z({expr:s,env:t,context:{...n}});(w=st.$)!=null&&w.env&&(t=(C=st.$)==null?void 0:C.env),s=st;let Je=(k=s.$)==null?void 0:k.type,ie=(A=s.$)==null?void 0:A.value;if(!Je)throw y({token:s.token,errorMessage:"Expected to be a function."});l=[{type:Je,value:ie}],a=[_e,...a]}}else throw y({token:o.token,errorMessage:`Expected type for function call, got ${L(ve)}`})}else{let te=o.token.value;if(te==="_"){let ve=n.expectedType;if(!ve||B(ve.type))return mh({expr:e,env:t,context:n});l=[{type:In(ve.type),value:ke(ve.type)}],o.$={env:t,type:l[0].type,value:l[0].value,pathCollection:[]}}else if(Bi(te)&&e.isInfix){let ve=a[0];if(!ve)throw y({token:o.token,errorMessage:`Expected first argument for operator, got:
11270
+ Got: ${M(h)}`});s[g]=(c=m.$)==null?void 0:c.value,l[g]=m,a.add(f)}if(!o)for(let _=0;_<e.length;_++){let f=e[_];if(!a.has(f)){if(!f.defaultValue&&!f.assignedValue)throw y({token:t.token,errorMessage:`Type member "${f.label}" is not provided and has no default value or assigned value.`});s[_]=f.defaultValue??f.assignedValue,l[_]=f.exprs.defaultValueExpr??f.exprs.assignedValueExpr}}return{values:s,pathCollection:[],callerEnv:r,runtimeArgExprsInOrder:l}}var Wh=Z(()=>{De();Te();rn();at();et()});function lk(e,t,n){if(!e.recursiveTypeRef)return;let{functionValue:r,argValues:i}=e.recursiveTypeRef,o=r.calledComptimeFunctionCaches.find(s=>s.argValues.length===i.length&&s.argValues.every((l,u)=>{let c=i[u];return Y(l)&&Y(c)?ce({type:l.value,env:s.env},{type:c.value,env:t},!0):Rn({value:l,env:s.env},{value:c,env:t})}));if(o&&Y(o.value)&&!(B(o.value.value)&&o.value.value.recursiveTypeRef))return o.value.value;if(n!=null&&n.SelfType&&pn(n.SelfType)||n!=null&&n.SelfType&&Ue(n.SelfType))return n.SelfType;let a=r.calledComptimeFunctionCaches.find(s=>!(!Y(s.value)||B(s.value.value)&&s.value.value.recursiveTypeRef));if(a&&Y(a.value))return a.value.value}function di({expr:e,env:t,context:n,givenFunc:r,forMacroExpansion:i}){var v,T,$,b,w,C,k,A,N,x,V,I,D,P,O,J,U,W,q,j,ue,ye,X,re,le,Oe,$e,ae,Ae,se,me,he,Re,_t,bt,Mt,en,lt,kt,kn,Ot,je,Be,tt,Bt,jn,Xt,Sn;let o=e.func,a=e.args,s,l=[];if(r)l=[r];else if(S(o)){let te=E(o,"."),ve=z({expr:o,env:t,context:te?{...n}:{...n,expectedType:void 0}});if(o=ve,(v=o.$)!=null&&v.env&&(t=o.$.env),(T=ve.$)!=null&&T.type)l=[{type:ve.$.type,value:ve.$.value}];else if(S(ve)&&E(ve,".",2)){let _e=ve.args[0];s=ve.args[1];let Ce=($=_e.$)==null?void 0:$.type;if(!Ce)throw y({token:_e.token,errorMessage:"Expected to be evaluated."});let xe=(b=_e.$)==null?void 0:b.value,Pe=Y(xe);if(K(s)){let st=s.token.value;if(Pe){let Je=xe.value;l=md({env:t,context:n,methodName:st,type:Je}).map(ee=>({type:ee.type,value:ee.value,args:a}))}else l=g_({env:t,context:n,methodName:st,receiverType:Ce,isInfixOperatorCall:!1}).map(ie=>{let ee;if(ie.needsPointerConversion){let Q={tag:"Atom",token:_e.token,$:void 0};Q.token={..._e.token,value:"&",type:"identifier"},ee=[{tag:"FnCall",func:Q,args:[_e],token:_e.token,$:void 0},...a]}else ee=[_e,...a];return{type:ie.type,value:ie.value,needsPointerConversion:ie.needsPointerConversion,args:ee}})}else{let st=z({expr:s,env:t,context:{...n}});(w=st.$)!=null&&w.env&&(t=(C=st.$)==null?void 0:C.env),s=st;let Je=(k=s.$)==null?void 0:k.type,ie=(A=s.$)==null?void 0:A.value;if(!Je)throw y({token:s.token,errorMessage:"Expected to be a function."});l=[{type:Je,value:ie}],a=[_e,...a]}}else throw y({token:o.token,errorMessage:`Expected type for function call, got ${L(ve)}`})}else{let te=o.token.value;if(te==="_"){let ve=n.expectedType;if(!ve||B(ve.type))return mh({expr:e,env:t,context:n});l=[{type:In(ve.type),value:ke(ve.type)}],o.$={env:t,type:l[0].type,value:l[0].value,pathCollection:[]}}else if(Bi(te)&&e.isInfix){let ve=a[0];if(!ve)throw y({token:o.token,errorMessage:`Expected first argument for operator, got:
11271
11271
  ${L(o)}`});let Ce=(N=z({expr:ve,env:t,context:{...n,expectedType:void 0}}).$)==null?void 0:N.type;if(!Ce)throw y({token:ve.token,errorMessage:"Expected to be evaluated."});let xe=te;s=o,l=g_({env:t,context:n,methodName:xe,receiverType:Ce,isInfixOperatorCall:!0}).map(st=>({type:st.type,value:st.value,needsPointerConversion:st.needsPointerConversion}))}else if(te==="Call"&&n.SelfType){let ve=ke(n.SelfType);l=[{type:ve.type,value:ve}]}else{let ve=z({expr:o,env:t,context:{...n}});if(o=ve,!ve.$)throw y({token:o.token,errorMessage:"Failed to evaluate the callee:"});if(it(ve.$.type)){let _e=ve.$.type,Ce=_e.fields.findIndex(Pe=>Pe.label==="Call");if(Ce<0)throw y({token:o.token,errorMessage:'Calling a module value which does not have "Call" element is not allowed.'});let xe=_e.fields[Ce];if(xe.assignedValue){let Pe=xe.assignedValue;Pr(Pe)?l=Pe.fields.map(st=>({type:st.type,value:st})):l=[{type:Pe.type,value:Pe}]}else throw y({token:o.token,errorMessage:`Calling a module value whose "Call" element doesn't have assigned value is not allowed.`})}else l=[{type:ve.$.type,value:ve.$.value}]}}if(a.some(ve=>K(ve)&&ve.token.value==="_")&&l.length===1&&we(l[0].value)&&ne(l[0].type)&&l[0].type.return.isCompileTimeOnly){let ve=l[0].value,_e=l[0].type,Ce=_e.parameters;if(a.length!==Ce.length)throw y({token:o.token,errorMessage:`Partial application: expected ${Ce.length} argument(s), got ${a.length}`});let xe=Ft(t),Pe=`__pa_fn_${Lt(t.modulePath)}`;{let{env:Ge}=qe({env:xe,variable:{name:Pe,type:_e,isCompileTimeOnly:!0,value:[ve],token:o.token,initializedAtToken:o.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});xe=Ge}let st=[],Je=[];for(let Ge=0;Ge<a.length;Ge++){let ge=a[Ge],be=Ce[Ge];if(K(ge)&&ge.token.value==="_"){let Ee=`__pa_${Ge}_${Lt(t.modulePath)}`;st.push({...be,label:Ee}),Je.push({tag:"Atom",token:{type:"identifier",value:Ee,position:ge.token.position,modulePath:t.modulePath,inputString:t.inputString}})}else{let Ee=`__pa_cap_${Ge}_${Lt(t.modulePath)}`,ze=z({expr:ge,env:xe,context:{...n}});if(!ze.$)throw y({token:ge.token,errorMessage:"Failed to evaluate partial application argument"});xe=ze.$.env;let{env:nt}=qe({env:xe,variable:{name:Ee,type:ze.$.type,isCompileTimeOnly:!0,value:ze.$.value?[ze.$.value]:void 0,token:ge.token,initializedAtToken:ge.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});xe=nt,Je.push({tag:"Atom",token:{type:"identifier",value:Ee,position:ge.token.position,modulePath:t.modulePath,inputString:t.inputString}})}}let ie={tag:"FnCall",func:{tag:"Atom",token:{type:"identifier",value:Pe,position:o.token.position,modulePath:t.modulePath,inputString:t.inputString}},args:Je,token:o.token},ee={id:`pa_frame_${Lt(t.modulePath)}`,variables:st.map(Ge=>({id:`pa_var_${Lt(t.modulePath)}`,name:Ge.label,type:Ge.type,isCompileTimeOnly:!0,value:void 0,token:Ve,initializedAtToken:Ve,consumedAtToken:void 0,isOwningTheRcValue:!1,frameLevel:xe.frames.length})),isBeginBlockFrame:!1,whereClauseConstraints:new Map},Q=mo({parameters:st,forallParameters:[],variadicParameter:void 0,return_:{..._e.return},env:xe,parametersFrame:ee}),oe={tag:"Function",type:Q,body:ie,frameLevel:xe.frames.length-1,funcName:`partial_${ve.funcName??"anon"}`,funcId:`partial_${Lt(t.modulePath)}`,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]};return e.$={env:t,type:Q,value:oe,pathCollection:[]},e}let u=l.length===1&&ne(l[0].type)&&l[0].type.return.isCompileTimeOnly&&!l[0].type.return.isUnquote&&!Pt(l[0].type.return.type)&&l[0].type.forallParameters.length===0,f=l.length===1&&(ne(l[0].type)||(B(l[0].type)||dt(l[0].type))&&!!pr(l[0].type))?l.map(te=>({...te,result:{kind:"function",result:void 0}})):l.map(te=>{let ve=te.args??a;if(ne(te.type))try{let _e=Wo({functionValue:Es(te.value),functionType:te.type,expr:yt(e),functionCalleeExpr:o,argExprs:ve.map(Ce=>yt(Ce)),callerEnv:y_(t),context:{...n,isInFunctionCallCheckingPhase:!0},isMethodCall:!!s,skipSpecialization:!0,skipCtfeExecution:!0});return{...te,result:{kind:"function",result:_e}}}catch(_e){if(_e instanceof Tr&&_e.kind==="overflow")throw un([{token:e.token,errorMessage:`Failed to call the function:
11272
11272
  `},..._e.tokenAndErrorList],_e.isAssertionError);return{...te,result:{kind:"error",error:_e}}}else if((B(te.type)||dt(te.type))&&pr(te.type)){let _e=pr(te.type);try{let Ce=Wo({functionValue:Es(te.value),functionType:_e.isFn.callType,expr:yt(e),functionCalleeExpr:o,argExprs:ve.map(xe=>yt(xe)),callerEnv:y_(t),context:{...n,isInFunctionCallCheckingPhase:!0},isMethodCall:!!s,skipSpecialization:!0,skipCtfeExecution:!0});return{...te,result:{kind:"function",result:Ce}}}catch(Ce){if(Ce instanceof Tr&&Ce.kind==="overflow")throw un([{token:e.token,errorMessage:`Failed to call the function:
11273
11273
  `},...Ce.tokenAndErrorList],Ce.isAssertionError);return{...te,result:{kind:"error",error:Ce}}}}else{let _e=te.value;if(Y(_e)&&B(_e.value)&&_e.value.recursiveTypeRef){let Ce=lk(_e.value,t,n);Ce&&(_e=ke(Ce),te.value=_e,te.type=_e.type)}if(Y(_e)&&Ue(_e.value))try{let Ce=Tc({typeFields:_e.value.fields,functionCalleeExpr:o,argExprs:ve,callerEnv:t,context:{...n}});return{...te,result:{kind:"type",result:Ce}}}catch(Ce){return{...te,result:{kind:"error",error:Ce}}}else if(Y(_e)&&Ze(_e.value)){let Ce=_e.value,xe=Ce.variants.find(Pe=>Pe.name===Ce.selectedVariantName);if(xe)try{let Pe=Tc({typeFields:xe.fields||[],functionCalleeExpr:o,argExprs:ve,callerEnv:t,context:{...n}});return{...te,result:{kind:"type",result:Pe}}}catch(Pe){return{...te,result:{kind:"error",error:Pe}}}else return{...te,result:{kind:"error",error:y({token:e.token,errorMessage:"Enum variant not selected for enum type"})}}}else if(Y(_e)&&Kt(_e.value))try{let Ce=Tc({typeFields:_e.value.fields,functionCalleeExpr:o,argExprs:ve,callerEnv:t,context:{...n},isUnionType:!0});return{...te,result:{kind:"type",result:Ce}}}catch(Ce){return{...te,result:{kind:"error",error:Ce}}}else if(Y(_e)&&it(_e.value)){let Ce=_e.value;try{let xe=Oh({moduleExpr:o,moduleType:Ce,argExprs:ve,callerEnv:t,context:{...n}});return{...te,result:{kind:"module-type",result:xe}}}catch(xe){return{...te,result:{kind:"error",error:xe}}}}else if(Y(_e)&&$t(_e.value)){let Ce=_e.value;if(ve.some(Pe=>S(Pe)&&E(Pe,":=",2)))try{let Pe=Uh({traitExpr:o,traitType:Ce,argExprs:ve,callerEnv:t,context:{...n}});return{...te,result:{kind:"trait-specialization",result:Pe}}}catch(Pe){return{...te,result:{kind:"error",error:Pe}}}try{let Pe=Bh({traitExpr:o,traitType:Ce,argExprs:ve,callerEnv:t,context:{...n}});return{...te,result:{kind:"trait-type",result:Pe}}}catch(Pe){return{...te,result:{kind:"error",error:Pe}}}}else if(Y(_e)&&ne(_e.value)){let Ce=_e.value;try{return $h({expr:e,functionType:Ce,callerEnv:t,context:{...n}}),{...te,result:{kind:"function-type"}}}catch(xe){return{...te,result:{kind:"error",error:xe}}}}else if(Y(_e)&&ut(_e.value)){let Ce=_e.value;try{return vh({expr:e,arrayType:Ce,argExprs:ve,callerEnv:t,context:{...n}}),{...te,result:{kind:"array-type"}}}catch(xe){return{...te,result:{kind:"error",error:xe}}}}else if(Y(_e)&&Un(_e.value)){let Ce=_e.value;try{return kh({expr:e,comptimeListType:Ce,argExprs:ve,callerEnv:t,context:{...n}}),{...te,result:{kind:"array-type"}}}catch(xe){return{...te,result:{kind:"error",error:xe}}}}else if(Y(_e)&&(B(_e.value)||dt(_e.value))){let Ce=_e.value,xe=pr(Ce);if(xe)try{return bh({expr:e,fnModuleType:xe,wrapperType:Ce,callerEnv:t,context:{...n}}),{...te,result:{kind:"closure-type"}}}catch(Pe){return{...te,result:{kind:"error",error:Pe}}}else if(B(Ce)&&Ce.kindFunctionType)try{let Pe=Ce.kindFunctionType,st=[];if(ve.length!==Pe.parameters.length)throw y({token:o.token,errorMessage:`Type constructor "${Ce.name}" expects ${Pe.parameters.length} argument(s), got ${ve.length}`});for(let ee=0;ee<ve.length;ee++){let Q=ve[ee],oe=z({expr:Q,env:t,context:{...n}});if(!oe.$)throw y({token:Q.token,errorMessage:"Failed to evaluate HKT argument"});if(t=oe.$.env,!Y(oe.$.value))throw y({token:Q.token,errorMessage:`Expected type argument for type constructor "${Ce.name}", got:
@@ -11293,7 +11293,7 @@ Found ${p.length} matching calls:
11293
11293
  ${p.map(te=>`${M(te.type)}`).join(`
11294
11294
  `)}
11295
11295
  `});let m=p[0];if(n.isInFunctionCallCheckingPhase&&u){let te=m.type,{returnType:ve}=ba({functionType:te,calleeEnv:te.env,context:{...n,isEvaluatingFunctionType:!0},functionCalleeExpr:o});return t=cn(t),e.$={env:t,type:ve,value:de(ve,{variableName:"checking_phase_placeholder_"+Lt(t.modulePath),env:t,context:n}),pathCollection:[]},e}if(i)if(ne(m.type)&&m.type.return.isUnquote){let{returnValue:te,callerEnv:ve,pathCollection:_e,deferredDropExpressions:Ce}=Wo({functionValue:Es(m.value),functionType:m.type,expr:e,functionCalleeExpr:o,argExprs:m.args??a,callerEnv:t,context:n,isMethodCall:!!s});return t=cn(ve),e.$={env:t,type:Ir(),value:te,originType:Ir(),pathCollection:_e,deferredDropExpressions:Ce},e}else throw y({token:o.token,errorMessage:"Expected macro function call for macro_expand."});if(ne(m.type)){let te=m.type;{let{returnType:ve,returnValue:_e,callerEnv:Ce,pathCollection:xe,specializedFunctionValue:Pe,runtimeArgExprsInOrder:st,deferredDropExpressions:Je}=Wo({functionValue:Es(m.value),functionType:m.type,expr:e,functionCalleeExpr:o,argExprs:m.args??a,callerEnv:t,context:n,isMethodCall:!!s});if(t=cn(Ce),te.return.isUnquote)if($r(_e)){let oe=z({expr:_e.value,env:t,context:{...n}});return e.$={env:((x=oe.$)==null?void 0:x.env)||t,type:((V=oe.$)==null?void 0:V.type)||ve,value:(I=oe.$)==null?void 0:I.value,originType:((D=oe.$)==null?void 0:D.originType)||((P=oe.$)==null?void 0:P.type)||ve,pathCollection:((O=oe.$)==null?void 0:O.pathCollection)||[],macroExpansion:oe,variableName:(J=oe.$)==null?void 0:J.variableName},e}else throw y({token:e.token,errorMessage:`Expected macro function to return an Expr value, got:
11296
- ${Ct(_e)}`});let ie=(U=e.$)==null?void 0:U.variableName,ee=ve;if(B(ve))if(m.value&&we(m.value)){let oe=m.value.body;if((W=oe.$)!=null&&W.type){let Ge=oe.$.type;B(Ge)&&Ge.resolvedConcreteType&&(Ge=Ge.resolvedConcreteType),ee={...ve,resolvedConcreteType:Ge}}}else ne(m.type)&&((q=m.type.return)!=null&&q.type)&&!B(m.type.return.type)&&(ee={...ve,resolvedConcreteType:m.type.return.type});if(e.$={env:t,type:ee,value:_e,originType:ee,pathCollection:xe,runtimeArgExprsInOrder:st,deferredDropExpressions:Je,variableName:ie},te.ioBuiltin==="io_async"&&st[0]){let oe=st[0],Ge=(j=oe.$)==null?void 0:j.closureFunctionValue;if((ye=(ue=Ge==null?void 0:Ge.body)==null?void 0:ue.$)!=null&&ye.awaitAnalysis){e.$.awaitAnalysis=Ge.body.$.awaitAnalysis,e.$.captureType=(X=oe.$)==null?void 0:X.captureType,e.$.deferredDupExpressions=(re=oe.$)==null?void 0:re.deferredDupExpressions,(le=oe.$)!=null&&le.deferredDupExpressions&&(oe.$.deferredDupExpressions=void 0);let be=(Oe=oe.$)==null?void 0:Oe.captureType;if(be&&e.$.awaitAnalysis){let Ee=new Set(be.fields.map(ze=>ze.label));e.$.awaitAnalysis={...e.$.awaitAnalysis,capturedVariables:e.$.awaitAnalysis.capturedVariables.map(ze=>Ee.has(ze.name)?{...ze,kind:"outer"}:ze)}}Ge.isIoAsyncStateMachineClosure=!0}else($e=oe.$)!=null&&$e.deferredDupExpressions&&(oe.$.deferredDupExpressions=void 0);let ge=(ae=oe.$)==null?void 0:ae.variableName;if(ge&&e.$.env){let be=fe(e.$.env,ge),Ee=be[be.length-1];Ee&&(e.$.env=Nt(e.$.env,Ee,{...Ee,consumedAtToken:e.token}))}}Dt(e,!0);let Q=S(o);o.$={env:t,type:m.type,value:Pe||m.value,pathCollection:[],runtimeArgExprsInOrder:(Le=o.$)==null?void 0:Le.runtimeArgExprsInOrder,deferredDropExpressions:(se=o.$)==null?void 0:se.deferredDropExpressions,variableName:Q?(me=o.$)==null?void 0:me.variableName:void 0},s&&(s.$={env:t,type:m.type,value:Pe||m.value,pathCollection:[]})}return e}else if((B(m.type)||dt(m.type))&&pr(m.type)){let te=pr(m.type),{returnType:ve,returnValue:_e,callerEnv:Ce,pathCollection:xe,specializedFunctionValue:Pe,runtimeArgExprsInOrder:st,deferredDropExpressions:Je}=Wo({functionValue:Es(m.value),functionType:te.isFn.callType,expr:e,functionCalleeExpr:o,argExprs:m.args??a,callerEnv:t,context:n,isMethodCall:!!s});if(t=cn(Ce),te.isFn.callType.return.isUnquote)if($r(_e)){let ee=z({expr:_e.value,env:t,context:{...n}});return e.$={env:((he=ee.$)==null?void 0:he.env)||t,type:((Re=ee.$)==null?void 0:Re.type)||ve,value:(_t=ee.$)==null?void 0:_t.value,originType:((bt=ee.$)==null?void 0:bt.originType)||((Mt=ee.$)==null?void 0:Mt.type)||ve,pathCollection:((en=ee.$)==null?void 0:en.pathCollection)||[],macroExpansion:ee},e}else throw y({token:e.token,errorMessage:`Expected macro closure to return an Expr value, got:
11296
+ ${Ct(_e)}`});let ie=(U=e.$)==null?void 0:U.variableName,ee=ve;if(B(ve))if(m.value&&we(m.value)){let oe=m.value.body;if((W=oe.$)!=null&&W.type){let Ge=oe.$.type;B(Ge)&&Ge.resolvedConcreteType&&(Ge=Ge.resolvedConcreteType),ee={...ve,resolvedConcreteType:Ge}}}else ne(m.type)&&((q=m.type.return)!=null&&q.type)&&!B(m.type.return.type)&&(ee={...ve,resolvedConcreteType:m.type.return.type});if(e.$={env:t,type:ee,value:_e,originType:ee,pathCollection:xe,runtimeArgExprsInOrder:st,deferredDropExpressions:Je,variableName:ie},te.ioBuiltin==="io_async"&&st[0]){let oe=st[0],Ge=(j=oe.$)==null?void 0:j.closureFunctionValue;if((ye=(ue=Ge==null?void 0:Ge.body)==null?void 0:ue.$)!=null&&ye.awaitAnalysis){e.$.awaitAnalysis=Ge.body.$.awaitAnalysis,e.$.captureType=(X=oe.$)==null?void 0:X.captureType,e.$.deferredDupExpressions=(re=oe.$)==null?void 0:re.deferredDupExpressions,(le=oe.$)!=null&&le.deferredDupExpressions&&(oe.$.deferredDupExpressions=void 0);let be=(Oe=oe.$)==null?void 0:Oe.captureType;if(be&&e.$.awaitAnalysis){let Ee=new Set(be.fields.map(ze=>ze.label));e.$.awaitAnalysis={...e.$.awaitAnalysis,capturedVariables:e.$.awaitAnalysis.capturedVariables.map(ze=>Ee.has(ze.name)?{...ze,kind:"outer"}:ze)}}Ge.isIoAsyncStateMachineClosure=!0}else($e=oe.$)!=null&&$e.deferredDupExpressions&&(oe.$.deferredDupExpressions=void 0);let ge=(ae=oe.$)==null?void 0:ae.variableName;if(ge&&e.$.env){let be=fe(e.$.env,ge),Ee=be[be.length-1];Ee&&(e.$.env=Nt(e.$.env,Ee,{...Ee,consumedAtToken:e.token}))}}Dt(e,!0);let Q=S(o);o.$={env:t,type:m.type,value:Pe||m.value,pathCollection:[],runtimeArgExprsInOrder:(Ae=o.$)==null?void 0:Ae.runtimeArgExprsInOrder,deferredDropExpressions:(se=o.$)==null?void 0:se.deferredDropExpressions,variableName:Q?(me=o.$)==null?void 0:me.variableName:void 0},s&&(s.$={env:t,type:m.type,value:Pe||m.value,pathCollection:[]})}return e}else if((B(m.type)||dt(m.type))&&pr(m.type)){let te=pr(m.type),{returnType:ve,returnValue:_e,callerEnv:Ce,pathCollection:xe,specializedFunctionValue:Pe,runtimeArgExprsInOrder:st,deferredDropExpressions:Je}=Wo({functionValue:Es(m.value),functionType:te.isFn.callType,expr:e,functionCalleeExpr:o,argExprs:m.args??a,callerEnv:t,context:n,isMethodCall:!!s});if(t=cn(Ce),te.isFn.callType.return.isUnquote)if($r(_e)){let ee=z({expr:_e.value,env:t,context:{...n}});return e.$={env:((he=ee.$)==null?void 0:he.env)||t,type:((Re=ee.$)==null?void 0:Re.type)||ve,value:(_t=ee.$)==null?void 0:_t.value,originType:((bt=ee.$)==null?void 0:bt.originType)||((Mt=ee.$)==null?void 0:Mt.type)||ve,pathCollection:((en=ee.$)==null?void 0:en.pathCollection)||[],macroExpansion:ee},e}else throw y({token:e.token,errorMessage:`Expected macro closure to return an Expr value, got:
11297
11297
  ${Ct(_e)}`});e.$={env:t,type:ve,value:_e,originType:ve,pathCollection:xe,runtimeArgExprsInOrder:st,deferredDropExpressions:Je},Dt(e,!0);let ie=S(o);return o.$={env:t,type:m.type,value:Pe||m.value,pathCollection:[],runtimeArgExprsInOrder:(lt=o.$)==null?void 0:lt.runtimeArgExprsInOrder,deferredDropExpressions:(kt=o.$)==null?void 0:kt.deferredDropExpressions,variableName:ie?(kn=o.$)==null?void 0:kn.variableName:void 0},s&&(s.$={env:t,type:m.type,value:Pe||m.value,pathCollection:[]}),e}else{let te=m.value;if(Y(te)&&Ue(te.value)){let ve=te.value;e.$={env:t,type:ve,originType:ve,pathCollection:[]};let{values:_e,pathCollection:Ce,callerEnv:xe,runtimeArgExprsInOrder:Pe}=kl(m);if(t=xe,!_e)throw y({token:o.token,errorMessage:"Error evaluating struct call."});let st=_e.some(Je=>!Je||Me(Je)&&Je.isRuntimeOnly)?void 0:Ei(ve,_e);return e.$.value=pn(ve)?void 0:st,e.$.pathCollection=Ce,e.$.env=t,e.$.runtimeArgExprsInOrder=Pe,Dt(e,!0),o.$={env:t,type:te.type,value:te,pathCollection:[]},e}else if(Y(te)&&Ze(te.value)){let ve=te.value;e.$={env:t,type:ve,originType:ve,pathCollection:[]};let _e=ve.variants.find(Je=>Je.name===ve.selectedVariantName);if(!_e)throw y({token:e.token,errorMessage:"Enum variant not selected for enum type"});let{values:Ce,pathCollection:xe,callerEnv:Pe,runtimeArgExprsInOrder:st}=kl(m);if(t=Pe,Ce.every(Je=>!!Je&&!(Me(Je)&&Je.isRuntimeOnly))){let Je=ta(ve,_e.name,Ce);e.$.value=Je}return e.$.pathCollection=xe,e.$.env=t,e.$.runtimeArgExprsInOrder=st,Dt(e,!0),o.$={env:t,type:te.type,value:te,pathCollection:[]},e}else if(Y(te)&&Kt(te.value)){let ve=te.value;e.$={env:t,type:ve,originType:ve,pathCollection:[]};let{pathCollection:_e,callerEnv:Ce,runtimeArgExprsInOrder:xe}=kl(m);return t=Ce,e.$.value=void 0,e.$.pathCollection=_e,e.$.env=t,e.$.runtimeArgExprsInOrder=xe,Dt(e,!0),o.$={env:t,type:te.type,value:te,pathCollection:[]},e}else if(Y(te)&&it(te.value)){let{moduleValue:ve,callerEnv:_e}=uh(m);return t=_e,e.$={env:t,type:ve.type,value:ve,originType:ve.type,pathCollection:[]},o.$={env:t,type:te.type,value:te,pathCollection:[]},e}else if(Y(te)&&$t(te.value)){if(m.result.kind==="trait-specialization"){let Ce=m.result.result;t=Ce.callerEnv;let xe=ke(Ce.specializedTraitType);return e.$={env:t,type:xe.type,value:xe,pathCollection:[]},o.$={env:t,type:te.type,value:te,pathCollection:[]},e}let{traitValue:ve,callerEnv:_e}=ch(m);return t=_e,e.$={env:t,type:ve.type,value:ve,originType:ve.type,pathCollection:[]},o.$={env:t,type:te.type,value:te,pathCollection:[]},e}else{if(Y(te)&&ne(te.value))return e;if(Y(te)&&ut(te.value))return e;if(Y(te)&&Un(te.value))return e;if(Y(te)&&(B(te.value)||dt(te.value))){if(m.result.kind==="type"&&B(te.value)&&te.value.recursiveTypeRef){let ve=te.value;e.$={env:t,type:ve,originType:ve,pathCollection:[]};let{pathCollection:_e,callerEnv:Ce,runtimeArgExprsInOrder:xe}=kl(m);return t=Ce,e.$.value=void 0,e.$.pathCollection=_e,e.$.env=t,e.$.runtimeArgExprsInOrder=xe,Dt(e,!0),o.$={env:t,type:te.type,value:te,pathCollection:[]},e}return e}else{if(Y(te)&&bl(te.value))return e;if(Y(te)&&ot(te.value))return e;if(Y(te)&&Vn(te.value))return e;if(Y(te)&&Nn(te.value))return e;if(m.result.kind==="index"){let{value:ve,type:_e,ptrType:Ce,indexMethodType:xe,indexMethodValue:Pe,callerEnv:st,index:Je,arrayElementRef:ie}=_h(m),ee=((Ot=o.$)==null?void 0:Ot.pathCollection)??[];return a.length===1&&typeof Je=="number"&&(ee.length>0?ee=ee.map(Q=>[...Q,Je.toString()]):(je=o.$)!=null&&je.variableName&&(ee=[[o.$.variableName,Je.toString()]])),e.$={env:st,type:_e,value:ve,originType:((Be=o.$)==null?void 0:Be.originType)??m.type,pathCollection:ee,sourceVariable:(tt=o.$)==null?void 0:tt.sourceVariable,indexTraitPtrType:Ce,indexMethodType:xe,indexMethodValue:Pe,arrayElementRef:ie,isAccessingProperty:!0},o.$={env:t,type:m.type,value:m.value,pathCollection:((Bt=o.$)==null?void 0:Bt.pathCollection)??[],isAccessingProperty:!0,runtimeArgExprsInOrder:(jn=o.$)==null?void 0:jn.runtimeArgExprsInOrder,deferredDropExpressions:(Xt=o.$)==null?void 0:Xt.deferredDropExpressions,variableName:(Sn=o.$)==null?void 0:Sn.variableName},Dt(e,!1),e}}}}throw y({token:e.token,errorMessage:`Function call is not implemented yet:
11298
11298
  ${L(e)}`})}var Ca=Z(()=>{mt();De();Te();gn();rn();Et();Ne();Li();at();Cn();Fe();ur();uc();et();qt();Co();yh();cf();Th();Ch();wh();yc();pf();Vh();yf();Rh();rf();J_();zh();Gh();Wh()});function uk(e){var i;if(!((i=e.$)!=null&&i.type)||!gt(e.$.type))throw y({token:e.token,errorMessage:`Expected tuple type for drop generation:
11299
11299
  ${L(e)}`});if(!e.$.variableName)throw y({token:e.token,errorMessage:`Expected variable name for drop generation:
@@ -11353,7 +11353,7 @@ ${Ct(s)}`})}else{let o=Fl({expr:r,env:t,context:{...n}}),a=[];for(let l=0;l<i.le
11353
11353
  ${L(_)}`});let p=f.$.value;dp(p)&&p.elements.every(d=>$r(d))&&(c=p.elements.map(d=>d.value)),c?c.forEach(d=>{a.push(d)}):a.push(u)}else a.push(Fl({expr:u,env:t,context:{...n}}))}return{...e,func:o,args:a}}}}function lv({expr:e,env:t,context:n}){rt(e,R.quote,1);let r=Fl({expr:e.args[0],env:t,context:{...n}}),i=$i(r);return e.$={env:t,type:i.type,value:i,pathCollection:[]},e}var gf=Z(()=>{De();Te();Ne();Fe();et()});function uv({expr:e,env:t,context:n}){if(e.args.length!==1&&e.args.length!==2)throw y({token:e.token,errorMessage:`"macro_expand" expects 1 or 2 arguments, but got ${e.args.length}`});let r=e.args[0],i=z({expr:r,env:t,context:{...n}});if(!i.$)throw y({token:r.token,errorMessage:`Failed to evaluate the argument expression for "macro_expand":
11354
11354
  ${r.toString()}`});if(t=i.$.env,!On(i.$.type))throw y({token:r.token,errorMessage:`The argument expression for "macro_expand" must be an Expr value, but got: ${M(i.$.type)}`});let o=null;if(e.args.length===2){let s=e.args[1],l=z({expr:s,env:t,context:{...n}});if(!l.$)throw y({token:s.token,errorMessage:`Failed to evaluate the level argument expression for "macro_expand":
11355
11355
  ${s.toString()}`});if(!hn(l.$.type))throw y({token:s.token,errorMessage:`The level argument for "macro_expand" must be a comptime_int value, but got: ${M(l.$.type)}`});if(!zr(l.$.value))throw y({token:s.token,errorMessage:'The level argument for "macro_expand" must be a comptime_int value'});let u=l.$.value.value;if(o=typeof u=="bigint"?Number(u):u,o<0)throw y({token:s.token,errorMessage:`The level argument for "macro_expand" must be non-negative, but got: ${o}`})}let a=i.$.value;if($r(a)){let s=a.value,l=t,u=0;for(;S(s)&&(o===null||u<o);)try{let c=di({expr:s,env:l,context:{...n},forMacroExpansion:!0});if(!c.$)break;if(l=c.$.env,$r(c.$.value)){let _=c.$.value.value;if(L(_)===L(s))break;s=_,u++}else break}catch(c){if(c instanceof Tr&&c.isAssertionError)throw c;break}s=Fl({expr:s,env:l,context:{...n}}),e.$={env:l,type:Ir(),value:$i(s),pathCollection:i.$.pathCollection}}else e.$={env:t,type:i.$.type,value:i.$.value,pathCollection:i.$.pathCollection};return e}var cv=Z(()=>{De();Te();Et();Ne();at();Fe();Ca();et();gf()});function _v({expr:e,env:t,context:n}){var i,o;if(((i=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:i.kind)!=="function-body"&&((o=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:o.kind)!=="test-block")throw y({token:e.token,errorMessage:"panic() can only be called inside a function body or test block"});if(n.isAnalyzingCtfeCapability)throw y({token:e.token,errorMessage:'Cannot use "panic" during compile-time function evaluation analysis. Functions containing "panic" cannot be evaluated at compile time.'});let r=n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:pe.type;if(e.args.length>0){let a=e.args[0],s=z({expr:a,env:t,context:{...n}});if(!s.$)throw y({token:a.token,errorMessage:"Failed to evaluate panic message"});let l=s.$.type,u=s.$.value,c=l&&Gr(l)&&l.typeName==="str",_=u&&(ct(u)||Me(u)&&fn(u.type));if(!c&&!_)throw y({token:a.token,errorMessage:"panic message must be a comptime_string or str"})}return e.$={env:t,type:r,value:void 0,pathCollection:[]},e}var fv=Z(()=>{De();Ne();Dn();Fe();et()});function hf(e){return Ki(e)||Xi(e)||ot(e)||Nr(e)}function dk(e){return e.tag==="Atom"&&mv.has(e.token.value)}function mk(e){return!S(e)||e.func.tag!=="Atom"?!1:pk.has(e.func.token.value)}function dv(e){return e.tag==="Atom"&&e.token.value==="_"}function yk(e,t,n){var i,o;if(e.tag==="Atom"&&mv.has(e.token.value))return e.token.value;let r=z({expr:e,env:t,context:{...n}});if((i=r.$)!=null&&i.value&&ct(r.$.value))return r.$.value.value;if(E(e,"raw",1)){let s=e.args[0],l=z({expr:s,env:t,context:{...n}});if((o=l.$)!=null&&o.value&&ct(l.$.value))return`raw:${l.$.value.value}`}throw y({token:e.token,errorMessage:'Invalid asm constraint. Expected a register class (reg, imm, mem, ...), an explicit register name string, or raw("constraint").'})}function gk(e,t,n,r){var g,m;let i=e.args;if(r==="const_val"||r==="sym")return hk(e,t,n,r);if(i.length<1||i.length>3)throw y({token:e.token,errorMessage:`asm ${r}() expects 1 to 3 arguments, got ${i.length}.`});let o,a;if(i.length>=2){let h=i[0];if(dk(h))a=0;else if(dv(h))a=0;else{let v=z({expr:h,env:t,context:{...n}});(g=v.$)!=null&&g.value&&ct(v.$.value)?(o=v.$.value.value,a=1):a=0}}else a=0;let s=a<i.length-1,l,u;s?(l=yk(i[a],t,n),u=a+1):(o!==void 0&&(l=o),u=a);let c=i[u];if(!c)throw y({token:e.token,errorMessage:`asm ${r}() is missing its value/type argument.`});let _=vf.has(r);if(Tf.has(r)){if(dv(c))return{kind:r,name:o,constraint:l,valueExpr:void 0,outputType:void 0,targetVarName:void 0,discarded:!0};if(c.tag==="Atom"){let v=c.token.value,T=fe(t,v);if(T.length>0){let $=T[T.length-1];if(!($.value&&Y($.value[0]))){let b=$.type;if(!hf(b))throw y({token:c.token,errorMessage:`asm ${r}() target variable '${v}' has type that is not valid for inline assembly. Must be a primitive numeric, pointer, or bool type.`});let w;return $.initializedAtToken?w=z({expr:c,env:t,context:{...n}}):(w=c,w.$={env:t,type:b,value:void 0,pathCollection:[]}),{kind:r,name:o,constraint:l,valueExpr:w,outputType:b,targetVarName:v,discarded:!1}}}}let h=z({expr:c,env:t,context:{...n}});if((m=h.$)!=null&&m.value&&Y(h.$.value)){let v=h.$.value.value;if(!hf(v))throw y({token:c.token,errorMessage:`asm ${r}() output type must be a primitive numeric, pointer, or bool type.`});return{kind:r,name:o,constraint:l,valueExpr:void 0,outputType:v,targetVarName:void 0,discarded:!1}}throw y({token:c.token,errorMessage:`asm ${r}() last argument must be a type, variable, or _ (discard).`})}let p=z({expr:c,env:t,context:{...n}});if(!p.$)throw y({token:c.token,errorMessage:`Failed to evaluate asm ${r}() value expression.`});let d=p.$.type;if(!hf(d))throw y({token:c.token,errorMessage:`asm ${r}() value type is not valid for inline assembly. Must be a primitive numeric, pointer, or bool type.`});return _?{kind:r,name:o,constraint:l,valueExpr:p,outputType:void 0,targetVarName:void 0,discarded:!1}:{kind:r,name:o,constraint:l,valueExpr:p,outputType:d,targetVarName:void 0,discarded:!1}}function hk(e,t,n,r){var u;let i=e.args;if(i.length<1||i.length>2)throw y({token:e.token,errorMessage:`asm ${r}() expects 1 or 2 arguments, got ${i.length}.`});let o,a=0;if(i.length===2){let c=z({expr:i[0],env:t,context:{...n}});(u=c.$)!=null&&u.value&&ct(c.$.value)&&(o=c.$.value.value,a=1)}let s=i[a],l=z({expr:s,env:t,context:{...n}});return{kind:r,name:o,constraint:void 0,valueExpr:l,outputType:void 0,targetVarName:void 0,discarded:!1}}function vk(e,t,n){let r={noreturn:!1};for(let i of e.args)if(i.tag==="Atom"){let o=i.token.value;if(!pv.has(o))throw y({token:i.token,errorMessage:`Unknown asm_options flag: '${o}'. Valid flags: ${[...pv].join(", ")}.`});o==="noreturn"&&(r.noreturn=!0)}else throw y({token:e.token,errorMessage:"asm_options() arguments must be flag identifiers (e.g., pure, nomem, noreturn)."});return r}function hv({expr:e,env:t,context:n}){var d,g,m,h,v,T;if(((d=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:d.kind)!=="function-body"&&((g=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:g.kind)!=="test-block")throw y({token:e.token,errorMessage:"asm() can only be called inside a function body or test block."});if(n.isAnalyzingCtfeCapability)throw y({token:e.token,errorMessage:'Cannot use "asm" during compile-time function evaluation analysis.'});if(e.args.length===0)throw y({token:e.token,errorMessage:"asm() requires at least one argument (the assembly template string)."});let r=[],i=0;for(;i<e.args.length;){let $=e.args[i];if(mk($))break;let b=z({expr:$,env:t,context:{...n}});if((m=b.$)!=null&&m.value&&ct(b.$.value))r.push(b.$.value.value),i++;else if((h=b.$)!=null&&h.value&&Me(b.$.value)&&fn(b.$.value.type))r.push(""),i++;else break}if(r.length===0)throw y({token:e.args[0].token,errorMessage:"First argument to asm() must be a compile-time string (the assembly template)."});let o=[],a={noreturn:!1};for(;i<e.args.length;){let $=e.args[i];if(!S($))throw y({token:$.token,errorMessage:"asm() arguments after the template must be operand or option calls (in, out, inout, clobber, asm_options, etc.)."});let b=$.func.tag==="Atom"?$.func.token.value:void 0;if(!b)throw y({token:$.token,errorMessage:"asm() operand must be a named call like in(...), out(...), etc."});if(vf.has(b)||Tf.has(b)||yv.has(b)||gv.has(b))o.push(gk($,t,n,b));else if(b==="clobber"||b==="clobber_abi")for(let w of $.args){if(w.tag==="Atom"&&(w.token.value==="memory"||w.token.value==="cc"))continue;let C=z({expr:w,env:t,context:{...n}});if((!((v=C.$)!=null&&v.value)||!ct(C.$.value))&&!(w.tag==="Atom"&&w.token.value==="memory")&&!(w.tag==="Atom"&&w.token.value==="cc"))throw y({token:w.token,errorMessage:`${b}() arguments must be compile-time strings (e.g., "memory", "cc", "rax").`})}else if(b==="asm_options")a=vk($,t,n);else throw y({token:$.token,errorMessage:`Unknown asm() operand or option: '${b}'. Expected: in, out, inout, lateout, inlateout, const_val, sym, clobber, clobber_abi, asm_options.`});i++}let s=t;for(let $ of o){if($.targetVarName===void 0||$.kind!=="out"&&$.kind!=="lateout")continue;let b=fe(s,$.targetVarName);if(b.length>0){let w=b[b.length-1];w.initializedAtToken||(s=Nt(s,w,{...w,initializedAtToken:e.token}))}}t=s;let l=[];for(let $ of o)$.discarded||$.targetVarName===void 0&&($.kind==="const_val"||$.kind==="sym"||$.kind!=="in"&&$.outputType&&l.push($.outputType));let u;if(a.noreturn)u=((T=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:T.kind)==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:pe.type;else if(l.length===0)u=pe.type;else if(l.length===1)u=l[0];else{let $=l.map((b,w)=>({label:w.toString(),type:b,exprs:{expr:e,labelExpr:void 0,typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:void 0}}));u=Za($)}let c=r.join(`
11356
- `),_=/\{([^}:]+)(?::[^}]*)?\}/g,f,p=new Set;for(let $=0;$<o.length;$++)if(o[$].name){if(p.has(o[$].name))throw y({token:e.token,errorMessage:`Duplicate asm operand name: '${o[$].name}'.`});p.add(o[$].name)}for(;(f=_.exec(c))!==null;){let $=f[1];if($==="{"||$==="}")continue;let b=parseInt($,10);if(isNaN(b)){if(!p.has($))throw y({token:e.token,errorMessage:`asm template references undefined operand '{${$}}'.`})}else if(b<0||b>=o.length)throw y({token:e.token,errorMessage:`asm template references positional operand {${b}} but only ${o.length} operands are defined.`})}return e.$={env:t,type:u,value:void 0,pathCollection:[]},e}function vv({expr:e,env:t,context:n}){var o;if(e.args.length===0)throw y({token:e.token,errorMessage:"global_asm() requires at least one argument (the assembly string)."});let r=e.args[0],i=z({expr:r,env:t,context:{...n}});if(!((o=i.$)!=null&&o.value)||!ct(i.$.value)&&!(Me(i.$.value)&&fn(i.$.value.type)))throw y({token:r.token,errorMessage:"global_asm() argument must be a compile-time string."});return e.$={env:t,type:pe.type,value:void 0,pathCollection:[]},e}var mv,vf,Tf,yv,gv,pk,pv,Tv=Z(()=>{mt();De();Te();Et();Ne();Dn();Fe();et();mv=new Set(["reg","reg_byte","reg_abcd","xmm_reg","ymm_reg","imm","mem"]),vf=new Set(["in"]),Tf=new Set(["out","lateout"]),yv=new Set(["inout","inlateout"]),gv=new Set(["const_val","sym"]),pk=new Set([...vf,...Tf,...yv,...gv,"clobber","clobber_abi","asm_options"]),pv=new Set(["pure","nomem","readonly","nostack","preserves_flags","att_syntax","intel_syntax","volatile","noreturn"])});function Ev({expr:e,env:t}){if(E(e,F.__yo_process_platform)){if(e.args.length!==0)throw y({token:e.token,errorMessage:`__yo_process_platform expects 0 arguments, got ${e.args.length}`});let n=Ds(),r=n.os,i=Bn(r);return e.$={env:t,type:Gn(),value:i,pathCollection:[]},e}if(E(e,F.__yo_process_arch)){if(e.args.length!==0)throw y({token:e.token,errorMessage:`__yo_process_arch expects 0 arguments, got ${e.args.length}`});let n=Ds(),r=n.arch,i=Bn(r);return e.$={env:t,type:Gn(),value:i,pathCollection:[]},e}if(E(e,F.__yo_pointer_size_bits)){if(e.args.length!==0)throw y({token:e.token,errorMessage:`__yo_pointer_size_bits expects 0 arguments, got ${e.args.length}`});let n=Si(),r=Ti(BigInt(n));return e.$={env:t,type:Yi(),value:r,pathCollection:[]},e}throw y({token:e.token,errorMessage:`Unknown process function: ${e.func.token.value}`})}var $v=Z(()=>{De();Te();Sr();Et();at();Fe()});function kv(){return bv}function wv(e){bv=e}function Fv(e){return Cv.get(e)}function Lv(e,t){Cv.set(e,t)}function mi(){return qo||(qo=new Ll),qo}function Ho(){qo&&qo.clear(),qo=void 0}function Ec(e){let t=qo;return qo=e,t}function St(e,t,n){if(!ct(e))throw y({token:n,errorMessage:`Build function: expected comptime_string for "${t}", got ${e?"non-string":"undefined"}`});return e.value}function Mr(e,t){return e.$={env:t,type:ci(),value:pe,pathCollection:[]},e}function $s(e,t,n){return e.$={env:t,type:Gn(),value:Bn(n),pathCollection:[]},e}function Tk(e){var t;for(let n of e.args){if(n===void 0)continue;let r=(t=n.$)==null?void 0:t.value;if(r===void 0||Me(r))return!0}return!1}function Av({expr:e,env:t}){var r,i,o,a,s,l,u,c,_,f,p,d,g,m,h,v,T,$,b,w,C,k,A,N,x,V,I,D,P,O,J,U,W,q,j,ue,ye,X,re,le,Oe,$e,ae,Le,se,me,he,Re,_t,bt,Mt,en,lt,kt,kn,Ot;if(Tk(e)){if(E(e,F.__yo_build_target_host)){let je=ii();return $s(e,t,je.triple)}return E(e,F.__yo_build_option)?$s(e,t,""):Mr(e,t)}let n=mi();if(E(e,F.__yo_build_executable)){if(e.args.length<2)throw y({token:e.token,errorMessage:`__yo_build_executable expects at least 2 arguments (name, root), got ${e.args.length}`});let je=St((r=e.args[0].$)==null?void 0:r.value,"name",e.token),Be=St((i=e.args[1].$)==null?void 0:i.value,"root",e.token),tt=e.args.length>2?St((o=e.args[2].$)==null?void 0:o.value,"target",e.token):ii().triple,Bt=e.args.length>3?St((a=e.args[3].$)==null?void 0:a.value,"optimize",e.token):"debug",jn=e.args.length>4?St((s=e.args[4].$)==null?void 0:s.value,"allocator",e.token):"mimalloc",Xt=e.args.length>5?St((l=e.args[5].$)==null?void 0:l.value,"sanitize",e.token):"none";return n.registerExecutable({name:je,root:Be,target:tt,optimize:Bt,allocator:jn,sanitize:Xt,linkLibraries:[],includePaths:[],libraryPaths:[],cSources:[],cFlags:[],defines:[],strip:!1,staticLink:!1,runtimeFiles:[],linkedArtifacts:[],linkedSystemLibraries:[],importedModules:[]}),Mr(e,t)}if(E(e,F.__yo_build_static_library)){if(e.args.length<2)throw y({token:e.token,errorMessage:`__yo_build_static_library expects at least 2 arguments (name, root), got ${e.args.length}`});let je=St((u=e.args[0].$)==null?void 0:u.value,"name",e.token),Be=St((c=e.args[1].$)==null?void 0:c.value,"root",e.token),tt=e.args.length>2?St((_=e.args[2].$)==null?void 0:_.value,"target",e.token):ii().triple,Bt=e.args.length>3?St((f=e.args[3].$)==null?void 0:f.value,"optimize",e.token):"debug";return n.registerStaticLibrary({name:je,root:Be,target:tt,optimize:Bt,allocator:"libc",sanitize:"none",linkLibraries:[],includePaths:[],libraryPaths:[],cSources:[],cFlags:[],defines:[],strip:!1,staticLink:!1,runtimeFiles:[],linkedArtifacts:[],linkedSystemLibraries:[],importedModules:[]}),Mr(e,t)}if(E(e,F.__yo_build_shared_library)){if(e.args.length<2)throw y({token:e.token,errorMessage:`__yo_build_shared_library expects at least 2 arguments (name, root), got ${e.args.length}`});let je=St((p=e.args[0].$)==null?void 0:p.value,"name",e.token),Be=St((d=e.args[1].$)==null?void 0:d.value,"root",e.token),tt=e.args.length>2?St((g=e.args[2].$)==null?void 0:g.value,"target",e.token):ii().triple,Bt=e.args.length>3?St((m=e.args[3].$)==null?void 0:m.value,"optimize",e.token):"debug";return n.registerSharedLibrary({name:je,root:Be,target:tt,optimize:Bt,allocator:"libc",sanitize:"none",linkLibraries:[],includePaths:[],libraryPaths:[],cSources:[],cFlags:[],defines:[],strip:!1,staticLink:!1,runtimeFiles:[],linkedArtifacts:[],linkedSystemLibraries:[],importedModules:[]}),Mr(e,t)}if(E(e,F.__yo_build_link)){if(e.args.length<2)throw y({token:e.token,errorMessage:`__yo_build_link expects 2 arguments (artifact_name, library_name), got ${e.args.length}`});let je=St((h=e.args[0].$)==null?void 0:h.value,"artifact_name",e.token),Be=St((v=e.args[1].$)==null?void 0:v.value,"library_name",e.token);if(n.findSystemLibrary(Be)){let tt=n.findArtifact(je);tt&&(tt.linkedSystemLibraries.includes(Be)||tt.linkedSystemLibraries.push(Be))}else n.registerLink(je,Be);return Mr(e,t)}if(E(e,F.__yo_build_link_system_library)){if(e.args.length<2)throw y({token:e.token,errorMessage:`__yo_build_link_system_library expects 2 arguments (artifact_name, system_lib_name), got ${e.args.length}`});let je=St((T=e.args[0].$)==null?void 0:T.value,"artifact_name",e.token),Be=St(($=e.args[1].$)==null?void 0:$.value,"system_lib_name",e.token),tt=n.findArtifact(je);return tt&&(tt.linkedSystemLibraries.includes(Be)||tt.linkedSystemLibraries.push(Be)),Mr(e,t)}if(E(e,F.__yo_build_test)){if(e.args.length<2)throw y({token:e.token,errorMessage:`__yo_build_test expects at least 2 arguments (name, root), got ${e.args.length}`});let je=St((b=e.args[0].$)==null?void 0:b.value,"name",e.token),Be=St((w=e.args[1].$)==null?void 0:w.value,"root",e.token),tt=e.args.length>2?St((C=e.args[2].$)==null?void 0:C.value,"target",e.token):ii().triple;return n.registerTest({name:je,root:Be,target:tt,verbose:!1,bail:!1,parallel:1}),Mr(e,t)}if(E(e,F.__yo_build_run)){if(e.args.length<1)throw y({token:e.token,errorMessage:`__yo_build_run expects at least 1 argument (artifact_name), got ${e.args.length}`});let je=St((k=e.args[0].$)==null?void 0:k.value,"artifact_name",e.token);return n.registerRun(je,[]),Mr(e,t)}if(E(e,F.__yo_build_step)){if(e.args.length<2)throw y({token:e.token,errorMessage:`__yo_build_step expects 2 arguments (name, description), got ${e.args.length}`});let je=St((A=e.args[0].$)==null?void 0:A.value,"name",e.token),Be=St((N=e.args[1].$)==null?void 0:N.value,"description",e.token);return n.registerStep(je,Be),Mr(e,t)}if(E(e,F.__yo_build_step_depend_on)){if(e.args.length<3)throw y({token:e.token,errorMessage:`__yo_build_step_depend_on expects 3 arguments (step_name, dep_name, dep_kind), got ${e.args.length}`});let je=St((x=e.args[0].$)==null?void 0:x.value,"step_name",e.token),Be=St((V=e.args[1].$)==null?void 0:V.value,"dep_name",e.token),tt=(I=e.args[2].$)==null?void 0:I.value,Bt=Be;return tt&&Pn(tt)&&tt.variantName==="Run"&&(Bt=`run:${Be}`),n.addStepDependency(je,Bt),Mr(e,t)}if(E(e,F.__yo_build_target_host)){let je=ii();return $s(e,t,je.triple)}if(E(e,F.__yo_build_target_parse)){if(e.args.length!==1)throw y({token:e.token,errorMessage:`__yo_build_target_parse expects 1 argument (triple), got ${e.args.length}`});let je=St((D=e.args[0].$)==null?void 0:D.value,"triple",e.token),Be=vr(je);return $s(e,t,Be.triple)}if(E(e,F.__yo_build_dependency)){if(e.args.length<2)throw y({token:e.token,errorMessage:`__yo_build_dependency expects at least 2 arguments (name, url), got ${e.args.length}`});let je=St((P=e.args[0].$)==null?void 0:P.value,"name",e.token),Be=St((O=e.args[1].$)==null?void 0:O.value,"url",e.token),tt=e.args.length>2?St((J=e.args[2].$)==null?void 0:J.value,"ref",e.token):"HEAD",Bt=e.args.length>3?St((U=e.args[3].$)==null?void 0:U.value,"path",e.token):"";return n.registerDependency({name:je,url:Be,ref:tt,path:Bt}),Mr(e,t)}if(E(e,F.__yo_build_path_dependency)){if(e.args.length!==2)throw y({token:e.token,errorMessage:`__yo_build_path_dependency expects 2 arguments (name, path), got ${e.args.length}`});let je=St((W=e.args[0].$)==null?void 0:W.value,"name",e.token),Be=St((q=e.args[1].$)==null?void 0:q.value,"path",e.token);return n.registerPathDependency({name:je,path:Be}),Mr(e,t)}if(E(e,F.__yo_build_system_library)){if(e.args.length<1)throw y({token:e.token,errorMessage:`__yo_build_system_library expects at least 1 argument (name), got ${e.args.length}`});let je=St((j=e.args[0].$)==null?void 0:j.value,"name",e.token),Be=e.args.length>1?St((ue=e.args[1].$)==null?void 0:ue.value,"fallback_include",e.token):"",tt=e.args.length>2?St((ye=e.args[2].$)==null?void 0:ye.value,"fallback_lib",e.token):"",Bt=e.args.length>3?St((X=e.args[3].$)==null?void 0:X.value,"fallback_link",e.token):"",jn=e.args.length>4?St((re=e.args[4].$)==null?void 0:re.value,"defines",e.token).split(/\s+/).filter(Boolean):[];return n.registerSystemLibrary({name:je,fallbackInclude:Be,fallbackLib:tt,fallbackLink:Bt,defines:jn}),Mr(e,t)}if(E(e,F.__yo_build_option)){if(e.args.length<3)throw y({token:e.token,errorMessage:`__yo_build_option expects 3 arguments (name, description, default), got ${e.args.length}`});let je=St((le=e.args[0].$)==null?void 0:le.value,"name",e.token),Be=St((Oe=e.args[1].$)==null?void 0:Oe.value,"description",e.token),tt=St(($e=e.args[2].$)==null?void 0:$e.value,"default",e.token);n.declaredOptions.set(je,{description:Be,defaultValue:tt});let Bt=n.cliOptions.get(je)??tt;return $s(e,t,Bt)}if(E(e,F.__yo_build_dep_artifact)){if(e.args.length<2)throw y({token:e.token,errorMessage:`__yo_build_dep_artifact expects 2 arguments (dependency_name, artifact_name), got ${e.args.length}`});let je=St((ae=e.args[0].$)==null?void 0:ae.value,"dependency_name",e.token),Be=St((Le=e.args[1].$)==null?void 0:Le.value,"artifact_name",e.token);return n.registerDependencyArtifact({dependencyName:je,artifactName:Be}),Mr(e,t)}if(E(e,F.__yo_build_module)){if(e.args.length<2)throw y({token:e.token,errorMessage:`__yo_build_module expects 2 arguments (name, root), got ${e.args.length}`});let je=St((se=e.args[0].$)==null?void 0:se.value,"name",e.token),Be=St((me=e.args[1].$)==null?void 0:me.value,"root",e.token);return n.registerModule({name:je,root:Be,linkedSystemLibraries:[]}),Mr(e,t)}if(E(e,F.__yo_build_module_link)){if(e.args.length<2)throw y({token:e.token,errorMessage:`__yo_build_module_link expects 2 arguments (module_name, system_library_name), got ${e.args.length}`});let je=St((he=e.args[0].$)==null?void 0:he.value,"module_name",e.token),Be=St((Re=e.args[1].$)==null?void 0:Re.value,"system_library_name",e.token);return n.registerModuleLink(je,Be),Mr(e,t)}if(E(e,F.__yo_build_add_import)){if(e.args.length<4)throw y({token:e.token,errorMessage:`__yo_build_add_import expects 4 arguments (artifact_name, import_name, module_name, dependency_name), got ${e.args.length}`});let je=St((_t=e.args[0].$)==null?void 0:_t.value,"artifact_name",e.token),Be=St((bt=e.args[1].$)==null?void 0:bt.value,"import_name",e.token),tt=St((Mt=e.args[2].$)==null?void 0:Mt.value,"module_name",e.token),Bt=St((en=e.args[3].$)==null?void 0:en.value,"dependency_name",e.token),jn=n.findArtifact(je);if(jn){let Xt=jn.importedModules.find(Sn=>Sn.importName===Be);if(Xt)throw y({token:e.token,errorMessage:`Duplicate import name "${Be}" on artifact "${je}". Already imported from module "${Xt.moduleName}".`})}return n.registerImportedModule(je,{importName:Be,moduleName:tt,dependencyName:Bt}),Mr(e,t)}if(E(e,F.__yo_build_add_cflags)){if(e.args.length<2)throw y({token:e.token,errorMessage:`__yo_build_add_cflags expects 2 arguments (artifact_name, flags), got ${e.args.length}`});let je=St((lt=e.args[0].$)==null?void 0:lt.value,"artifact_name",e.token),Be=St((kt=e.args[1].$)==null?void 0:kt.value,"flags",e.token),tt=n.findArtifact(je);if(tt){let Bt=Be.trim().split(/\s+/).filter(jn=>jn.length>0);tt.cFlags.push(...Bt)}return Mr(e,t)}if(E(e,F.__yo_build_dep_module)){if(e.args.length<2)throw y({token:e.token,errorMessage:`__yo_build_dep_module expects 2 arguments (dependency_name, module_name), got ${e.args.length}`});let je=St((kn=e.args[0].$)==null?void 0:kn.value,"dependency_name",e.token),Be=St((Ot=e.args[1].$)==null?void 0:Ot.value,"module_name",e.token);return $s(e,t,`${je}\0${Be}`)}throw y({token:e.token,errorMessage:`Unknown build function: ${e.func.token.value}`})}var Ll,qo,bv,Cv,ka=Z(()=>{De();Te();Sr();Et();Fe();Dn();Ll=class{constructor(){this.artifacts=[];this.testSuites=[];this.runSteps=[];this.steps=[];this.dependencies=[];this.pathDependencies=[];this.systemLibraries=[];this.dependencyArtifacts=[];this.modules=[];this.cliOptions=new Map;this.declaredOptions=new Map}setCliOptions(t){this.cliOptions=t}registerExecutable(t){this.checkDuplicateArtifactName(t.name),this.artifacts.push({kind:"executable",...t})}registerStaticLibrary(t){this.checkDuplicateArtifactName(t.name),this.artifacts.push({kind:"static_library",...t})}registerSharedLibrary(t){this.checkDuplicateArtifactName(t.name),this.artifacts.push({kind:"shared_library",...t})}registerTest(t){this.testSuites.push(t)}registerRun(t,n){let r=`run:${t}`;this.runSteps.push({name:r,artifactName:t,args:n})}registerStep(t,n,r=[]){this.steps.push({name:t,description:n,dependencyNames:r})}addStepDependency(t,n){let r=this.findStep(t);r&&(r.dependencyNames.includes(n)||r.dependencyNames.push(n))}registerDependency(t){this.dependencies.push(t)}registerPathDependency(t){this.pathDependencies.push(t)}registerSystemLibrary(t){this.systemLibraries.push(t)}registerDependencyArtifact(t){this.dependencyArtifacts.some(n=>n.dependencyName===t.dependencyName&&n.artifactName===t.artifactName)||this.dependencyArtifacts.push(t)}registerModule(t){this.modules.some(n=>n.name===t.name)||this.modules.push(t)}registerModuleLink(t,n){let r=this.modules.find(i=>i.name===t);r&&!r.linkedSystemLibraries.includes(n)&&r.linkedSystemLibraries.push(n)}registerImportedModule(t,n){let r=this.findArtifact(t);if(r){if(r.importedModules.some(i=>i.importName===n.importName))return;r.importedModules.push(n)}}findModule(t){return this.modules.find(n=>n.name===t)}registerLink(t,n){let r=this.findArtifact(t);r&&(r.linkedArtifacts.includes(n)||r.linkedArtifacts.push(n))}findArtifact(t){return this.artifacts.find(n=>n.name===t)}findTest(t){return this.testSuites.find(n=>n.name===t)}findRunStep(t){return this.runSteps.find(n=>n.name===t)}findStep(t){return this.steps.find(n=>n.name===t)}checkDuplicateArtifactName(t){let n=this.artifacts.find(r=>r.name===t);if(n)throw new Error(`Build error: Artifact "${t}" already registered as ${n.kind}. Use a unique name for each artifact.`)}findDependency(t){return this.dependencies.find(n=>n.name===t)}findPathDependency(t){return this.pathDependencies.find(n=>n.name===t)}findSystemLibrary(t){return this.systemLibraries.find(n=>n.name===t)}getStepNames(){return this.steps.map(t=>t.name)}resolveDependency(t){let n=this.findArtifact(t);if(n)return{kind:"artifact",value:n};let r=this.findTest(t);if(r)return{kind:"test",value:r};let i=this.findRunStep(t);if(i)return{kind:"run",value:i};let o=this.findStep(t);if(o)return{kind:"step",value:o}}resolveDependencies(t){let n=[],r=[],i=[];for(let o of t.dependencyNames){let a=this.resolveDependency(o);if(a)switch(a.kind){case"artifact":n.some(s=>s.name===a.value.name)||n.push(a.value);break;case"test":r.some(s=>s.name===a.value.name)||r.push(a.value);break;case"run":i.some(s=>s.name===a.value.name)||i.push(a.value);{let s=this.findArtifact(a.value.artifactName);s&&!n.some(l=>l.name===s.name)&&n.push(s)}break;case"step":{let s=this.resolveDependencies(a.value);for(let l of s.artifacts)n.some(u=>u.name===l.name)||n.push(l);for(let l of s.tests)r.some(u=>u.name===l.name)||r.push(l);for(let l of s.runs)i.some(u=>u.name===l.name)||i.push(l);break}}}return{artifacts:n,tests:r,runs:i}}clear(){this.artifacts=[],this.testSuites=[],this.runSteps=[],this.steps=[],this.dependencies=[],this.pathDependencies=[],this.systemLibraries=[],this.dependencyArtifacts=[],this.modules=[]}},Cv=new Map});function Sv({expr:e,env:t,context:n}){rt(e,F.__yo_address_of,1);let r=e.args[0],i=n.expectedType;i&&ot(i.type)&&(i={...i,type:i.type.childType});let o=z({expr:r,env:t,context:{...n,expectedType:i}});if(!o.$)throw y({token:r.token,errorMessage:`Failed to evaluate the argument expression for reference:
11356
+ `),_=/\{([^}:]+)(?::[^}]*)?\}/g,f,p=new Set;for(let $=0;$<o.length;$++)if(o[$].name){if(p.has(o[$].name))throw y({token:e.token,errorMessage:`Duplicate asm operand name: '${o[$].name}'.`});p.add(o[$].name)}for(;(f=_.exec(c))!==null;){let $=f[1];if($==="{"||$==="}")continue;let b=parseInt($,10);if(isNaN(b)){if(!p.has($))throw y({token:e.token,errorMessage:`asm template references undefined operand '{${$}}'.`})}else if(b<0||b>=o.length)throw y({token:e.token,errorMessage:`asm template references positional operand {${b}} but only ${o.length} operands are defined.`})}return e.$={env:t,type:u,value:void 0,pathCollection:[]},e}function vv({expr:e,env:t,context:n}){var o;if(e.args.length===0)throw y({token:e.token,errorMessage:"global_asm() requires at least one argument (the assembly string)."});let r=e.args[0],i=z({expr:r,env:t,context:{...n}});if(!((o=i.$)!=null&&o.value)||!ct(i.$.value)&&!(Me(i.$.value)&&fn(i.$.value.type)))throw y({token:r.token,errorMessage:"global_asm() argument must be a compile-time string."});return e.$={env:t,type:pe.type,value:void 0,pathCollection:[]},e}var mv,vf,Tf,yv,gv,pk,pv,Tv=Z(()=>{mt();De();Te();Et();Ne();Dn();Fe();et();mv=new Set(["reg","reg_byte","reg_abcd","xmm_reg","ymm_reg","imm","mem"]),vf=new Set(["in"]),Tf=new Set(["out","lateout"]),yv=new Set(["inout","inlateout"]),gv=new Set(["const_val","sym"]),pk=new Set([...vf,...Tf,...yv,...gv,"clobber","clobber_abi","asm_options"]),pv=new Set(["pure","nomem","readonly","nostack","preserves_flags","att_syntax","intel_syntax","volatile","noreturn"])});function Ev({expr:e,env:t}){if(E(e,F.__yo_process_platform)){if(e.args.length!==0)throw y({token:e.token,errorMessage:`__yo_process_platform expects 0 arguments, got ${e.args.length}`});let n=Ds(),r=n.os,i=Bn(r);return e.$={env:t,type:Gn(),value:i,pathCollection:[]},e}if(E(e,F.__yo_process_arch)){if(e.args.length!==0)throw y({token:e.token,errorMessage:`__yo_process_arch expects 0 arguments, got ${e.args.length}`});let n=Ds(),r=n.arch,i=Bn(r);return e.$={env:t,type:Gn(),value:i,pathCollection:[]},e}if(E(e,F.__yo_pointer_size_bits)){if(e.args.length!==0)throw y({token:e.token,errorMessage:`__yo_pointer_size_bits expects 0 arguments, got ${e.args.length}`});let n=Si(),r=Ti(BigInt(n));return e.$={env:t,type:Yi(),value:r,pathCollection:[]},e}throw y({token:e.token,errorMessage:`Unknown process function: ${e.func.token.value}`})}var $v=Z(()=>{De();Te();Sr();Et();at();Fe()});function kv(){return bv}function wv(e){bv=e}function Fv(e){return Cv.get(e)}function Lv(e,t){Cv.set(e,t)}function mi(){return qo||(qo=new Ll),qo}function Ho(){qo&&qo.clear(),qo=void 0}function Ec(e){let t=qo;return qo=e,t}function St(e,t,n){if(!ct(e))throw y({token:n,errorMessage:`Build function: expected comptime_string for "${t}", got ${e?"non-string":"undefined"}`});return e.value}function Mr(e,t){return e.$={env:t,type:ci(),value:pe,pathCollection:[]},e}function $s(e,t,n){return e.$={env:t,type:Gn(),value:Bn(n),pathCollection:[]},e}function Tk(e){var t;for(let n of e.args){if(n===void 0)continue;let r=(t=n.$)==null?void 0:t.value;if(r===void 0||Me(r))return!0}return!1}function Av({expr:e,env:t}){var r,i,o,a,s,l,u,c,_,f,p,d,g,m,h,v,T,$,b,w,C,k,A,N,x,V,I,D,P,O,J,U,W,q,j,ue,ye,X,re,le,Oe,$e,ae,Ae,se,me,he,Re,_t,bt,Mt,en,lt,kt,kn,Ot;if(Tk(e)){if(E(e,F.__yo_build_target_host)){let je=ii();return $s(e,t,je.triple)}return E(e,F.__yo_build_option)?$s(e,t,""):Mr(e,t)}let n=mi();if(E(e,F.__yo_build_executable)){if(e.args.length<2)throw y({token:e.token,errorMessage:`__yo_build_executable expects at least 2 arguments (name, root), got ${e.args.length}`});let je=St((r=e.args[0].$)==null?void 0:r.value,"name",e.token),Be=St((i=e.args[1].$)==null?void 0:i.value,"root",e.token),tt=e.args.length>2?St((o=e.args[2].$)==null?void 0:o.value,"target",e.token):ii().triple,Bt=e.args.length>3?St((a=e.args[3].$)==null?void 0:a.value,"optimize",e.token):"debug",jn=e.args.length>4?St((s=e.args[4].$)==null?void 0:s.value,"allocator",e.token):"mimalloc",Xt=e.args.length>5?St((l=e.args[5].$)==null?void 0:l.value,"sanitize",e.token):"none";return n.registerExecutable({name:je,root:Be,target:tt,optimize:Bt,allocator:jn,sanitize:Xt,linkLibraries:[],includePaths:[],libraryPaths:[],cSources:[],cFlags:[],defines:[],strip:!1,staticLink:!1,runtimeFiles:[],linkedArtifacts:[],linkedSystemLibraries:[],importedModules:[]}),Mr(e,t)}if(E(e,F.__yo_build_static_library)){if(e.args.length<2)throw y({token:e.token,errorMessage:`__yo_build_static_library expects at least 2 arguments (name, root), got ${e.args.length}`});let je=St((u=e.args[0].$)==null?void 0:u.value,"name",e.token),Be=St((c=e.args[1].$)==null?void 0:c.value,"root",e.token),tt=e.args.length>2?St((_=e.args[2].$)==null?void 0:_.value,"target",e.token):ii().triple,Bt=e.args.length>3?St((f=e.args[3].$)==null?void 0:f.value,"optimize",e.token):"debug";return n.registerStaticLibrary({name:je,root:Be,target:tt,optimize:Bt,allocator:"libc",sanitize:"none",linkLibraries:[],includePaths:[],libraryPaths:[],cSources:[],cFlags:[],defines:[],strip:!1,staticLink:!1,runtimeFiles:[],linkedArtifacts:[],linkedSystemLibraries:[],importedModules:[]}),Mr(e,t)}if(E(e,F.__yo_build_shared_library)){if(e.args.length<2)throw y({token:e.token,errorMessage:`__yo_build_shared_library expects at least 2 arguments (name, root), got ${e.args.length}`});let je=St((p=e.args[0].$)==null?void 0:p.value,"name",e.token),Be=St((d=e.args[1].$)==null?void 0:d.value,"root",e.token),tt=e.args.length>2?St((g=e.args[2].$)==null?void 0:g.value,"target",e.token):ii().triple,Bt=e.args.length>3?St((m=e.args[3].$)==null?void 0:m.value,"optimize",e.token):"debug";return n.registerSharedLibrary({name:je,root:Be,target:tt,optimize:Bt,allocator:"libc",sanitize:"none",linkLibraries:[],includePaths:[],libraryPaths:[],cSources:[],cFlags:[],defines:[],strip:!1,staticLink:!1,runtimeFiles:[],linkedArtifacts:[],linkedSystemLibraries:[],importedModules:[]}),Mr(e,t)}if(E(e,F.__yo_build_link)){if(e.args.length<2)throw y({token:e.token,errorMessage:`__yo_build_link expects 2 arguments (artifact_name, library_name), got ${e.args.length}`});let je=St((h=e.args[0].$)==null?void 0:h.value,"artifact_name",e.token),Be=St((v=e.args[1].$)==null?void 0:v.value,"library_name",e.token);if(n.findSystemLibrary(Be)){let tt=n.findArtifact(je);tt&&(tt.linkedSystemLibraries.includes(Be)||tt.linkedSystemLibraries.push(Be))}else n.registerLink(je,Be);return Mr(e,t)}if(E(e,F.__yo_build_link_system_library)){if(e.args.length<2)throw y({token:e.token,errorMessage:`__yo_build_link_system_library expects 2 arguments (artifact_name, system_lib_name), got ${e.args.length}`});let je=St((T=e.args[0].$)==null?void 0:T.value,"artifact_name",e.token),Be=St(($=e.args[1].$)==null?void 0:$.value,"system_lib_name",e.token),tt=n.findArtifact(je);return tt&&(tt.linkedSystemLibraries.includes(Be)||tt.linkedSystemLibraries.push(Be)),Mr(e,t)}if(E(e,F.__yo_build_test)){if(e.args.length<2)throw y({token:e.token,errorMessage:`__yo_build_test expects at least 2 arguments (name, root), got ${e.args.length}`});let je=St((b=e.args[0].$)==null?void 0:b.value,"name",e.token),Be=St((w=e.args[1].$)==null?void 0:w.value,"root",e.token),tt=e.args.length>2?St((C=e.args[2].$)==null?void 0:C.value,"target",e.token):ii().triple;return n.registerTest({name:je,root:Be,target:tt,verbose:!1,bail:!1,parallel:1}),Mr(e,t)}if(E(e,F.__yo_build_run)){if(e.args.length<1)throw y({token:e.token,errorMessage:`__yo_build_run expects at least 1 argument (artifact_name), got ${e.args.length}`});let je=St((k=e.args[0].$)==null?void 0:k.value,"artifact_name",e.token);return n.registerRun(je,[]),Mr(e,t)}if(E(e,F.__yo_build_step)){if(e.args.length<2)throw y({token:e.token,errorMessage:`__yo_build_step expects 2 arguments (name, description), got ${e.args.length}`});let je=St((A=e.args[0].$)==null?void 0:A.value,"name",e.token),Be=St((N=e.args[1].$)==null?void 0:N.value,"description",e.token);return n.registerStep(je,Be),Mr(e,t)}if(E(e,F.__yo_build_step_depend_on)){if(e.args.length<3)throw y({token:e.token,errorMessage:`__yo_build_step_depend_on expects 3 arguments (step_name, dep_name, dep_kind), got ${e.args.length}`});let je=St((x=e.args[0].$)==null?void 0:x.value,"step_name",e.token),Be=St((V=e.args[1].$)==null?void 0:V.value,"dep_name",e.token),tt=(I=e.args[2].$)==null?void 0:I.value,Bt=Be;return tt&&Pn(tt)&&tt.variantName==="Run"&&(Bt=`run:${Be}`),n.addStepDependency(je,Bt),Mr(e,t)}if(E(e,F.__yo_build_target_host)){let je=ii();return $s(e,t,je.triple)}if(E(e,F.__yo_build_target_parse)){if(e.args.length!==1)throw y({token:e.token,errorMessage:`__yo_build_target_parse expects 1 argument (triple), got ${e.args.length}`});let je=St((D=e.args[0].$)==null?void 0:D.value,"triple",e.token),Be=vr(je);return $s(e,t,Be.triple)}if(E(e,F.__yo_build_dependency)){if(e.args.length<2)throw y({token:e.token,errorMessage:`__yo_build_dependency expects at least 2 arguments (name, url), got ${e.args.length}`});let je=St((P=e.args[0].$)==null?void 0:P.value,"name",e.token),Be=St((O=e.args[1].$)==null?void 0:O.value,"url",e.token),tt=e.args.length>2?St((J=e.args[2].$)==null?void 0:J.value,"ref",e.token):"HEAD",Bt=e.args.length>3?St((U=e.args[3].$)==null?void 0:U.value,"path",e.token):"";return n.registerDependency({name:je,url:Be,ref:tt,path:Bt}),Mr(e,t)}if(E(e,F.__yo_build_path_dependency)){if(e.args.length!==2)throw y({token:e.token,errorMessage:`__yo_build_path_dependency expects 2 arguments (name, path), got ${e.args.length}`});let je=St((W=e.args[0].$)==null?void 0:W.value,"name",e.token),Be=St((q=e.args[1].$)==null?void 0:q.value,"path",e.token);return n.registerPathDependency({name:je,path:Be}),Mr(e,t)}if(E(e,F.__yo_build_system_library)){if(e.args.length<1)throw y({token:e.token,errorMessage:`__yo_build_system_library expects at least 1 argument (name), got ${e.args.length}`});let je=St((j=e.args[0].$)==null?void 0:j.value,"name",e.token),Be=e.args.length>1?St((ue=e.args[1].$)==null?void 0:ue.value,"fallback_include",e.token):"",tt=e.args.length>2?St((ye=e.args[2].$)==null?void 0:ye.value,"fallback_lib",e.token):"",Bt=e.args.length>3?St((X=e.args[3].$)==null?void 0:X.value,"fallback_link",e.token):"",jn=e.args.length>4?St((re=e.args[4].$)==null?void 0:re.value,"defines",e.token).split(/\s+/).filter(Boolean):[];return n.registerSystemLibrary({name:je,fallbackInclude:Be,fallbackLib:tt,fallbackLink:Bt,defines:jn}),Mr(e,t)}if(E(e,F.__yo_build_option)){if(e.args.length<3)throw y({token:e.token,errorMessage:`__yo_build_option expects 3 arguments (name, description, default), got ${e.args.length}`});let je=St((le=e.args[0].$)==null?void 0:le.value,"name",e.token),Be=St((Oe=e.args[1].$)==null?void 0:Oe.value,"description",e.token),tt=St(($e=e.args[2].$)==null?void 0:$e.value,"default",e.token);n.declaredOptions.set(je,{description:Be,defaultValue:tt});let Bt=n.cliOptions.get(je)??tt;return $s(e,t,Bt)}if(E(e,F.__yo_build_dep_artifact)){if(e.args.length<2)throw y({token:e.token,errorMessage:`__yo_build_dep_artifact expects 2 arguments (dependency_name, artifact_name), got ${e.args.length}`});let je=St((ae=e.args[0].$)==null?void 0:ae.value,"dependency_name",e.token),Be=St((Ae=e.args[1].$)==null?void 0:Ae.value,"artifact_name",e.token);return n.registerDependencyArtifact({dependencyName:je,artifactName:Be}),Mr(e,t)}if(E(e,F.__yo_build_module)){if(e.args.length<2)throw y({token:e.token,errorMessage:`__yo_build_module expects 2 arguments (name, root), got ${e.args.length}`});let je=St((se=e.args[0].$)==null?void 0:se.value,"name",e.token),Be=St((me=e.args[1].$)==null?void 0:me.value,"root",e.token);return n.registerModule({name:je,root:Be,linkedSystemLibraries:[]}),Mr(e,t)}if(E(e,F.__yo_build_module_link)){if(e.args.length<2)throw y({token:e.token,errorMessage:`__yo_build_module_link expects 2 arguments (module_name, system_library_name), got ${e.args.length}`});let je=St((he=e.args[0].$)==null?void 0:he.value,"module_name",e.token),Be=St((Re=e.args[1].$)==null?void 0:Re.value,"system_library_name",e.token);return n.registerModuleLink(je,Be),Mr(e,t)}if(E(e,F.__yo_build_add_import)){if(e.args.length<4)throw y({token:e.token,errorMessage:`__yo_build_add_import expects 4 arguments (artifact_name, import_name, module_name, dependency_name), got ${e.args.length}`});let je=St((_t=e.args[0].$)==null?void 0:_t.value,"artifact_name",e.token),Be=St((bt=e.args[1].$)==null?void 0:bt.value,"import_name",e.token),tt=St((Mt=e.args[2].$)==null?void 0:Mt.value,"module_name",e.token),Bt=St((en=e.args[3].$)==null?void 0:en.value,"dependency_name",e.token),jn=n.findArtifact(je);if(jn){let Xt=jn.importedModules.find(Sn=>Sn.importName===Be);if(Xt)throw y({token:e.token,errorMessage:`Duplicate import name "${Be}" on artifact "${je}". Already imported from module "${Xt.moduleName}".`})}return n.registerImportedModule(je,{importName:Be,moduleName:tt,dependencyName:Bt}),Mr(e,t)}if(E(e,F.__yo_build_add_cflags)){if(e.args.length<2)throw y({token:e.token,errorMessage:`__yo_build_add_cflags expects 2 arguments (artifact_name, flags), got ${e.args.length}`});let je=St((lt=e.args[0].$)==null?void 0:lt.value,"artifact_name",e.token),Be=St((kt=e.args[1].$)==null?void 0:kt.value,"flags",e.token),tt=n.findArtifact(je);if(tt){let Bt=Be.trim().split(/\s+/).filter(jn=>jn.length>0);tt.cFlags.push(...Bt)}return Mr(e,t)}if(E(e,F.__yo_build_dep_module)){if(e.args.length<2)throw y({token:e.token,errorMessage:`__yo_build_dep_module expects 2 arguments (dependency_name, module_name), got ${e.args.length}`});let je=St((kn=e.args[0].$)==null?void 0:kn.value,"dependency_name",e.token),Be=St((Ot=e.args[1].$)==null?void 0:Ot.value,"module_name",e.token);return $s(e,t,`${je}\0${Be}`)}throw y({token:e.token,errorMessage:`Unknown build function: ${e.func.token.value}`})}var Ll,qo,bv,Cv,ka=Z(()=>{De();Te();Sr();Et();Fe();Dn();Ll=class{constructor(){this.artifacts=[];this.testSuites=[];this.runSteps=[];this.steps=[];this.dependencies=[];this.pathDependencies=[];this.systemLibraries=[];this.dependencyArtifacts=[];this.modules=[];this.cliOptions=new Map;this.declaredOptions=new Map}setCliOptions(t){this.cliOptions=t}registerExecutable(t){this.checkDuplicateArtifactName(t.name),this.artifacts.push({kind:"executable",...t})}registerStaticLibrary(t){this.checkDuplicateArtifactName(t.name),this.artifacts.push({kind:"static_library",...t})}registerSharedLibrary(t){this.checkDuplicateArtifactName(t.name),this.artifacts.push({kind:"shared_library",...t})}registerTest(t){this.testSuites.push(t)}registerRun(t,n){let r=`run:${t}`;this.runSteps.push({name:r,artifactName:t,args:n})}registerStep(t,n,r=[]){this.steps.push({name:t,description:n,dependencyNames:r})}addStepDependency(t,n){let r=this.findStep(t);r&&(r.dependencyNames.includes(n)||r.dependencyNames.push(n))}registerDependency(t){this.dependencies.push(t)}registerPathDependency(t){this.pathDependencies.push(t)}registerSystemLibrary(t){this.systemLibraries.push(t)}registerDependencyArtifact(t){this.dependencyArtifacts.some(n=>n.dependencyName===t.dependencyName&&n.artifactName===t.artifactName)||this.dependencyArtifacts.push(t)}registerModule(t){this.modules.some(n=>n.name===t.name)||this.modules.push(t)}registerModuleLink(t,n){let r=this.modules.find(i=>i.name===t);r&&!r.linkedSystemLibraries.includes(n)&&r.linkedSystemLibraries.push(n)}registerImportedModule(t,n){let r=this.findArtifact(t);if(r){if(r.importedModules.some(i=>i.importName===n.importName))return;r.importedModules.push(n)}}findModule(t){return this.modules.find(n=>n.name===t)}registerLink(t,n){let r=this.findArtifact(t);r&&(r.linkedArtifacts.includes(n)||r.linkedArtifacts.push(n))}findArtifact(t){return this.artifacts.find(n=>n.name===t)}findTest(t){return this.testSuites.find(n=>n.name===t)}findRunStep(t){return this.runSteps.find(n=>n.name===t)}findStep(t){return this.steps.find(n=>n.name===t)}checkDuplicateArtifactName(t){let n=this.artifacts.find(r=>r.name===t);if(n)throw new Error(`Build error: Artifact "${t}" already registered as ${n.kind}. Use a unique name for each artifact.`)}findDependency(t){return this.dependencies.find(n=>n.name===t)}findPathDependency(t){return this.pathDependencies.find(n=>n.name===t)}findSystemLibrary(t){return this.systemLibraries.find(n=>n.name===t)}getStepNames(){return this.steps.map(t=>t.name)}resolveDependency(t){let n=this.findArtifact(t);if(n)return{kind:"artifact",value:n};let r=this.findTest(t);if(r)return{kind:"test",value:r};let i=this.findRunStep(t);if(i)return{kind:"run",value:i};let o=this.findStep(t);if(o)return{kind:"step",value:o}}resolveDependencies(t){let n=[],r=[],i=[];for(let o of t.dependencyNames){let a=this.resolveDependency(o);if(a)switch(a.kind){case"artifact":n.some(s=>s.name===a.value.name)||n.push(a.value);break;case"test":r.some(s=>s.name===a.value.name)||r.push(a.value);break;case"run":i.some(s=>s.name===a.value.name)||i.push(a.value);{let s=this.findArtifact(a.value.artifactName);s&&!n.some(l=>l.name===s.name)&&n.push(s)}break;case"step":{let s=this.resolveDependencies(a.value);for(let l of s.artifacts)n.some(u=>u.name===l.name)||n.push(l);for(let l of s.tests)r.some(u=>u.name===l.name)||r.push(l);for(let l of s.runs)i.some(u=>u.name===l.name)||i.push(l);break}}}return{artifacts:n,tests:r,runs:i}}clear(){this.artifacts=[],this.testSuites=[],this.runSteps=[],this.steps=[],this.dependencies=[],this.pathDependencies=[],this.systemLibraries=[],this.dependencyArtifacts=[],this.modules=[]}},Cv=new Map});function Sv({expr:e,env:t,context:n}){rt(e,F.__yo_address_of,1);let r=e.args[0],i=n.expectedType;i&&ot(i.type)&&(i={...i,type:i.type.childType});let o=z({expr:r,env:t,context:{...n,expectedType:i}});if(!o.$)throw y({token:r.token,errorMessage:`Failed to evaluate the argument expression for reference:
11357
11357
  ${L(r)}`});if(t=o.$.env,Y(o.$.value))throw y({token:r.token,errorMessage:`Cannot create a pointer to a type. Did you mean to use "*"?
11358
11358
  ${L(r)}`});{let a=o.$.type;if(hn(a)||Mn(a)||fn(a)){let c=Tn({type:a,expectedType:i==null?void 0:i.type,expr:o,env:t});o.$.type=c,o.$.convertedRuntimeType=c,a=c}let s=Jn(a),l=o.$.sourceVariable,u=o.$.arrayElementRef;if(u){let c=e_(s,[u.arrayValue],u.index);e.$={env:t,type:s,value:c,pathCollection:o.$.pathCollection}}else if(l&&l.value){let c=e_(s,l.value);e.$={env:t,type:s,value:c,pathCollection:o.$.pathCollection}}else{let c=o.$.indexTraitPtrType;c?e.$={env:t,type:c,value:void 0,pathCollection:o.$.pathCollection,isIndexTraitAddressOf:!0}:e.$={env:t,type:s,value:void 0,pathCollection:o.$.pathCollection}}return Dt(e,!1),e}}var Iv=Z(()=>{De();Te();Et();Ne();at();Fe();et()});function Nv({expr:e,env:t,context:n}){rt(e,F.rc,1);let r=e.args[0],i=z({expr:r,env:t,context:{...n}});if(!i.$)throw y({token:r.token,errorMessage:"Failed to evaluate expression."});return t=i.$.env,br(i.$.type)?e.$={env:t,type:Fn(),value:void 0,pathCollection:[]}:e.$={env:t,type:Fn(),value:sr("Usize",1),pathCollection:[]},e}var xv=Z(()=>{De();Te();Et();Ne();Fe();ur();et()});function Vv({expr:e,env:t,context:n}){rt(e,F.sizeof,1);let r=e.args[0],i=z({expr:r,env:t,context:{...n}});if(!i.$)throw y({token:r.token,errorMessage:"Failed to evaluate expression."});t=i.$.env;let o;i.$.value&&Y(i.$.value)?o=i.$.value.value:o=i.$.type;let a=xo(o),s;return a===null?s=de(Fn(),{env:t,context:n}):s=sr("Usize",Math.ceil(a/8)),e.$={env:t,type:Fn(),value:s,pathCollection:[]},e}var Dv=Z(()=>{De();Te();Et();at();Fe();ur();et()});function ko({expr:e,type:t,env:n,context:r}){var i,o,a,s,l,u,c,_,f,p;if(gt(t)&&S(e)&&E(e,R.tuple)){if(t.fields.length!==e.args.length)throw y({token:e.token,errorMessage:`Tuple size mismatch: expected ${t.fields.length} fields, got ${e.args.length}`});for(let d=0;d<t.fields.length;d++){let g=t.fields[d].type,m=e.args[d],{env:h}=ko({expr:m,type:g,env:n,context:{...r}});n=h}return e.$={env:n,type:t,pathCollection:[]},{expr:e,type:t,env:n}}else if(S(e)&&E(e,"_"))if(Ue(t)||Kt(t)||it(t)||$t(t)){let d=di({expr:e,env:n,givenFunc:{type:In(t),value:ke(t)},context:{...r}});if(!((i=d.$)!=null&&i.type)||!((o=d.$)!=null&&o.env))throw y({token:e.token,errorMessage:`Failed to evaluate expr and type for struct:
11359
11359
  ${L(e)}`});return{expr:d,type:(a=d.$)==null?void 0:a.type,env:(s=d.$)==null?void 0:s.env}}else throw y({token:e.token,errorMessage:`Cannot use _ with type ${M(t)}. Only supported with struct types.`});else if(S(e)&&E(e,".",1))if(Ze(t)){let d=e.args[0];if(!K(d))throw y({token:e.token,errorMessage:`Expected identifier for enum variant, got ${L(d)}`});let g=d.token.value;if(!t.variants.find(v=>v.name===g))throw y({token:e.token,errorMessage:`Enum variant "${g}" not found in ${M(t)}`});let h={...t,selectedVariantName:g};return e.$={type:h,env:n,pathCollection:[]},{expr:e,type:h,env:n}}else throw y({token:e.token,errorMessage:`Cannot use . with type ${M(t)}. Only supported with enum types.`});else if(S(e)&&S(e.func)&&E(e.func,".",1))if(Ze(t)){let d=e.func,g=d.args[0];if(!K(g))throw y({token:d.token,errorMessage:`Expected identifier for enum variant, got ${L(g)}`});let m=g.token.value;if(!t.variants.find($=>$.name===m))throw y({token:e.token,errorMessage:`Enum variant "${m}" not found in ${M(t)}`});let v={...t,selectedVariantName:m},T=di({expr:e,env:n,givenFunc:{type:In(v),value:ke(v)},context:{...r}});if(!((l=T.$)!=null&&l.type)||!((u=T.$)!=null&&u.env))throw y({token:e.token,errorMessage:`Failed to evaluate expr and type for enum variant:
@@ -11438,7 +11438,7 @@ Trait field "${o??"unnamed"}" has type: ${M(p)}
11438
11438
 
11439
11439
  To avoid circular dependency issues, please explicitly provide the value for this field.`});s&&(s.$={env:n,type:p,value:f??de(p,{variableName:o,env:n,context:r}),pathCollection:[]}),e!==l&&(e.$={env:n,value:pe,type:pe.type,pathCollection:[]});let m;if(i&&!f&&Pt(p)&&p.level===0){if(o){let C=fe(n,o),k=C[C.length-1];k!=null&&k.value&&Y(k.value[0])&&B(k.value[0].value)&&(m=k.value[0].value)}m||(m=Br(p,o??`__associated_type_${Lt(n.modulePath)}`,{env:n,context:r}))}return{field:{label:o??`__field_${Lt(n.modulePath)}`,type:p,exprs:{expr:e,labelExpr:s,typeExpr:l,defaultValueExpr:u,assignedValueExpr:_},defaultValue:c,assignedValue:f,unassignedSomeType:m},env:n}}function kT({expr:e,env:t,context:n}){var f,p,d,g;if(!E(e,R.trait))throw y({token:e.token,errorMessage:`Expected "trait", got:
11440
11440
  ${L(e)}`});let r=wt(t),i=[];r.fields=i,n.currentModulePath&&(r.definedInModulePath=n.currentModulePath),t=Ft(t);let o=e.args,a=Br(Qt(),"Self",{env:t,context:n});a.trait=r,oi(t,"Runtime")&&(t=fr("Runtime",a,t,n));let l;if(o.length>0){let m=o[o.length-1];if(S(m)&&E(m,R.where)&&(l=m.args,l.length===0))throw y({token:m.token,errorMessage:"The where clause must have at least one constraint."})}let u=[],c={...n,SelfTraitType:r};if(l&&l.length>0){let m=bT({constraintExprs:l,env:t,context:c,selfType:a,traitType:r,collectPendingTraits:!0});t=m.env,u=m.pendingTraits}for(let m=0;m<o.length;m++){let h=o[m];if(S(h)&&E(h,R.where)){if(m!==o.length-1)throw y({token:h.token,errorMessage:"The where clause must be the last argument in a trait definition."});continue}{let{field:v,env:T}=kk({expr:h,env:t,traitFieldIndex:m,context:{...c,SelfType:a,SelfTraitType:r},isForEvaluatingTraitType:!0});if(i.find(b=>b.label===v.label))throw y({token:S(h)?((f=h.args[0])==null?void 0:f.token)??h.token:h.token,errorMessage:`Duplicate label 3 "${v.label}" in trait`});if(i.push(v),t=T,v.unassignedSomeType){let b=fe(t,v.label),w=b[b.length-1],C=w!=null&&w.value&&Y(w.value[0])&&B(w.value[0].value)?w.value[0].value:void 0;if((C==null?void 0:C.id)!==v.unassignedSomeType.id){let k=ke(v.unassignedSomeType),A=((p=v.exprs.labelExpr)==null?void 0:p.token)??v.exprs.expr.token??h.token,{env:N}=qe({env:t,variable:{name:v.label,type:k.type,isCompileTimeOnly:!0,value:[k],token:A,initializedAtToken:A,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1},allowVariableShadowing:!0});t=N}}}}if(u.length>0){let m=[];for(let h of u){let v=Ck({lhsExpr:h.lhsExpr,traitExpr:h.traitExpr,originalConstraintExpr:h.originalConstraintExpr,env:t,context:c,selfType:a,traitType:r});t=v.env,v.success||m.push(h)}if(m.length>0){let h=m[0];bT({constraintExprs:[h.originalConstraintExpr],env:t,context:c,selfType:a,traitType:r,collectPendingTraits:!1})}}for(let m of i){if(!ne(m.type))continue;let h=m.type;if(h.return.isCompileTimeOnly&&Ye(h.return.type)){let v=ya(h.return.type,t);if(v){let T=((d=h.return.typeExpr)==null?void 0:d.token)??e.token;throw y({token:T,errorMessage:`Return type "${M(h.return.type)}" in trait field "${m.label}" is used with "comptime" but type parameter "${M(v)}" does not implement the Comptime trait. Add "${v.name} <: Comptime" to the where clause.`})}}for(let v of h.parameters)if(v.isCompileTimeOnly&&Ye(v.type)){let T=ya(v.type,t);if(T){let $=((g=v.exprs.typeExpr)==null?void 0:g.token)??e.token;throw y({token:$,errorMessage:`Parameter type "${M(v.type)}" in trait field "${m.label}" is used with "comptime" but type parameter "${M(T)}" does not implement the Comptime trait. Add "${T.name} <: Comptime" to the where clause.`})}}}t=cn(t,!0);let _=ke(r);return e.$={env:t,value:_,type:_.type,pathCollection:[]},e.func.$=e.$,e}var wT=Z(()=>{mt();De();Te();rn();Et();bi();Ne();Li();at();Dn();Cn();Fe();et();qt();Wr();ui()});function wk({args:e,env:t,context:n,forType:r}){var a;let i=[];for(let s=0;s<e.length;s++){let l=e[s],{field:u,env:c}=jo({expr:l,env:t,tupleFieldIndex:s,context:{...n},forType:r});if(u.label&&i.find(f=>f.label===u.label))throw y({token:S(l)?((a=l.args[0])==null?void 0:a.token)??l.token:l.token,errorMessage:`Duplicate label "${u.label}" in tuple`});i.push(u),t=c}return{type:Za(i),env:t}}function FT({expr:e,env:t,context:n}){if(e.args.length===0){let o=ke(ci());return e.$={env:t,value:o,type:o.type,pathCollection:[]},e}let{type:r,env:i}=wk({args:e.args,env:t,context:{...n},forType:"tuple"});return t=i,r.fields.forEach(o=>{if(o.exprs.defaultValueExpr)throw y({token:o.exprs.defaultValueExpr.token,errorMessage:"Tuple type cannot have default value."})}),t=Fp({env:t,context:n,tupleType:r,errorToken:e.token}),e.$={env:t,value:ke(r),type:In(r),pathCollection:[]},e}var LT=Z(()=>{De();Te();Et();Li();Fe();Al();ui()});function AT({expr:e,env:t,context:n}){var s,l;if(!E(e,R.union))throw y({token:e.token,errorMessage:`Expected "union", got:
11441
- ${L(e)}`});let r=Up(t);n.currentModulePath&&(r.definedInModulePath=n.currentModulePath,r.trait.definedInModulePath=n.currentModulePath);let i=[];r.fields=i;let o=e.args;for(let u=0;u<o.length;u++){let c=o[u],{field:_,env:f}=jo({expr:c,env:t,tupleFieldIndex:u,context:{...n,SelfType:r},forType:"union"});if(i.find(d=>d.label===_.label))throw y({token:S(c)?((s=c.args[0])==null?void 0:s.token)??c.token:c.token,errorMessage:`Duplicate label "${_.label}" in union field.`});if(_.defaultValue)throw y({token:((l=_.exprs.defaultValueExpr)==null?void 0:l.token)??_.exprs.expr.token,errorMessage:"Union type cannot have default value for its fields."});if(la(_.type,t)||!fo(_.type,t))throw y({token:_.exprs.expr.token,errorMessage:"Union type fields must be runtime types."});if(ht(_.type))throw y({token:_.exprs.expr.token,errorMessage:"Union type cannot have field with garbage-collected type."});i.push(_),t=f}t=bp({unionType:r,env:t,context:n}),t=Cp({unionType:r,env:t,context:n}),t=kp({unionType:r,env:t,context:n});let a=ke(r);return e.$={env:t,value:a,type:a.type,pathCollection:[]},e.func.$=e.$,e}var ST=Z(()=>{De();Te();Et();at();Fe();qt();Al();ui()});function kc({expr:e,env:t,context:n}){var q,j,ue,ye,X,re,le,Oe,$e,ae,Le;let r=(q=n.expectedType)==null?void 0:q.type;if(!r)throw y({token:e.token,errorMessage:`Expected a function type, got:
11441
+ ${L(e)}`});let r=Up(t);n.currentModulePath&&(r.definedInModulePath=n.currentModulePath,r.trait.definedInModulePath=n.currentModulePath);let i=[];r.fields=i;let o=e.args;for(let u=0;u<o.length;u++){let c=o[u],{field:_,env:f}=jo({expr:c,env:t,tupleFieldIndex:u,context:{...n,SelfType:r},forType:"union"});if(i.find(d=>d.label===_.label))throw y({token:S(c)?((s=c.args[0])==null?void 0:s.token)??c.token:c.token,errorMessage:`Duplicate label "${_.label}" in union field.`});if(_.defaultValue)throw y({token:((l=_.exprs.defaultValueExpr)==null?void 0:l.token)??_.exprs.expr.token,errorMessage:"Union type cannot have default value for its fields."});if(la(_.type,t)||!fo(_.type,t))throw y({token:_.exprs.expr.token,errorMessage:"Union type fields must be runtime types."});if(ht(_.type))throw y({token:_.exprs.expr.token,errorMessage:"Union type cannot have field with garbage-collected type."});i.push(_),t=f}t=bp({unionType:r,env:t,context:n}),t=Cp({unionType:r,env:t,context:n}),t=kp({unionType:r,env:t,context:n});let a=ke(r);return e.$={env:t,value:a,type:a.type,pathCollection:[]},e.func.$=e.$,e}var ST=Z(()=>{De();Te();Et();at();Fe();qt();Al();ui()});function kc({expr:e,env:t,context:n}){var q,j,ue,ye,X,re,le,Oe,$e,ae,Ae;let r=(q=n.expectedType)==null?void 0:q.type;if(!r)throw y({token:e.token,errorMessage:`Expected a function type, got:
11442
11442
  ${L(e)}`});let i,o=!1,a,s;if(ne(r))i=r;else if(B(r)){let se=pr(r);if(se)a=se,i=se.isFn.callType,o=!0,s=r;else throw y({token:e.token,errorMessage:`Expected a function type or Impl(Fn(...)), got:
11443
11443
  ${M(r)}`})}else throw y({token:e.token,errorMessage:`Expected a function type or Impl(Fn(...)), got:
11444
11444
  ${M(r)}${dt(r)?`
@@ -11449,7 +11449,7 @@ Got: "${Re}"`})}for(let se=0;se<i.forallParameters.length;se++){let me=p[se
11449
11449
  Expected: "${he.label}"
11450
11450
  Got: "${Mt}"`})}let Re=me.token.value,_t=he.label,{env:bt}=qe({env:t,variable:{name:Re,type:he.type,isCompileTimeOnly:he.isCompileTimeOnly,value:he.isCompileTimeOnly?[de(he.type,{variableName:he.label,env:t,context:n})]:void 0,token:me.token,initializedAtToken:me.token,consumedAtToken:void 0,isOwningTheRcValue:he.isOwningTheRcValue,parameterAlias:Re!==_t?_t:void 0}});t=bt,me.$={env:t,type:he.type,value:he.isCompileTimeOnly?de(he.type,{variableName:he.label,env:t,context:n}):void 0,pathCollection:[]}}let b=t.frames[t.frames.length-1],w={...i,forallParameters:i.forallParameters,implicitParameters:T?v:v.map((se,me)=>{let he=d[me];if(he&&K(he)){let Re=he.token.value;if(Re!==se.label)return{...se,label:Re}}return se}),parameters:i.parameters.map((se,me)=>{if(se.isCompileTimeOnly)return se;{let he=g[me];return{...se,label:K(he)?he.token.value:se.label,exprs:{...se.exprs,expr:he,labelExpr:he,typeExpr:se.exprs.typeExpr,defaultValueExpr:void 0}}}}),return:{...i.return,typeExpr:i.return.typeExpr},parametersFrame:b,env:Xu(i.env)};if((le=w.whereClauseExprs)!=null&&le.length){let se=w.whereClauseExprs.map(he=>yt(he));t=Go({constraintExprs:se,env:t,context:{...n,isEvaluatingFunctionType:!0}}).env}let C={tag:"Function",type:w,body:_,frameLevel:t.frames.length-1,funcId:`fn_${Lt(t.modulePath)}`,definitionSiteEnclosingFunctionType:((Oe=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:Oe.kind)==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},k=!!a,A=p.length>0||i.parameters.some(se=>Ye(se.type))||i.SelfType&&Ye(i.SelfType),N,x;if(A)_f({functionBodyExpr:_,functionType:i,functionValue:C,env:t,context:n}),_.$={env:t,type:i.return.type,value:i.return.isCompileTimeOnly?de(i.return.type,{variableName:"function_body",env:t,context:n}):void 0,pathCollection:[]},N={...n,isExecuting:!1,capturedVariables:new Map},x=_;else{let{evaluationContext:se}=Ts({...n,isExecuting:!1,isValidatingFunctionDefinition:!1},i,C,t);if(N=se,n.isInsideIoAsyncCall&&o&&(N={...N,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"async-block",evaluationEnv:t}}),x=$n({expr:_,env:t,context:N,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),!x.$)throw y({token:_.token,errorMessage:"Failed to evaluate the function body."});t=x.$.env}let V=N.capturedVariables;if(Di(x)&&(C.isControlFunction=!0),x.$&&(i.implicitParameters.some(se=>it(se.type))||n.isInsideIoAsyncCall)){let se=Qp(x);se.hasAwaits&&(x.$.awaitAnalysis=se)}let I=($e=x.$)==null?void 0:$e.type;if(B(i.return.type)&&!i.return.type.resolvedConcreteType&&I){let se=I;if(B(se)&&se.resolvedConcreteType&&(se=se.resolvedConcreteType),!B(se)){let me=Tn({type:se,expectedType:void 0,expr:x,env:t});i.return.type.resolvedConcreteType=me}}if(!B(i.return.type)&&Ye(i.return.type)&&I&&!B(I)&&!Ye(I)&&(Ut({type:i.return.type,env:t},{type:I,env:t},[],{setResolvedConcreteType:!0}),i.return.type=I,w.return.type=I),!C.isControlFunction&&I&&!ce({type:i.return.type,env:t},{type:I,env:t}))throw y({token:_.token,errorMessage:`Incompatible return type:
11451
11451
  - Expected: ${M(i.return.type)}
11452
- - Got : ${M(I)}`});(ae=x.$)!=null&&ae.env&&(t=(Le=x.$)==null?void 0:Le.env),t=cn(t,!0),t=m;let D;if(k&&V&&V.size>0&&(D=pc({capturedVariables:V,env:t})),k&&$.length>0){D||(D=new Map);for(let se of $)D.set(se.name,{frameLevel:0,usageType:"read",token:se.token,value:void 0,type:se.type,isEffectParam:!0})}let P,O,J,U,W=C;if((n.isAnalyzingCtfeCapability||n.forceCompileTimeBindings)&&!o){let se=ds(C,t,n);se&&(W=se)}if(o&&a&&s){U=fc({expectedCaptureType:void 0,capturedVariablesWithValues:D,env:t,closureToken:e.token,context:{...n}}).captureType;let me=Wp(w,t),{capturedVariableDupExpressions:he,env:Re}=dc({capturedVariablesWithValues:D,env:t,context:n});J=he,t=Re,C.funcId=`closure_${Lt(t.modulePath)}`,C.closureInfo={closureType:me,captureType:U,effectParamNames:$.length>0?$.map(_t=>_t.name):void 0},B(s)&&U&&_c({wrapperType:s,captureType:U,env:t,errorToken:e.token}),s.resolvedConcreteType=U,P={...s,resolvedConcreteType:U},O=void 0}else P=W.type,O=W;return e.$={env:t,type:P,value:O,pathCollection:k&&V?vs(V):[],deferredDupExpressions:o&&J?J:void 0,captureType:o?U:void 0,closureFunctionValue:o?W:void 0,isAnonymousFunctionDefinition:!0},k&&Dt(e,!0),e}var IT=Z(()=>{mt();De();Te();Do();gn();rn();Et();Ne();at();Cn();Fe();ur();fi();yc();ic();Ci();et();qt();Co();mc();fa()});function NT({expr:e,env:t,context:n}){let r=e.args;if(r.length===0)throw y({token:e.token,errorMessage:`Expected at least one element in array, got ${r.length}`});let i=r.length,o,a;n.expectedType&&ut(n.expectedType.type)&&(a=n.expectedType.type.childType);let s=[],l=[];for(let _=0;_<r.length;_++){let f=r[_],p=z({expr:f,env:t,context:{...n,expectedType:a?{type:a,env:t}:void 0}});if(nr(p,n),!p.$)throw y({token:f.token,errorMessage:`Failed to evaluate array element: ${L(f)}`});if(t=p.$.env,s.push(p.$.value),!o)o=a||p.$.type;else if(!ce({type:o,env:t},{type:p.$.type,env:t}))if(ce({type:Tn({type:o,expectedType:void 0,expr:void 0,env:t}),env:t},{type:p.$.type,env:t}))o=p.$.type;else throw y({token:f.token,errorMessage:`Array element type mismatch:
11452
+ - Got : ${M(I)}`});(ae=x.$)!=null&&ae.env&&(t=(Ae=x.$)==null?void 0:Ae.env),t=cn(t,!0),t=m;let D;if(k&&V&&V.size>0&&(D=pc({capturedVariables:V,env:t})),k&&$.length>0){D||(D=new Map);for(let se of $)D.set(se.name,{frameLevel:0,usageType:"read",token:se.token,value:void 0,type:se.type,isEffectParam:!0})}let P,O,J,U,W=C;if((n.isAnalyzingCtfeCapability||n.forceCompileTimeBindings)&&!o){let se=ds(C,t,n);se&&(W=se)}if(o&&a&&s){U=fc({expectedCaptureType:void 0,capturedVariablesWithValues:D,env:t,closureToken:e.token,context:{...n}}).captureType;let me=Wp(w,t),{capturedVariableDupExpressions:he,env:Re}=dc({capturedVariablesWithValues:D,env:t,context:n});J=he,t=Re,C.funcId=`closure_${Lt(t.modulePath)}`,C.closureInfo={closureType:me,captureType:U,effectParamNames:$.length>0?$.map(_t=>_t.name):void 0},B(s)&&U&&_c({wrapperType:s,captureType:U,env:t,errorToken:e.token}),s.resolvedConcreteType=U,P={...s,resolvedConcreteType:U},O=void 0}else P=W.type,O=W;return e.$={env:t,type:P,value:O,pathCollection:k&&V?vs(V):[],deferredDupExpressions:o&&J?J:void 0,captureType:o?U:void 0,closureFunctionValue:o?W:void 0,isAnonymousFunctionDefinition:!0},k&&Dt(e,!0),e}var IT=Z(()=>{mt();De();Te();Do();gn();rn();Et();Ne();at();Cn();Fe();ur();fi();yc();ic();Ci();et();qt();Co();mc();fa()});function NT({expr:e,env:t,context:n}){let r=e.args;if(r.length===0)throw y({token:e.token,errorMessage:`Expected at least one element in array, got ${r.length}`});let i=r.length,o,a;n.expectedType&&ut(n.expectedType.type)&&(a=n.expectedType.type.childType);let s=[],l=[];for(let _=0;_<r.length;_++){let f=r[_],p=z({expr:f,env:t,context:{...n,expectedType:a?{type:a,env:t}:void 0}});if(nr(p,n),!p.$)throw y({token:f.token,errorMessage:`Failed to evaluate array element: ${L(f)}`});if(t=p.$.env,s.push(p.$.value),!o)o=a||p.$.type;else if(!ce({type:o,env:t},{type:p.$.type,env:t}))if(ce({type:Tn({type:o,expectedType:void 0,expr:void 0,env:t}),env:t},{type:p.$.type,env:t}))o=p.$.type;else throw y({token:f.token,errorMessage:`Array element type mismatch:
11453
11453
  Expected type: ${M(o)}
11454
11454
  Given type: ${M(p.$.type)}`});l.push(p)}let u=Qi(o,sr("Usize",i)),c=s.every(_=>!!_)?So(u,s):void 0;return e.$={env:t,type:u,value:c,pathCollection:[],runtimeArgExprsInOrder:l},Dt(e,!0),e}var xT=Z(()=>{De();Te();rn();Et();Ne();at();Fe();ur();et()});function VT(e,t){if(e.token.type==="bool"){let n=e.token.value==="true",r=dn(n);return e.$={env:t,value:r,type:r.type,pathCollection:[]},e}else throw y({token:e.token,errorMessage:`Expected bool literal, got ${e.tag}`})}var DT=Z(()=>{De();gn();Fe()});function MT(e,t){if(e.token.type==="char"){let n=Fk(e.token.value),r=Ti(BigInt(n));return e.$={env:t,value:r,type:r.type,pathCollection:[]},e}else throw y({token:e.token,errorMessage:`Expected char literal, got ${e.tag}`})}function Fk(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}`)}var OT=Z(()=>{De();gn();Fe()});function RT({expr:e,env:t,context:n}){let r=[],i=e.args;if(i.length===0)throw y({token:e.token,errorMessage:`Expected at least one element in comptime_list, got ${i.length}`});let o;n.expectedType&&Un(n.expectedType.type)&&(o=n.expectedType.type.childType);for(let s=0;s<i.length;s++){let l=i[s],u=z({expr:l,env:t,context:{...n}});if(!u.$||!u.$.value)throw y({token:l.token,errorMessage:`Failed to evaluate expr_list element. Expected compile-time known value:
11455
11455
  ${L(l)}`});t=u.$.env;let c=u.$.value;if(r.push(c),!o)o=u.$.type;else if(!ce({type:o,env:t},{type:u.$.type,env:t}))throw y({token:l.token,errorMessage:`Mismatched element types in comptime_list. Expected element of type ${M(o)}, got ${M(u.$.type)}`})}let a=vi(o,r);return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}var PT=Z(()=>{De();Te();rn();Ne();at();Fe();et()});function zT(e,t,n){let i=fe(t,"Box").find(p=>p.value&&we(p.value[0])&&ne(p.type));if(!i||!i.value||!we(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=ke(e),u=Ft(a.env),{env:c}=qe({env:u,variable:{name:s.label,token:Ve,type:l.type,isCompileTimeOnly:!0,initializedAtToken:Ve,consumedAtToken:void 0,value:[l],isOwningTheRcValue:!1}}),{value:_,callerEnv:f}=gs({functionCalleeExpr:void 0,functionType:a,functionValue:o,argValues:{forallArgs:[],args:[{value:l,parameterType:s.type,argType:Qt()}],variadicArgs:[]},callerEnv:t,calleeEnv:c,context:n});if(!Y(_)||!pn(_.value))throw new Error("Box type constructor did not return a type value");return{boxType:_.value,env:f}}function Lk(e,t,n){var r;try{let i=z({expr:e,env:t,context:n});if(!i.$)return!1;let o=i.$.value;if(we(o))return!!fe(t,"box").find(l=>l.value&&we(l.value[0])&&l.value[0]===o);if(Y(o)){let s=o.value;return!!((r=s==null?void 0:s.typeName)!=null&&r.startsWith("Box("))}else return!1}catch{return!1}}function UT({expr:e,env:t,context:n}){rt(e,R.dyn,1);let r=e.args[0],i=n.expectedType,o;if(n.expectedType&&dt(n.expectedType.type)){let m=n.expectedType.type;if(o=Br(Qt(),"",{requiredTraits:m.requiredTraits.map(h=>h.traitType),negativeTraits:m.negativeTraits.map(h=>h.traitType),env:t,context:n}),S(r)&&Lk(r.func,t,{...n})&&E(r.args[0],"=>")){let{boxType:h,env:v}=zT(o,t,n);t=v,i={type:h,env:t}}else i={type:o,env:n.expectedType.env}}else i=void 0;let a=z({expr:r,env:t,context:{...n,expectedType:i}});if(!a.$)throw y({token:r.token,errorMessage:`Failed to evaluate the value expression for 'dyn':
@@ -11521,7 +11521,7 @@ ${M(l.$.type)}`});if($&&ji(l.$.type,t))throw y({token:e.token,errorMessage:`Expe
11521
11521
  ${L(e)}`});let C=(T=a.$)==null?void 0:T.value;if(Y(C)&&!C.value.typeName&&C.value!==n.SelfType?C.value.typeName=l.token.value:we(C)&&!C.funcName?(C.funcName=l.token.value,C.funcId+=`_${l.token.value}`):(xt(C)||vn(C))&&!C.type.typeName&&C.type!==n.SelfType&&(C.type.typeName=l.token.value),s&&we(C)&&(C.isModuleEffectMember=!0),!C&&$)throw y({token:l.token,errorMessage:`Expected compile-time value for "${l.token.value}".
11522
11522
  Got runtime value. Please consider using ":=" instead of "::":
11523
11523
  ${L(a)}`});l.$={...l.$,env:t,type:l.$.type,value:$?C?yr(C):de(l.$.type,{variableName:l.token.value,env:t,context:n}):void 0,pathCollection:[]};let k=l.$.type;B(k)&&w&&B(w)&&w.resolvedConcreteType&&(k={...k,resolvedConcreteType:w.resolvedConcreteType},l.$.type=k);let A=ol(a,t,t.modulePath),N=A;A!=null&&A.consumedAtToken&&(N=void 0);let x=l.token.value==="_"?Yl(t.modulePath):l.token.value;if(!$&&!n.isEvaluatingFunctionBodyOrAsyncBlock&&n.isInsideImplBlock)throw y({token:l.token,errorMessage:`Mutable runtime variable "${x}" is not allowed inside an impl block.
11524
- Use \`::\` for compile-time definitions inside impl.`});let V=!$&&!n.isEvaluatingFunctionBodyOrAsyncBlock,{env:I}=qe({env:t,variable:{name:x,type:k,isCompileTimeOnly:$,value:l.$.value?[l.$.value]:void 0,token:l.token,initializedAtToken:l.token,consumedAtToken:void 0,isOwningTheRcValue:ht(k),isOwningTheSameRcValueAs:N,isReassignable:!s,isImplicit:s,isModuleLevel:V}});return t=I,l.token.value==="_"&&(l.$.variableName=x),l.$.env=t,s&&(o.$={env:t,value:pe,type:pe.type,pathCollection:[]}),e.$={env:t,value:pe,type:pe.type,pathCollection:[],isCompileTimeOnlyAssignment:$},e}else{let $=s||r,{env:b,runtimeDestructurings:w}=vE({lhs:l,rhs:a,env:t,isCompileTimeOnly:s||r,context:{...n}});return t=b,e.$={env:t,value:pe,type:pe.type,pathCollection:[],runtimeDestructurings:w,isCompileTimeOnlyAssignment:$},e}}var $E=Z(()=>{mt();De();Te();Cn();rn();Ne();at();Dn();Fe();$c();Wr();Os();Cf();TE();et()});function Yk(e){return S(e)?E(e,"|",2):!1}function Vf(e){if(!Yk(e))return[e];let t=e,n=t.args[0],r=t.args[1];return[...Vf(n),...Vf(r)]}function bE(e,t,n){if(B(e))for(let r=0;r<t.length;r++){let i=t[r];if(i&&B(i)&&e.id===i.id){let o=n[r];if(o)return o}}return e}function xf(e,t){if(!e.isGadt||!t.gadtReturnTypeArgs||!e.typeConstructorArgs)return!0;for(let n=0;n<e.typeConstructorArgs.length;n++){let r=e.typeConstructorArgs[n],i=t.gadtReturnTypeArgs[n];if(r&&i&&!B(r)&&!ce({type:r,env:e.env},{type:i,env:e.env}))return!1}return!0}function qk(e){return Ki(e)||Xi(e)||Vi(e)||Nr(e)||hn(e)||Mn(e)||fn(e)}function CE({expr:e,env:t,context:n}){var b,w,C,k,A,N,x,V,I,D,P,O,J;if(!E(e,R.match))throw y({token:e.token,errorMessage:`Expected "match", got ${e.tag}`});let r=e.args;if(r.length<2)throw y({token:e.token,errorMessage:`Expected at least 2 arguments for "match", got ${r.length}`});let i=r[0],o=K(i)?z({expr:i,env:t,context:{...n,expectedType:void 0}}):$n({expr:i,env:t,context:{...n,expectedType:void 0},variablesToAdd:[]});if(!o.$||!o.$.variableName)throw y({token:i.token,errorMessage:`Failed to evaluate the match scrutinee expression: ${L(i)}`});t=o.$.env;let a=o.$.type,s=o.$.value,l,u;if(ot(a)?(u=a.childType,l=a.tag):u=a,qk(u))return Hk({expr:e,env:t,context:n,scrutineeExpr:o,scrutineeType:u,scrutineeValue:s});if(!Ze(u))throw y({token:i.token,errorMessage:`Expected enum type or primitive type (integer, bool) for match expression, got ${a?M(a):"unknown type"}`});let c=u,_=c.isGadt===!0&&((b=n.expectedType)==null?void 0:b.type)!==void 0&&c.typeConstructorArgs!==void 0&&c.typeConstructorArgs.length>0,f=r.slice(1),p=[],d,g=new Set,m=!1,h=!1,v=[],T=[];for(let U=0;U<f.length;U++){let W=f[U],q=t;if(!S(W)||!E(W,"=>",2))throw y({token:W.token,errorMessage:`Expected ":" for match pattern, got ${L(W)}`});let j=W.args[0],ue=W.args[1];if(S(j)&&E(j,".",1)||En(j,"_")){if(h)throw y({token:j.token,errorMessage:'Wildcard pattern "_" can only be used once and must be the last match arm in a "match" expression.'});let ye;if(S(j)){if(ye=j.args[0],!K(ye))throw y({token:j.token,errorMessage:`Expected identifier for enum variant, got ${L(ye)}`})}else h=!0,ye=j;let X=ye.token.value,re=c.variants.find(se=>se.name===X);if(!re&&X!=="_")throw y({token:j.token,errorMessage:`Enum variant "${X}" not found in ${M(c)}`});if(re&&re.fields&&re.fields.length>0)throw y({token:j.token,errorMessage:`Enum variant "${X}" has ${re.fields.length} field(s) and must be destructured. Use .${X}(...) instead of .${X}`});if(g.add(X),re&&!xf(c,re)||X!=="_"&&Pn(s)&&s.variantName!==X)continue;let le={...c,selectedVariantName:X==="_"?void 0:X};ye.$={env:q,type:le,value:void 0,pathCollection:[]};let Oe=le;l&&l==="Ptr"&&(Oe=Jn(le));let $e=ue;q=Ft(q),j.$={env:q,type:Oe,value:void 0,pathCollection:[],caseExecuted:!0};let ae=$n({expr:$e,env:q,context:{...n,isExecuting:Pn(s)&&s.variantName===X},variablesToAdd:[]});if(!((w=ae.$)!=null&&w.type))throw y({token:$e.token,errorMessage:`Expected type for match result expression, got ${L($e)}`});let Le=cn(ae.$.env,!0);if(q=Le,ae.$={...ae.$,env:Le},q=pa(ae,q),ae.$.env=q,s===void 0&&ae.$&&(ae.$.value=void 0),Zt(ae.$.controlFlow))v.push(ae.$.controlFlow),Ht(ae.$.controlFlow,"return")&&T.push(ae),s&&!Me(s)&&Pn(s)?e.$={env:ae.$.env,type:(C=n.expectedType)!=null&&C.type&&!Ye(n.expectedType.type)?n.expectedType.type:ae.$.type,value:ae.$.value,pathCollection:ae.$.pathCollection,controlFlow:ae.$.controlFlow}:s===void 0&&(e.$={env:ae.$.env,type:(k=n.expectedType)!=null&&k.type&&!Ye(n.expectedType.type)?n.expectedType.type:ae.$.type,value:void 0,pathCollection:ae.$.pathCollection,controlFlow:ae.$.controlFlow});else if(m=!0,n.expectedType&&!ce(n.expectedType,{type:ae.$.type,env:ae.$.env}))throw y({token:ae.token,errorMessage:`Incompatible type with expected type:
11524
+ Use \`::\` for compile-time definitions inside impl.`});let V=!$&&!n.isEvaluatingFunctionBodyOrAsyncBlock,{env:I}=qe({env:t,variable:{name:x,type:k,isCompileTimeOnly:$,value:l.$.value?[l.$.value]:void 0,token:l.token,initializedAtToken:l.token,consumedAtToken:void 0,isOwningTheRcValue:ht(k),isOwningTheSameRcValueAs:N,isReassignable:!s,isImplicit:s,isModuleLevel:V}});return t=I,l.token.value==="_"&&(l.$.variableName=x),l.$.env=t,s&&(o.$={env:t,value:pe,type:pe.type,pathCollection:[]}),e.$={env:t,value:pe,type:pe.type,pathCollection:[],isCompileTimeOnlyAssignment:$},e}else{let $=s||r,{env:b,runtimeDestructurings:w}=vE({lhs:l,rhs:a,env:t,isCompileTimeOnly:s||r,context:{...n}});return t=b,e.$={env:t,value:pe,type:pe.type,pathCollection:[],runtimeDestructurings:w,isCompileTimeOnlyAssignment:$},e}}var $E=Z(()=>{mt();De();Te();Cn();rn();Ne();at();Dn();Fe();$c();Wr();Os();Cf();TE();et()});function Yk(e){return S(e)?E(e,"|",2):!1}function Vf(e){if(!Yk(e))return[e];let t=e,n=t.args[0],r=t.args[1];return[...Vf(n),...Vf(r)]}function bE(e,t,n){if(B(e))for(let r=0;r<t.length;r++){let i=t[r];if(i&&B(i)&&e.id===i.id){let o=n[r];if(o)return o}}return e}function xf(e,t){if(!e.isGadt||!t.gadtReturnTypeArgs||!e.typeConstructorArgs)return!0;for(let n=0;n<e.typeConstructorArgs.length;n++){let r=e.typeConstructorArgs[n],i=t.gadtReturnTypeArgs[n];if(r&&i&&!B(r)&&!ce({type:r,env:e.env},{type:i,env:e.env}))return!1}return!0}function qk(e){return Ki(e)||Xi(e)||Vi(e)||Nr(e)||hn(e)||Mn(e)||fn(e)}function CE({expr:e,env:t,context:n}){var b,w,C,k,A,N,x,V,I,D,P,O,J;if(!E(e,R.match))throw y({token:e.token,errorMessage:`Expected "match", got ${e.tag}`});let r=e.args;if(r.length<2)throw y({token:e.token,errorMessage:`Expected at least 2 arguments for "match", got ${r.length}`});let i=r[0],o=K(i)?z({expr:i,env:t,context:{...n,expectedType:void 0}}):$n({expr:i,env:t,context:{...n,expectedType:void 0},variablesToAdd:[]});if(!o.$||!o.$.variableName)throw y({token:i.token,errorMessage:`Failed to evaluate the match scrutinee expression: ${L(i)}`});t=o.$.env;let a=o.$.type,s=o.$.value,l,u;if(ot(a)?(u=a.childType,l=a.tag):u=a,qk(u))return Hk({expr:e,env:t,context:n,scrutineeExpr:o,scrutineeType:u,scrutineeValue:s});if(!Ze(u))throw y({token:i.token,errorMessage:`Expected enum type or primitive type (integer, bool) for match expression, got ${a?M(a):"unknown type"}`});let c=u,_=c.isGadt===!0&&((b=n.expectedType)==null?void 0:b.type)!==void 0&&c.typeConstructorArgs!==void 0&&c.typeConstructorArgs.length>0,f=r.slice(1),p=[],d,g=new Set,m=!1,h=!1,v=[],T=[];for(let U=0;U<f.length;U++){let W=f[U],q=t;if(!S(W)||!E(W,"=>",2))throw y({token:W.token,errorMessage:`Expected ":" for match pattern, got ${L(W)}`});let j=W.args[0],ue=W.args[1];if(S(j)&&E(j,".",1)||En(j,"_")){if(h)throw y({token:j.token,errorMessage:'Wildcard pattern "_" can only be used once and must be the last match arm in a "match" expression.'});let ye;if(S(j)){if(ye=j.args[0],!K(ye))throw y({token:j.token,errorMessage:`Expected identifier for enum variant, got ${L(ye)}`})}else h=!0,ye=j;let X=ye.token.value,re=c.variants.find(se=>se.name===X);if(!re&&X!=="_")throw y({token:j.token,errorMessage:`Enum variant "${X}" not found in ${M(c)}`});if(re&&re.fields&&re.fields.length>0)throw y({token:j.token,errorMessage:`Enum variant "${X}" has ${re.fields.length} field(s) and must be destructured. Use .${X}(...) instead of .${X}`});if(g.add(X),re&&!xf(c,re)||X!=="_"&&Pn(s)&&s.variantName!==X)continue;let le={...c,selectedVariantName:X==="_"?void 0:X};ye.$={env:q,type:le,value:void 0,pathCollection:[]};let Oe=le;l&&l==="Ptr"&&(Oe=Jn(le));let $e=ue;q=Ft(q),j.$={env:q,type:Oe,value:void 0,pathCollection:[],caseExecuted:!0};let ae=$n({expr:$e,env:q,context:{...n,isExecuting:Pn(s)&&s.variantName===X},variablesToAdd:[]});if(!((w=ae.$)!=null&&w.type))throw y({token:$e.token,errorMessage:`Expected type for match result expression, got ${L($e)}`});let Ae=cn(ae.$.env,!0);if(q=Ae,ae.$={...ae.$,env:Ae},q=pa(ae,q),ae.$.env=q,s===void 0&&ae.$&&(ae.$.value=void 0),Zt(ae.$.controlFlow))v.push(ae.$.controlFlow),Ht(ae.$.controlFlow,"return")&&T.push(ae),s&&!Me(s)&&Pn(s)?e.$={env:ae.$.env,type:(C=n.expectedType)!=null&&C.type&&!Ye(n.expectedType.type)?n.expectedType.type:ae.$.type,value:ae.$.value,pathCollection:ae.$.pathCollection,controlFlow:ae.$.controlFlow}:s===void 0&&(e.$={env:ae.$.env,type:(k=n.expectedType)!=null&&k.type&&!Ye(n.expectedType.type)?n.expectedType.type:ae.$.type,value:void 0,pathCollection:ae.$.pathCollection,controlFlow:ae.$.controlFlow});else if(m=!0,n.expectedType&&!ce(n.expectedType,{type:ae.$.type,env:ae.$.env}))throw y({token:ae.token,errorMessage:`Incompatible type with expected type:
11525
11525
  - Expected: ${M(n.expectedType.type)}
11526
11526
  - Actual : ${M(ae.$.type)}`});if(q=ae.$.env,p.push(ae),!Zt(ae.$.controlFlow)){if(n.expectedType&&!ce(n.expectedType,{type:ae.$.type,env:ae.$.env}))throw y({token:ae.token,errorMessage:`Incompatible type with expected type:
11527
11527
  - Expected: ${M(n.expectedType.type)}
@@ -11529,11 +11529,11 @@ Use \`::\` for compile-time definitions inside impl.`});let V=!$&&!n.isEvaluatin
11529
11529
  - Expected: ${M(se)}
11530
11530
  - Actual : ${M(ae.$.type)}`})}d||(d=n.expectedType)}else if(!d)d={type:(A=ae.$)==null?void 0:A.type,env:q};else if(!ce({type:d.type,env:q},{type:(N=ae.$)==null?void 0:N.type,env:t}))if(ce({type:Tn({type:d.type,expectedType:void 0,expr:void 0,env:d.env}),env:d.env},{type:ae.$.type,env:q}))d={type:ae.$.type,env:q};else throw y({token:ae.token,errorMessage:`Incompatible types:
11531
11531
  - Previous: ${M(d.type)}
11532
- - Current : ${M(ae.$.type)}`})}}else if(S(j)&&S(j.func)&&E(j.func,".",1)){if(h)throw y({token:j.token,errorMessage:'Wildcard pattern "_" can only be used once and must be the last match arm in a "match" expression.'});let ye=j.func.args[0];if(!K(ye))throw y({token:j.token,errorMessage:`Expected identifier for enum variant, got ${L(ye)}`});let X=ye.token.value,re=c.variants.find(me=>me.name===X);if(!re)throw y({token:j.token,errorMessage:`Enum variant "${X}" not found in ${M(c)}`});if(g.add(X),!xf(c,re)||Pn(s)&&s.variantName!==X)continue;let le=j.args;if(re.fields&&re.fields.length>0){if(!le.some(he=>S(he)&&E(he,":",2))&&le.length!==re.fields.length)throw y({token:j.token,errorMessage:`Variant "${X}" expects ${re.fields.length} parameters, got ${le.length}`})}else if(le.length>0)throw y({token:j.token,errorMessage:`Variant "${X}" has no fields, but destructuring parameters were provided`});let Oe={...c,selectedVariantName:X};ye.$={env:q,type:Oe,value:void 0,pathCollection:[]};let $e=Oe;if(l&&l==="Ptr"&&($e=Jn(Oe)),q=Ft(q),re.fields&&re.fields.length>0){let me=new Set;for(let he=0;he<le.length;he++){let Re=le[he];if(S(Re)&&E(Re,":",2)){let _t=Re.args[0],bt=Re.args[1];if(!K(_t))throw y({token:_t.token,errorMessage:`Expected identifier for label in destructuring pattern, got ${L(_t)}`});let Mt=_t.token.value,en=re.fields.findIndex(Ot=>Ot.label===Mt);if(en===-1)throw y({token:_t.token,errorMessage:`Label "${Mt}" not found in variant "${X}". Available labels: ${re.fields.map(Ot=>Ot.label).join(", ")}`});if(me.has(Mt))throw y({token:_t.token,errorMessage:`Label "${Mt}" is already destructured`});me.add(Mt);let lt=re.fields[en],kt=Pn(s)&&!Me(s),kn=kt?s.fields[en]:void 0;if(K(bt)){let Ot=bt.token.value;if(Ot!=="_"){let{env:je}=qe({env:q,variable:{name:Ot,type:lt.type,isCompileTimeOnly:kt,value:kn!==void 0?[kn]:void 0,token:bt.token,initializedAtToken:bt.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheRcValue:!1}});q=je}bt.$={env:q,type:lt.type,value:void 0,pathCollection:[]},_t.$={env:q,type:lt.type,value:void 0,pathCollection:[]}}else throw y({token:bt.token,errorMessage:`Expected identifier or "_" for variable in labeled destructuring, got ${L(bt)}`})}else if(K(Re)){let _t=Re.token.value,bt=re.fields[he],Mt=Pn(s)&&!Me(s),en=Mt?s.fields[he]:void 0;if(_t!=="_"){let{env:lt}=qe({env:q,variable:{name:_t,type:bt.type,isCompileTimeOnly:Mt,value:en!==void 0?[en]:void 0,token:Re.token,initializedAtToken:Re.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheRcValue:!1}});q=lt}Re.$={env:q,type:bt.type,value:void 0,pathCollection:[]}}else throw y({token:Re.token,errorMessage:`Expected identifier, "_", or labeled pattern (label: variable) for destructuring parameter, got ${L(Re)}`})}}j.$={env:q,type:$e,value:void 0,pathCollection:[],caseExecuted:!0};let ae=ue,Le=$n({expr:ae,env:q,context:{...n,isExecuting:Pn(s)&&s.variantName===X},variablesToAdd:[]});if(!((x=Le.$)!=null&&x.type))throw y({token:ae.token,errorMessage:`Expected type for match result expression, got ${L(ae)}`});let se=cn(Le.$.env,!0);if(q=se,Le.$={...Le.$,env:se},q=pa(Le,q),Le.$.env=q,s===void 0&&Le.$&&(Le.$.value=void 0),Zt(Le.$.controlFlow)?(v.push(Le.$.controlFlow),Ht(Le.$.controlFlow,"return")&&T.push(Le),s&&!Me(s)&&Pn(s)?e.$={env:Le.$.env,type:(V=n.expectedType)!=null&&V.type&&!Ye(n.expectedType.type)?n.expectedType.type:Le.$.type,value:Le.$.value,pathCollection:Le.$.pathCollection,controlFlow:Le.$.controlFlow}:s===void 0&&(e.$={env:Le.$.env,type:(I=n.expectedType)!=null&&I.type&&!Ye(n.expectedType.type)?n.expectedType.type:Le.$.type,value:void 0,pathCollection:Le.$.pathCollection,controlFlow:Le.$.controlFlow})):m=!0,q=Le.$.env,p.push(Le),!Zt(Le.$.controlFlow)){if(_){if(re.gadtReturnTypeArgs&&n.expectedType){let me=bE(n.expectedType.type,c.typeConstructorArgs,re.gadtReturnTypeArgs);if(!ce({type:me,env:q},{type:Le.$.type,env:q}))throw y({token:Le.token,errorMessage:`GADT type mismatch in branch ".${X}":
11532
+ - Current : ${M(ae.$.type)}`})}}else if(S(j)&&S(j.func)&&E(j.func,".",1)){if(h)throw y({token:j.token,errorMessage:'Wildcard pattern "_" can only be used once and must be the last match arm in a "match" expression.'});let ye=j.func.args[0];if(!K(ye))throw y({token:j.token,errorMessage:`Expected identifier for enum variant, got ${L(ye)}`});let X=ye.token.value,re=c.variants.find(me=>me.name===X);if(!re)throw y({token:j.token,errorMessage:`Enum variant "${X}" not found in ${M(c)}`});if(g.add(X),!xf(c,re)||Pn(s)&&s.variantName!==X)continue;let le=j.args;if(re.fields&&re.fields.length>0){if(!le.some(he=>S(he)&&E(he,":",2))&&le.length!==re.fields.length)throw y({token:j.token,errorMessage:`Variant "${X}" expects ${re.fields.length} parameters, got ${le.length}`})}else if(le.length>0)throw y({token:j.token,errorMessage:`Variant "${X}" has no fields, but destructuring parameters were provided`});let Oe={...c,selectedVariantName:X};ye.$={env:q,type:Oe,value:void 0,pathCollection:[]};let $e=Oe;if(l&&l==="Ptr"&&($e=Jn(Oe)),q=Ft(q),re.fields&&re.fields.length>0){let me=new Set;for(let he=0;he<le.length;he++){let Re=le[he];if(S(Re)&&E(Re,":",2)){let _t=Re.args[0],bt=Re.args[1];if(!K(_t))throw y({token:_t.token,errorMessage:`Expected identifier for label in destructuring pattern, got ${L(_t)}`});let Mt=_t.token.value,en=re.fields.findIndex(Ot=>Ot.label===Mt);if(en===-1)throw y({token:_t.token,errorMessage:`Label "${Mt}" not found in variant "${X}". Available labels: ${re.fields.map(Ot=>Ot.label).join(", ")}`});if(me.has(Mt))throw y({token:_t.token,errorMessage:`Label "${Mt}" is already destructured`});me.add(Mt);let lt=re.fields[en],kt=Pn(s)&&!Me(s),kn=kt?s.fields[en]:void 0;if(K(bt)){let Ot=bt.token.value;if(Ot!=="_"){let{env:je}=qe({env:q,variable:{name:Ot,type:lt.type,isCompileTimeOnly:kt,value:kn!==void 0?[kn]:void 0,token:bt.token,initializedAtToken:bt.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheRcValue:!1}});q=je}bt.$={env:q,type:lt.type,value:void 0,pathCollection:[]},_t.$={env:q,type:lt.type,value:void 0,pathCollection:[]}}else throw y({token:bt.token,errorMessage:`Expected identifier or "_" for variable in labeled destructuring, got ${L(bt)}`})}else if(K(Re)){let _t=Re.token.value,bt=re.fields[he],Mt=Pn(s)&&!Me(s),en=Mt?s.fields[he]:void 0;if(_t!=="_"){let{env:lt}=qe({env:q,variable:{name:_t,type:bt.type,isCompileTimeOnly:Mt,value:en!==void 0?[en]:void 0,token:Re.token,initializedAtToken:Re.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheRcValue:!1}});q=lt}Re.$={env:q,type:bt.type,value:void 0,pathCollection:[]}}else throw y({token:Re.token,errorMessage:`Expected identifier, "_", or labeled pattern (label: variable) for destructuring parameter, got ${L(Re)}`})}}j.$={env:q,type:$e,value:void 0,pathCollection:[],caseExecuted:!0};let ae=ue,Ae=$n({expr:ae,env:q,context:{...n,isExecuting:Pn(s)&&s.variantName===X},variablesToAdd:[]});if(!((x=Ae.$)!=null&&x.type))throw y({token:ae.token,errorMessage:`Expected type for match result expression, got ${L(ae)}`});let se=cn(Ae.$.env,!0);if(q=se,Ae.$={...Ae.$,env:se},q=pa(Ae,q),Ae.$.env=q,s===void 0&&Ae.$&&(Ae.$.value=void 0),Zt(Ae.$.controlFlow)?(v.push(Ae.$.controlFlow),Ht(Ae.$.controlFlow,"return")&&T.push(Ae),s&&!Me(s)&&Pn(s)?e.$={env:Ae.$.env,type:(V=n.expectedType)!=null&&V.type&&!Ye(n.expectedType.type)?n.expectedType.type:Ae.$.type,value:Ae.$.value,pathCollection:Ae.$.pathCollection,controlFlow:Ae.$.controlFlow}:s===void 0&&(e.$={env:Ae.$.env,type:(I=n.expectedType)!=null&&I.type&&!Ye(n.expectedType.type)?n.expectedType.type:Ae.$.type,value:void 0,pathCollection:Ae.$.pathCollection,controlFlow:Ae.$.controlFlow})):m=!0,q=Ae.$.env,p.push(Ae),!Zt(Ae.$.controlFlow)){if(_){if(re.gadtReturnTypeArgs&&n.expectedType){let me=bE(n.expectedType.type,c.typeConstructorArgs,re.gadtReturnTypeArgs);if(!ce({type:me,env:q},{type:Ae.$.type,env:q}))throw y({token:Ae.token,errorMessage:`GADT type mismatch in branch ".${X}":
11533
11533
  - Expected: ${M(me)}
11534
- - Actual : ${M(Le.$.type)}`})}d||(d=n.expectedType)}else if(!d)d={type:(D=Le.$)==null?void 0:D.type,env:q};else if(!ce({type:d.type,env:q},{type:(P=Le.$)==null?void 0:P.type,env:t}))if(ce({type:Tn({type:d.type,expectedType:void 0,expr:void 0,env:d.env}),env:d.env},{type:Le.$.type,env:q}))d={type:Le.$.type,env:q};else throw y({token:Le.token,errorMessage:`Incompatible types:
11534
+ - Actual : ${M(Ae.$.type)}`})}d||(d=n.expectedType)}else if(!d)d={type:(D=Ae.$)==null?void 0:D.type,env:q};else if(!ce({type:d.type,env:q},{type:(P=Ae.$)==null?void 0:P.type,env:t}))if(ce({type:Tn({type:d.type,expectedType:void 0,expr:void 0,env:d.env}),env:d.env},{type:Ae.$.type,env:q}))d={type:Ae.$.type,env:q};else throw y({token:Ae.token,errorMessage:`Incompatible types:
11535
11535
  - Previous: ${M(d.type)}
11536
- - Current : ${M(Le.$.type)}`})}}else throw y({token:j.token,errorMessage:`Invalid pattern in match expression: ${L(j)}
11536
+ - Current : ${M(Ae.$.type)}`})}}else throw y({token:j.token,errorMessage:`Invalid pattern in match expression: ${L(j)}
11537
11537
  Supported patterns:
11538
11538
  - .VariantName (for variants without fields)
11539
11539
  - .VariantName(param1, param2, ...) (for variants with fields)
@@ -11589,7 +11589,7 @@ main :: (fn(${n}) -> unit) {
11589
11589
 
11590
11590
  export main;
11591
11591
  `}function mw(e,t,n,r,i,o){let a=Date.now(),s=e.name.replace(/[^a-zA-Z0-9_]/g,"_"),l=`${Date.now()}_${Math.random().toString(36).substring(2,8)}`,u=Kr.dirname(e.filePath),c=`.yo_test_${s}_${l}`,_=Kr.join(u,`${c}.yo`),f=Rl(n),{isMSVC:p,isWindows:d,isEmcc:g}=f,m=r?Ui(r):!1,v=Kr.join(u,`${c}${m?".wasm":g?".js":d?".exe":""}`),T=Kr.join(u,`${c}.c`),$=g&&!m?Kr.join(u,`${c}.wasm`):void 0,b=d?Kr.join(u,`${c}.pdb`):void 0,w=()=>{if(i){console.log(` ${Ke.dim}Keeping generated files:${Ke.reset}`),console.log(` ${Ke.dim}.yo file: ${_}${Ke.reset}`),console.log(` ${Ke.dim}.c file: ${T}${Ke.reset}`);return}let k=[_,v,T];b&&k.push(b),$&&k.push($);for(let A of k)Fr.existsSync(A)&&Fr.unlinkSync(A)},C=null;try{if(ho(),Oo(),Ja(),Ao(),r)Vs(r),zs(r.pointerSizeBits);else if(g){let $e=vr("wasm32-emscripten");Vs($e),zs($e.pointerSizeBits)}let k=dw(e,t);Fr.writeFileSync(_,k);let A=Date.now();C=new jr;try{C.compileModule(`file://${_}`,{emitC:!1,debugGc:!1,debugParallelism:!1,debugAsyncAwait:!1,allocator:"libc"})}catch($e){return C=null,w(),{testName:e.name,filePath:e.filePath,passed:!1,errorMessage:`Compilation error: ${$e instanceof Tr?$e.toString():$e instanceof Error?$e.message:String($e)}`,duration:Date.now()-a}}let N=Date.now(),x=C.getGeneratedCode(),V=C.needsIntelAsmSyntax,I=C.usesParallelism;C=null,Fr.writeFileSync(T,x),!i&&Fr.existsSync(_)&&Fr.unlinkSync(_);let D=!p&&!g?Pl({sanitize:"address",compilerInfo:f}):{flags:[]},P=D.flags.length>0,O=p?["/Od","/W4",T,`/Fe${v}`]:[...n==="zig"?["cc"]:[],"-std=c11",...g?["-w"]:["-Wall","-Wextra"],g?"-O2":"-O0",...D.flags,T,"-o",v];d&&(p?(O.splice(-1,0,"ws2_32.lib"),O.splice(-1,0,"bcrypt.lib")):(O.splice(-2,0,"-lws2_32"),O.splice(-2,0,"-lbcrypt"))),!p&&!g&&V&&O.splice(-2,0,"-masm=intel"),!p&&!g&&zl()&&O.splice(-2,0,"-luring"),g&&(O.splice(-2,0,"-sEMULATE_FUNCTION_POINTER_CASTS=1"),m?O.splice(-2,0,"-sSTANDALONE_WASM"):O.splice(-2,0,"-sNODERAWFS=1"),I&&!m&&O.splice(-2,0,"-pthread","-sPTHREAD_POOL_SIZE=4","-sEXIT_RUNTIME=1"));let J=Date.now(),U=(0,Xo.spawnSync)(n,O,{stdio:"pipe",encoding:"utf-8",...fw}),W=Date.now();if(U.status!==0)return w(),{testName:e.name,filePath:e.filePath,passed:!1,errorMessage:`C compilation failed:
11592
- ${U.stderr||U.stdout}`,duration:Date.now()-a};let q=Date.now(),j;if(m){let $e=Kr.dirname(e.filePath);j=(0,Xo.spawnSync)("wasmtime",["--dir",$e,"--dir","/tmp","--dir",process.cwd(),v],{stdio:"pipe",encoding:"utf-8",timeout:6e4})}else if(g)j=(0,Xo.spawnSync)("node",[v],{stdio:"pipe",encoding:"utf-8",timeout:6e4});else{let $e=process.platform==="darwin",ae=jf(),Le;$e&&ae&&(Le=`${v}.lsan_suppressions.txt`,Fr.writeFileSync(Le,ae));let se=d&&P&&f.isClangOnWindows?Hf(n):void 0,me=Yc({compilerInfo:f,asanDllPath:se,lsanSuppressionFile:Le,detectLeaks:!0});if(j=(0,Xo.spawnSync)(v,[],{stdio:"pipe",encoding:"utf-8",timeout:6e4,env:me}),`${j.stdout||""}${j.stderr||""}`.includes("detect_leaks is not supported")){let _t=Yc({compilerInfo:f,asanDllPath:se,lsanSuppressionFile:Le,detectLeaks:!1});j=(0,Xo.spawnSync)(v,[],{stdio:"pipe",encoding:"utf-8",timeout:6e4,env:_t})}Le&&Fr.existsSync(Le)&&Fr.unlinkSync(Le)}let ue=`${j.stdout||""}${j.stderr||""}`,ye=!g&&(ue.includes("LeakSanitizer")||ue.includes("detected memory leaks")||ue.includes("Direct leak")||ue.includes("Indirect leak")),X=j.status===0&&!ye,re=Date.now(),le;if(o){let $e=process.memoryUsage().heapUsed/1024/1024;le=`yo=${N-A}ms cc=${W-J}ms run=${re-q}ms heap=${$e.toFixed(0)}MB`,console.log(` ${Ke.dim}${le}${Ke.reset}`)}w();let Oe;if(!X)if(ye){let $e=ue.match(/=+\n([\s\S]*?SUMMARY[\s\S]*?)(\n=+|$)/);Oe=`Memory leak detected:
11592
+ ${U.stderr||U.stdout}`,duration:Date.now()-a};let q=Date.now(),j;if(m){let $e=Kr.dirname(e.filePath);j=(0,Xo.spawnSync)("wasmtime",["--dir",$e,"--dir","/tmp","--dir",process.cwd(),v],{stdio:"pipe",encoding:"utf-8",timeout:6e4})}else if(g)j=(0,Xo.spawnSync)("node",[v],{stdio:"pipe",encoding:"utf-8",timeout:6e4});else{let $e=process.platform==="darwin",ae=jf(),Ae;$e&&ae&&(Ae=`${v}.lsan_suppressions.txt`,Fr.writeFileSync(Ae,ae));let se=d&&P&&f.isClangOnWindows?Hf(n):void 0,me=Yc({compilerInfo:f,asanDllPath:se,lsanSuppressionFile:Ae,detectLeaks:!0});if(j=(0,Xo.spawnSync)(v,[],{stdio:"pipe",encoding:"utf-8",timeout:6e4,env:me}),`${j.stdout||""}${j.stderr||""}`.includes("detect_leaks is not supported")){let _t=Yc({compilerInfo:f,asanDllPath:se,lsanSuppressionFile:Ae,detectLeaks:!1});j=(0,Xo.spawnSync)(v,[],{stdio:"pipe",encoding:"utf-8",timeout:6e4,env:_t})}Ae&&Fr.existsSync(Ae)&&Fr.unlinkSync(Ae)}let ue=`${j.stdout||""}${j.stderr||""}`,ye=!g&&(ue.includes("LeakSanitizer")||ue.includes("detected memory leaks")||ue.includes("Direct leak")||ue.includes("Indirect leak")),X=j.status===0&&!ye,re=Date.now(),le;if(o){let $e=process.memoryUsage().heapUsed/1024/1024;le=`yo=${N-A}ms cc=${W-J}ms run=${re-q}ms heap=${$e.toFixed(0)}MB`,console.log(` ${Ke.dim}${le}${Ke.reset}`)}w();let Oe;if(!X)if(ye){let $e=ue.match(/=+\n([\s\S]*?SUMMARY[\s\S]*?)(\n=+|$)/);Oe=`Memory leak detected:
11593
11593
  ${$e?$e[1]:ue}`}else Oe=`Test failed with exit code ${j.status}
11594
11594
  ${j.stdout}
11595
11595
  ${j.stderr}`;return{testName:e.name,filePath:e.filePath,passed:X,errorMessage:Oe,duration:Date.now()-a,profileInfo:le}}catch(k){return w(),{testName:e.name,filePath:e.filePath,passed:!1,errorMessage:`Error running test: ${k instanceof Error?k.message:String(k)}`,duration:Date.now()-a}}}function yw(e){let t=e.lastIndexOf(jE);if(t<0)return;let r=e.slice(t+jE.length).trim().split(/\r?\n/)[0];if(r)try{let i=JSON.parse(r);return typeof i.totalTests=="number"&&typeof i.passed=="number"&&typeof i.failed=="number"&&Array.isArray(i.results)&&typeof i.duration=="number"?i:void 0}catch{return}}async function gw({filePath:e,cCompiler:t,target:n,verbose:r,bail:i,testNamePattern:o,keepGeneratedFiles:a,profile:s}){return await new Promise(l=>{var g,m;let u=process.env.BUN||"bun",_=["run",Kr.join(process.cwd(),"src/yo-cli.ts"),"test",e,"--parallel","1","--json-summary","--cc",t];n&&_.push("--target",n),r&&_.push("--verbose"),i&&_.push("--bail"),o&&_.push("--test-name-pattern",o),a&&_.push("--keep-generated-files"),s&&_.push("--profile");let f=(0,Xo.spawn)(u,_,{stdio:["ignore","pipe","pipe"],cwd:process.cwd(),env:process.env}),p="",d="";(g=f.stdout)==null||g.on("data",h=>{p+=h.toString()}),(m=f.stderr)==null||m.on("data",h=>{d+=h.toString()}),f.on("error",h=>{l({filePath:e,errorMessage:`Failed to spawn isolated test process: ${h.message}`})}),f.on("close",h=>{let v=yw(p);if(v){l({filePath:e,summary:v});return}let T=`${p}
@@ -11731,7 +11731,7 @@ export imports;
11731
11731
  `)||(r+=`
11732
11732
  `),r+=`
11733
11733
  `+i)}return r=tF(r),gi.writeFileSync(e,r,"utf-8"),t.kind==="path"?console.log(`Added path dependency "${t.name}" (${t.path}) to ${Qr.basename(e)}`):console.log(`Added dependency "${t.name}" @ ${n} to ${Qr.basename(e)}`),!0}async function nF(e){let{package:t,buildFile:n,verbose:r}=e,i=jw(t),o=process.env.YO_ORIGINAL_CWD??process.cwd(),a=Qr.resolve(o,n);gi.existsSync(a)||(console.error(`Error: Build file not found: ${a}`),console.error("Run 'yo init' to create a project with a build.yo file."),process.exit(1));let s=Qr.dirname(a),l=Qr.join(s,"deps.yo");if(i.kind==="path"){let d=Qr.resolve(o,i.path);gi.existsSync(d)||(console.error(`Error: Path does not exist: ${d}`),process.exit(1)),r&&(console.log(`Package: ${i.name} (local path)`),console.log(`Path: ${i.path}`)),console.log(`Installing local dependency "${i.name}" from ${i.path}...`),m$(l,i),y$(l,a),console.log("Done.");return}r&&(console.log(`Package: ${i.name}`),console.log(`URL: ${i.url}`),i.pinnedRef&&console.log(`Pinned ref: ${i.pinnedRef}`));let u;if(i.pinnedRef)u=i.pinnedRef,console.log(`Installing ${i.name} @ ${u} ...`);else{console.log(`Resolving latest version for ${i.name}...`);try{u=Xw(i.url,r)}catch(d){console.error(`Error: Could not resolve package "${t}".`),console.error(`Ensure the repository exists and is accessible: ${i.url}`),r&&d instanceof Error&&console.error(`Details: ${d.message}`),process.exit(1)}console.log(`Installing ${i.name} @ ${u} ...`)}if(!m$(l,i,u))return;Ho();let _=`file://${gi.realpathSync(l)}`;try{let d=new jr;d.loadModule(_),d.resetAllState()}catch{}let p=mi().dependencies;p.length>0&&(console.log(`
11734
- Fetching dependencies...`),wa(s,p,r),console.log("Done. Lock file updated: yo.lock")),y$(l,a)}function rF(e){return gi.existsSync(e)?gi.readFileSync(e,"utf-8").includes('import "./deps.yo"'):!1}function y$(e,t){console.log(),rF(t)?console.log(`Dependencies updated in ${Qr.basename(e)}. Your build.yo already imports deps.yo \u2014 no further changes needed.`):(console.log("Add the following to your build.yo:"),console.log(' { imports } :: import "./deps.yo";'),console.log(" exe.add_import_list(imports);"))}var gi,Qr,Pc,h$=Z(()=>{gi=wn(require("fs")),Qr=wn(require("path")),Pc=require("child_process");ka();xl();La();qf()});var wo=wn(require("fs")),Ol=wn(require("path")),v$=wn(require("yargs")),T$=require("yargs/helpers");var Gc={name:"@shd101wyy/yo",displayName:"Yo",version:"0.1.7",main:"./out/cjs/index.cjs",module:"./out/esm/index.mjs",types:"./out/types/src/index.d.ts",bin:{yo:"./out/cjs/yo-cli.cjs","yo-cli":"./out/cjs/yo-cli.cjs"},files:["out","scripts","vendor","std"],repository:"https://github.com/shd101wyy/yo",author:"Yiyi Wang <shd101wyy@gmail.com>",license:"NCSA",keywords:["yo","language","compiler","vscode-extension"],scripts:{"build:esbuild":"bun run build.js","build:typings":"tsc --project . --declaration",build:"bun run build:esbuild && bun run build:typings",dev:"bun run build.js --watch",lint:"eslint .",format:'prettier --write "**/*.*"',test:"jest","test:watch":"jest --watch","test:coverage":"jest --coverage",postinstall:"node scripts/check-liburing.js",prepare:"husky"},"lint-staged":{"*.{js,jsx,ts,tsx}":["eslint --fix","prettier --write"],"*.{json,md,yml,yaml,css,html}":["prettier --write"]},dependencies:{yargs:"^17.7.2"},devDependencies:{"@types/bun":"^1.3.8","@types/jest":"^29.5.11","@types/node":"^20.10.5","@types/yargs":"^17.0.32","@typescript-eslint/eslint-plugin":"^6.8.0","@typescript-eslint/parser":"^6.8.0",esbuild:"^0.20.0","esbuild-plugin-polyfill-node":"^0.3.0",eslint:"^8.52.0","eslint-plugin-import":"^2.32.0",glob:"^11.0.3",husky:"^9.1.7",jest:"^29.7.0","lint-staged":"^16.2.7",prettier:"^3.0.3","prettier-plugin-packagejson":"^2.4.6","ts-jest":"^29.1.1",typescript:"^5.8.3"}};var Hn=wn(require("fs")),_n=wn(require("path")),Oc=require("crypto"),n$=require("child_process");var xc=require("child_process"),Ko=wn(require("fs")),Ml=wn(require("path"));xs();La();Sr();at();var Rf=process.platform==="win32"?{shell:!0}:{};function Zk(e){let{compiler:t,targetInfo:n,hasLlvmAr:r}=e;if(t==="cl")return{tool:"lib",argsPrefix:[]};if(ln(n)){if(t==="zig")return{tool:"zig",argsPrefix:["ar"]};if(r??Wc("llvm-ar"))return{tool:"llvm-ar",argsPrefix:[]}}return{tool:"ar",argsPrefix:[]}}var Aa=class{constructor(){this.moduleManager=new jr}compileModule(t,n){let r=n.targetTriple?vr(n.targetTriple):ii();Vs(r),zs(r.pointerSizeBits);let i=!!(n.staticLibrary||n.shared),o=Zn(r),a=n.allocator??"libc",s=a==="mimalloc"&&!o&&!ln(r)?"mimalloc":"libc";if(n.skipCodegen){let l=this.moduleManager.loadModule(t);if(l.moduleError)throw l.moduleError}else{this.moduleManager.compileModule(t,{emitC:n.emitC,debugGc:n.debugGc,debugParallelism:n.debugParallelism,debugAsyncAwait:n.debugAsyncAwait,allocator:s,isLibrary:i});let l=this.moduleManager.getGeneratedCode();if(i){let f=this.moduleManager.getExportedFunctionNames();l=Jk(l,f)}let u=n.output,_=u.replace(/\.(html|js|wasm|exe)$/,"")+".c";if(Ko.writeFileSync(_,l),console.log(`Generated C code written to ${_}`),n.skipCCompiler)console.log("Skipping C compiler (--skip-c-compiler flag set)");else{let f=n.cCompiler;f==="zig"&&(f="zig");let p=f==="cl",d=f==="emcc";if(n.staticLibrary){let k=u+".o",A=!ln(r),N=p?["/std:c11","/c",_,`/Fo${k}`]:[...f==="zig"?["cc"]:[],"-std=c11","-c",...A?["-fPIC"]:[],"-w",_,"-o",k];n.release&&N.splice(p?1:f==="zig"?2:1,0,p?"/O2":"-O2");let x=ii();if(!p&&!d&&r.triple!==x.triple){let U=Hc(r);N.splice(-2,0,`--target=${U}`),n.sysroot&&N.splice(-2,0,`--sysroot=${n.sysroot}`)}console.log(`Compiling to object: ${f} ${N.join(" ")}`);let V=(0,xc.spawnSync)(f,N,{stdio:"inherit",...Rf});(V.error||V.status!==0)&&(console.error("Object compilation failed"),process.exit(V.status||1));let I=u.endsWith(".a")?u:`${u}.a`,D=Zk({compiler:f,targetInfo:r}),P=D.tool,O=p?[`/OUT:${I}`,k]:[...D.argsPrefix,"rcs",I,k];console.log(`Creating archive: ${P} ${O.join(" ")}`);let J=(0,xc.spawnSync)(P,O,{stdio:"inherit",...Rf});(J.error||J.status!==0)&&(console.error("Archive creation failed"),process.exit(J.status||1)),Ko.existsSync(k)&&Ko.unlinkSync(k),console.log(`Successfully created static library ${I}`);return}let g;if(n.optimize!==void 0){let k=n.optimize;k==="0"?g=p?["/Od","/W4"]:["-Wall","-Wextra","-O0"]:g=p?["/w",`/O${k}`]:["-w",`-O${k}`]}else n.release?g=p?["/w","/O2"]:["-w","-O2"]:g=p?["/Od","/W4"]:["-Wall","-Wextra","-O0"];let m=p?["/std:c11",...g,_,`/Fe${u}`]:[...n.cCompiler==="zig"?["cc"]:[],"-std=c11",...g,_,"-o",u];if(n.debugSymbols&&(p?m.splice(-1,0,"/Zi"):m.splice(-2,0,"-g"),console.log("Debug symbols enabled")),n.strip&&(n.debugSymbols&&console.warn("Warning: --strip and -g conflict; debug symbols will be stripped"),p?console.warn("Symbol stripping (-s) is not supported with MSVC"):(m.splice(-2,0,"-s"),console.log("Symbol stripping enabled"))),n.static&&(p?(m.splice(-1,0,"/MT"),console.log("Static linking enabled")):(m.splice(-2,0,"-static"),console.log("Static linking enabled"))),n.shared)if(p)m.splice(-1,0,"/LD"),console.log("Shared library mode enabled (DLL)");else{let k=["-shared"];ln(r)||k.push("-fPIC"),m.splice(-2,0,...k),console.log("Shared library mode enabled")}if(n.sanitize&&!d){let k=Rl(f),A=Pl({sanitize:n.sanitize,compilerInfo:k});if(A.warning&&console.warn(A.warning),A.flags.length>0){for(let N of A.flags)m.splice(p?-1:-2,0,N);A.info&&console.log(A.info)}}n.extern.forEach(k=>{Ko.existsSync(k)?m.splice(p?-1:-2,0,k):console.warn(`External file ${k} does not exist and will be ignored`)}),(n.includePaths??[]).forEach(k=>{let A=p?`/I${k}`:`-I${k}`;m.splice(p?-1:-2,0,A)}),(n.defines??[]).forEach(k=>{let A=p?`/D${k}`:`-D${k}`;m.splice(p?-1:-2,0,A)}),(n.libraryPaths??[]).forEach(k=>{p?m.splice(-1,0,`/LIBPATH:${k}`):m.splice(-2,0,`-L${k}`)});let b=[...n.libraries??[]];if(o||(ln(r)&&!b.includes("ws2_32")&&b.push("ws2_32"),ln(r)&&!b.includes("bcrypt")&&b.push("bcrypt")),b.forEach(k=>{p?m.splice(-1,0,`${k}.lib`):m.splice(-2,0,`-l${k}`)}),a==="mimalloc"&&s==="libc"&&ln(r)&&console.warn("Bundled mimalloc is not currently supported on Windows builds; falling back to libc."),s==="mimalloc"){let k=this.moduleManager.stdPath,A=Ml.default.join(Ml.default.dirname(k),"vendor"),N=Ml.default.join(A,"mimalloc/src/static.c"),x=Ml.default.join(A,"mimalloc/include");if(Ko.existsSync(N)){m.splice(p?-1:-2,0,N);let V=p?`/I${x}`:`-I${x}`;m.splice(p?-1:-2,0,V),console.log("Using bundled mimalloc")}else console.warn("Bundled mimalloc not found, falling back to standard malloc")}else console.log("Using libc allocator");!o&&!p&&zi(r)&&zl()?(m.splice(-2,0,"-luring"),console.log("Using system liburing for async I/O")):zi(r)&&!p&&console.warn("\u26A0\uFE0F liburing not found - async I/O will not be available. Run 'npm run postinstall' for installation instructions."),n.cflags&&(n.cflags.trim().split(/\s+/).forEach(A=>{m.splice(p?-1:-2,0,A)}),console.log(`Custom compiler flags added: ${n.cflags}`)),!p&&!d&&this.moduleManager.needsIntelAsmSyntax&&m.splice(-2,0,"-masm=intel"),d&&(m.splice(-2,0,"-sEMULATE_FUNCTION_POINTER_CASTS=1"),Ui(r)?m.splice(-2,0,"-sSTANDALONE_WASM"):n.emccEnvironment!=="web"&&m.splice(-2,0,"-sNODERAWFS=1"),this.moduleManager.usesParallelism&&m.splice(-2,0,"-pthread","-sPTHREAD_POOL_SIZE=4","-sEXIT_RUNTIME=1"));let w=ii();if(!p&&!d&&r.triple!==w.triple){r.arch===w.arch&&r.os===w.os||console.warn(`\u26A0\uFE0F Cross-compilation to a different architecture or OS is not supported.
11734
+ Fetching dependencies...`),wa(s,p,r),console.log("Done. Lock file updated: yo.lock")),y$(l,a)}function rF(e){return gi.existsSync(e)?gi.readFileSync(e,"utf-8").includes('import "./deps.yo"'):!1}function y$(e,t){console.log(),rF(t)?console.log(`Dependencies updated in ${Qr.basename(e)}. Your build.yo already imports deps.yo \u2014 no further changes needed.`):(console.log("Add the following to your build.yo:"),console.log(' { imports } :: import "./deps.yo";'),console.log(" exe.add_import_list(imports);"))}var gi,Qr,Pc,h$=Z(()=>{gi=wn(require("fs")),Qr=wn(require("path")),Pc=require("child_process");ka();xl();La();qf()});var wo=wn(require("fs")),Ol=wn(require("path")),v$=wn(require("yargs")),T$=require("yargs/helpers");var Gc={name:"@shd101wyy/yo",displayName:"Yo",version:"0.1.8",main:"./out/cjs/index.cjs",module:"./out/esm/index.mjs",types:"./out/types/src/index.d.ts",bin:{yo:"./out/cjs/yo-cli.cjs","yo-cli":"./out/cjs/yo-cli.cjs"},files:["out","scripts","vendor","std"],repository:"https://github.com/shd101wyy/yo",author:"Yiyi Wang <shd101wyy@gmail.com>",license:"NCSA",keywords:["yo","language","compiler","vscode-extension"],scripts:{"build:esbuild":"bun run build.js","build:typings":"tsc --project . --declaration",build:"bun run build:esbuild && bun run build:typings",dev:"bun run build.js --watch",lint:"eslint .",format:'prettier --write "**/*.*"',test:"jest","test:watch":"jest --watch","test:coverage":"jest --coverage",postinstall:"node scripts/check-liburing.js",prepare:"husky"},"lint-staged":{"*.{js,jsx,ts,tsx}":["eslint --fix","prettier --write"],"*.{json,md,yml,yaml,css,html}":["prettier --write"]},dependencies:{yargs:"^17.7.2"},devDependencies:{"@types/bun":"^1.3.8","@types/jest":"^29.5.11","@types/node":"^20.10.5","@types/yargs":"^17.0.32","@typescript-eslint/eslint-plugin":"^6.8.0","@typescript-eslint/parser":"^6.8.0",esbuild:"^0.20.0","esbuild-plugin-polyfill-node":"^0.3.0",eslint:"^8.52.0","eslint-plugin-import":"^2.32.0",glob:"^11.0.3",husky:"^9.1.7",jest:"^29.7.0","lint-staged":"^16.2.7",prettier:"^3.0.3","prettier-plugin-packagejson":"^2.4.6","ts-jest":"^29.1.1",typescript:"^5.8.3"}};var Hn=wn(require("fs")),_n=wn(require("path")),Oc=require("crypto"),n$=require("child_process");var xc=require("child_process"),Ko=wn(require("fs")),Ml=wn(require("path"));xs();La();Sr();at();var Rf=process.platform==="win32"?{shell:!0}:{};function Zk(e){let{compiler:t,targetInfo:n,hasLlvmAr:r}=e;if(t==="cl")return{tool:"lib",argsPrefix:[]};if(ln(n)){if(t==="zig")return{tool:"zig",argsPrefix:["ar"]};if(r??Wc("llvm-ar"))return{tool:"llvm-ar",argsPrefix:[]}}return{tool:"ar",argsPrefix:[]}}var Aa=class{constructor(){this.moduleManager=new jr}compileModule(t,n){let r=n.targetTriple?vr(n.targetTriple):ii();Vs(r),zs(r.pointerSizeBits);let i=!!(n.staticLibrary||n.shared),o=Zn(r),a=n.allocator??"libc",s=a==="mimalloc"&&!o&&!ln(r)?"mimalloc":"libc";if(n.skipCodegen){let l=this.moduleManager.loadModule(t);if(l.moduleError)throw l.moduleError}else{this.moduleManager.compileModule(t,{emitC:n.emitC,debugGc:n.debugGc,debugParallelism:n.debugParallelism,debugAsyncAwait:n.debugAsyncAwait,allocator:s,isLibrary:i});let l=this.moduleManager.getGeneratedCode();if(i){let f=this.moduleManager.getExportedFunctionNames();l=Jk(l,f)}let u=n.output,_=u.replace(/\.(html|js|wasm|exe)$/,"")+".c";if(Ko.writeFileSync(_,l),console.log(`Generated C code written to ${_}`),n.skipCCompiler)console.log("Skipping C compiler (--skip-c-compiler flag set)");else{let f=n.cCompiler;f==="zig"&&(f="zig");let p=f==="cl",d=f==="emcc";if(n.staticLibrary){let k=u+".o",A=!ln(r),N=p?["/std:c11","/c",_,`/Fo${k}`]:[...f==="zig"?["cc"]:[],"-std=c11","-c",...A?["-fPIC"]:[],"-w",_,"-o",k];n.release&&N.splice(p?1:f==="zig"?2:1,0,p?"/O2":"-O2");let x=ii();if(!p&&!d&&r.triple!==x.triple){let U=Hc(r);N.splice(-2,0,`--target=${U}`),n.sysroot&&N.splice(-2,0,`--sysroot=${n.sysroot}`)}console.log(`Compiling to object: ${f} ${N.join(" ")}`);let V=(0,xc.spawnSync)(f,N,{stdio:"inherit",...Rf});(V.error||V.status!==0)&&(console.error("Object compilation failed"),process.exit(V.status||1));let I=u.endsWith(".a")?u:`${u}.a`,D=Zk({compiler:f,targetInfo:r}),P=D.tool,O=p?[`/OUT:${I}`,k]:[...D.argsPrefix,"rcs",I,k];console.log(`Creating archive: ${P} ${O.join(" ")}`);let J=(0,xc.spawnSync)(P,O,{stdio:"inherit",...Rf});(J.error||J.status!==0)&&(console.error("Archive creation failed"),process.exit(J.status||1)),Ko.existsSync(k)&&Ko.unlinkSync(k),console.log(`Successfully created static library ${I}`);return}let g;if(n.optimize!==void 0){let k=n.optimize;k==="0"?g=p?["/Od","/W4"]:["-Wall","-Wextra","-O0"]:g=p?["/w",`/O${k}`]:["-w",`-O${k}`]}else n.release?g=p?["/w","/O2"]:["-w","-O2"]:g=p?["/Od","/W4"]:["-Wall","-Wextra","-O0"];let m=p?["/std:c11",...g,_,`/Fe${u}`]:[...n.cCompiler==="zig"?["cc"]:[],"-std=c11",...g,_,"-o",u];if(n.debugSymbols&&(p?m.splice(-1,0,"/Zi"):m.splice(-2,0,"-g"),console.log("Debug symbols enabled")),n.strip&&(n.debugSymbols&&console.warn("Warning: --strip and -g conflict; debug symbols will be stripped"),p?console.warn("Symbol stripping (-s) is not supported with MSVC"):(m.splice(-2,0,"-s"),console.log("Symbol stripping enabled"))),n.static&&(p?(m.splice(-1,0,"/MT"),console.log("Static linking enabled")):(m.splice(-2,0,"-static"),console.log("Static linking enabled"))),n.shared)if(p)m.splice(-1,0,"/LD"),console.log("Shared library mode enabled (DLL)");else{let k=["-shared"];ln(r)||k.push("-fPIC"),m.splice(-2,0,...k),console.log("Shared library mode enabled")}if(n.sanitize&&!d){let k=Rl(f),A=Pl({sanitize:n.sanitize,compilerInfo:k});if(A.warning&&console.warn(A.warning),A.flags.length>0){for(let N of A.flags)m.splice(p?-1:-2,0,N);A.info&&console.log(A.info)}}n.extern.forEach(k=>{Ko.existsSync(k)?m.splice(p?-1:-2,0,k):console.warn(`External file ${k} does not exist and will be ignored`)}),(n.includePaths??[]).forEach(k=>{let A=p?`/I${k}`:`-I${k}`;m.splice(p?-1:-2,0,A)}),(n.defines??[]).forEach(k=>{let A=p?`/D${k}`:`-D${k}`;m.splice(p?-1:-2,0,A)}),(n.libraryPaths??[]).forEach(k=>{p?m.splice(-1,0,`/LIBPATH:${k}`):m.splice(-2,0,`-L${k}`)});let b=[...n.libraries??[]];if(o||(ln(r)&&!b.includes("ws2_32")&&b.push("ws2_32"),ln(r)&&!b.includes("bcrypt")&&b.push("bcrypt")),b.forEach(k=>{p?m.splice(-1,0,`${k}.lib`):m.splice(-2,0,`-l${k}`)}),a==="mimalloc"&&s==="libc"&&ln(r)&&console.warn("Bundled mimalloc is not currently supported on Windows builds; falling back to libc."),s==="mimalloc"){let k=this.moduleManager.stdPath,A=Ml.default.join(Ml.default.dirname(k),"vendor"),N=Ml.default.join(A,"mimalloc/src/static.c"),x=Ml.default.join(A,"mimalloc/include");if(Ko.existsSync(N)){m.splice(p?-1:-2,0,N);let V=p?`/I${x}`:`-I${x}`;m.splice(p?-1:-2,0,V),console.log("Using bundled mimalloc")}else console.warn("Bundled mimalloc not found, falling back to standard malloc")}else console.log("Using libc allocator");!o&&!p&&zi(r)&&zl()?(m.splice(-2,0,"-luring"),console.log("Using system liburing for async I/O")):zi(r)&&!p&&console.warn("\u26A0\uFE0F liburing not found - async I/O will not be available. Run 'npm run postinstall' for installation instructions."),n.cflags&&(n.cflags.trim().split(/\s+/).forEach(A=>{m.splice(p?-1:-2,0,A)}),console.log(`Custom compiler flags added: ${n.cflags}`)),!p&&!d&&this.moduleManager.needsIntelAsmSyntax&&m.splice(-2,0,"-masm=intel"),d&&(m.splice(-2,0,"-sEMULATE_FUNCTION_POINTER_CASTS=1"),Ui(r)?m.splice(-2,0,"-sSTANDALONE_WASM"):n.emccEnvironment!=="web"&&m.splice(-2,0,"-sNODERAWFS=1"),this.moduleManager.usesParallelism&&m.splice(-2,0,"-pthread","-sPTHREAD_POOL_SIZE=4","-sEXIT_RUNTIME=1"));let w=ii();if(!p&&!d&&r.triple!==w.triple){r.arch===w.arch&&r.os===w.os||console.warn(`\u26A0\uFE0F Cross-compilation to a different architecture or OS is not supported.
11735
11735
  Host: ${w.triple} \u2192 Target: ${r.triple}
11736
11736
  Only native targets and WASM are supported.`);let A=Hc(r);m.splice(p?-1:-2,0,`--target=${A}`),n.sysroot&&m.splice(-2,0,`--sysroot=${n.sysroot}`)}console.log(`Compiling with: ${f} ${m.join(" ")}`);let C=(0,xc.spawnSync)(f,m,{stdio:"inherit",...Rf});C.error?(console.error(`Compilation failed: ${C.error.message}`),process.exit(1)):C.status===0?console.log(`Successfully compiled to ${u}`):(console.error(`Compilation failed with exit code ${C.status}`),process.exit(C.status||1))}}}};function Jk(e,t){let n=e.split(`
11737
11737
  `),r=[],i=/^([a-zA-Z_][a-zA-Z0-9_*\s]*?)\s+([a-zA-Z_][a-zA-Z0-9_]*)\s*\(/;for(let o=0;o<n.length;o++){let a=n[o],s=a.trimStart();if(s.startsWith("static ")||s.startsWith("static ")||s.startsWith("inline ")||s.startsWith("extern ")||s.startsWith("typedef ")||s.startsWith("#")||s.startsWith("//")||s.startsWith("/*")||s.startsWith("*")||s===""||s==="}"||s==="{"||s.startsWith("struct ")||s.startsWith("union ")||s.startsWith("enum ")){r.push(a);continue}let l=["return","if","else","while","for","do","switch","case","break","continue","goto","default","sizeof","typeof"],u=s.split(/[\s(]/)[0]??"";if(l.includes(u)){r.push(a);continue}if(a.startsWith(" ")||a.startsWith(" ")){r.push(a);continue}let c=i.exec(s);if(c){let _=c[2];if(t.has(_)){r.push(a);continue}if(_==="main"){r.push(a);continue}r.push("static inline "+a);continue}r.push(a)}return r.join(`