@shd101wyy/yo 0.1.20 → 0.1.21

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.
@@ -3,7 +3,7 @@ var mL=Object.create;var hy=Object.defineProperty;var yL=Object.getOwnPropertyDe
3
3
  ${JSON.stringify(Object.fromEntries(r))}`));return}let o=parseInt(i);if(isNaN(o)){this.fireError(new Error(`Content-Length value must be a number. Got ${i}`));return}this.nextMessageLength=o}let n=this.buffer.tryReadBody(this.nextMessageLength);if(n===void 0){this.setPartialMessageTimer();return}this.clearPartialMessageTimer(),this.nextMessageLength=-1,this.readSemaphore.lock(async()=>{let r=this.options.contentDecoder!==void 0?await this.options.contentDecoder.decode(n):n,i=await this.options.contentTypeDecoder.decode(r,this.options);this.callback(i)}).catch(r=>{this.fireError(r)})}}catch(n){this.fireError(n)}}clearPartialMessageTimer(){this.partialMessageTimer&&(this.partialMessageTimer.dispose(),this.partialMessageTimer=void 0)}setPartialMessageTimer(){this.clearPartialMessageTimer(),!(this._partialMessageTimeout<=0)&&(this.partialMessageTimer=(0,Ap.default)().timer.setTimeout((t,n)=>{this.partialMessageTimer=void 0,t===this.messageToken&&(this.firePartialMessage({messageToken:t,waitingTime:n}),this.setPartialMessageTimer())},this._partialMessageTimeout,this.messageToken,this._partialMessageTimeout))}};Xo.ReadableStreamMessageReader=Np});var My=dt(Qo=>{"use strict";Object.defineProperty(Qo,"__esModule",{value:!0});Qo.WriteableStreamMessageWriter=Qo.AbstractMessageWriter=Qo.MessageWriter=void 0;var xy=Ko(),bl=ss(),PL=Ip(),Ny=us(),UL="Content-Length: ",Dy=`\r
4
4
  `,Vy;(function(e){function t(n){let r=n;return r&&bl.func(r.dispose)&&bl.func(r.onClose)&&bl.func(r.onError)&&bl.func(r.write)}e.is=t})(Vy||(Qo.MessageWriter=Vy={}));var Uu=class{constructor(){this.errorEmitter=new Ny.Emitter,this.closeEmitter=new Ny.Emitter}dispose(){this.errorEmitter.dispose(),this.closeEmitter.dispose()}get onError(){return this.errorEmitter.event}fireError(t,n,r){this.errorEmitter.fire([this.asError(t),n,r])}get onClose(){return this.closeEmitter.event}fireClose(){this.closeEmitter.fire(void 0)}asError(t){return t instanceof Error?t:new Error(`Writer received error. Reason: ${bl.string(t.message)?t.message:"unknown"}`)}};Qo.AbstractMessageWriter=Uu;var Dp;(function(e){function t(n){return n===void 0||typeof n=="string"?{charset:n??"utf-8",contentTypeEncoder:(0,xy.default)().applicationJson.encoder}:{charset:n.charset??"utf-8",contentEncoder:n.contentEncoder,contentTypeEncoder:n.contentTypeEncoder??(0,xy.default)().applicationJson.encoder}}e.fromOptions=t})(Dp||(Dp={}));var Vp=class extends Uu{constructor(t,n){super(),this.writable=t,this.options=Dp.fromOptions(n),this.errorCount=0,this.writeSemaphore=new PL.Semaphore(1),this.writable.onError(r=>this.fireError(r)),this.writable.onClose(()=>this.fireClose())}async write(t){return this.writeSemaphore.lock(async()=>this.options.contentTypeEncoder.encode(t,this.options).then(r=>this.options.contentEncoder!==void 0?this.options.contentEncoder.encode(r):r).then(r=>{let i=[];return i.push(UL,r.byteLength.toString(),Dy),i.push(Dy),this.doWrite(t,i,r)},r=>{throw this.fireError(r),r}))}async doWrite(t,n,r){try{return await this.writable.write(n.join(""),"ascii"),this.writable.write(r)}catch(i){return this.handleError(i,t),Promise.reject(i)}}handleError(t,n){this.errorCount++,this.fireError(t,n,this.errorCount)}end(){this.writable.end()}};Qo.WriteableStreamMessageWriter=Vp});var Ry=dt(zu=>{"use strict";Object.defineProperty(zu,"__esModule",{value:!0});zu.AbstractMessageBuffer=void 0;var zL=13,BL=10,qL=`\r
5
5
  `,Mp=class{constructor(t="utf-8"){this._encoding=t,this._chunks=[],this._totalLength=0}get encoding(){return this._encoding}append(t){let n=typeof t=="string"?this.fromString(t,this._encoding):t;this._chunks.push(n),this._totalLength+=n.byteLength}tryReadHeaders(t=!1){if(this._chunks.length===0)return;let n=0,r=0,i=0,o=0;e:for(;r<this._chunks.length;){let u=this._chunks[r];for(i=0;i<u.length;){switch(u[i]){case zL:switch(n){case 0:n=1;break;case 2:n=3;break;default:n=0}break;case BL:switch(n){case 1:n=2;break;case 3:n=4,i++;break e;default:n=0}break;default:n=0}i++}o+=u.byteLength,r++}if(n!==4)return;let a=this._read(o+i),s=new Map,l=this.toString(a,"ascii").split(qL);if(l.length<2)return s;for(let u=0;u<l.length-2;u++){let c=l[u],f=c.indexOf(":");if(f===-1)throw new Error(`Message header must separate key and value using ':'
6
- ${c}`);let _=c.substr(0,f),p=c.substr(f+1).trim();s.set(t?_.toLowerCase():_,p)}return s}tryReadBody(t){if(!(this._totalLength<t))return this._read(t)}get numberOfBytes(){return this._totalLength}_read(t){if(t===0)return this.emptyBuffer();if(t>this._totalLength)throw new Error("Cannot read so many bytes!");if(this._chunks[0].byteLength===t){let o=this._chunks[0];return this._chunks.shift(),this._totalLength-=t,this.asNative(o)}if(this._chunks[0].byteLength>t){let o=this._chunks[0],a=this.asNative(o,t);return this._chunks[0]=o.slice(t),this._totalLength-=t,a}let n=this.allocNative(t),r=0,i=0;for(;t>0;){let o=this._chunks[i];if(o.byteLength>t){let a=o.slice(0,t);n.set(a,r),r+=t,this._chunks[i]=o.slice(t),this._totalLength-=t,t-=t}else n.set(o,r),r+=o.byteLength,this._chunks.shift(),this._totalLength-=o.byteLength,t-=o.byteLength}return n}};zu.AbstractMessageBuffer=Mp});var By=dt(Jt=>{"use strict";Object.defineProperty(Jt,"__esModule",{value:!0});Jt.createMessageConnection=Jt.ConnectionOptions=Jt.MessageStrategy=Jt.CancellationStrategy=Jt.CancellationSenderStrategy=Jt.CancellationReceiverStrategy=Jt.RequestCancellationReceiverStrategy=Jt.IdCancellationReceiverStrategy=Jt.ConnectionStrategy=Jt.ConnectionError=Jt.ConnectionErrors=Jt.LogTraceNotification=Jt.SetTraceNotification=Jt.TraceFormat=Jt.TraceValues=Jt.Trace=Jt.NullLogger=Jt.ProgressType=Jt.ProgressToken=void 0;var Oy=Ko(),lr=ss(),qt=mp(),Py=gp(),Cl=us(),Rp=Ru(),Fl;(function(e){e.type=new qt.NotificationType("$/cancelRequest")})(Fl||(Fl={}));var Op;(function(e){function t(n){return typeof n=="string"||typeof n=="number"}e.is=t})(Op||(Jt.ProgressToken=Op={}));var kl;(function(e){e.type=new qt.NotificationType("$/progress")})(kl||(kl={}));var Pp=class{constructor(){}};Jt.ProgressType=Pp;var Up;(function(e){function t(n){return lr.func(n)}e.is=t})(Up||(Up={}));Jt.NullLogger=Object.freeze({error:()=>{},warn:()=>{},info:()=>{},log:()=>{}});var Cn;(function(e){e[e.Off=0]="Off",e[e.Messages=1]="Messages",e[e.Compact=2]="Compact",e[e.Verbose=3]="Verbose"})(Cn||(Jt.Trace=Cn={}));var Uy;(function(e){e.Off="off",e.Messages="messages",e.Compact="compact",e.Verbose="verbose"})(Uy||(Jt.TraceValues=Uy={}));(function(e){function t(r){if(!lr.string(r))return e.Off;switch(r=r.toLowerCase(),r){case"off":return e.Off;case"messages":return e.Messages;case"compact":return e.Compact;case"verbose":return e.Verbose;default:return e.Off}}e.fromString=t;function n(r){switch(r){case e.Off:return"off";case e.Messages:return"messages";case e.Compact:return"compact";case e.Verbose:return"verbose";default:return"off"}}e.toString=n})(Cn||(Jt.Trace=Cn={}));var Ei;(function(e){e.Text="text",e.JSON="json"})(Ei||(Jt.TraceFormat=Ei={}));(function(e){function t(n){return lr.string(n)?(n=n.toLowerCase(),n==="json"?e.JSON:e.Text):e.Text}e.fromString=t})(Ei||(Jt.TraceFormat=Ei={}));var zp;(function(e){e.type=new qt.NotificationType("$/setTrace")})(zp||(Jt.SetTraceNotification=zp={}));var Bu;(function(e){e.type=new qt.NotificationType("$/logTrace")})(Bu||(Jt.LogTraceNotification=Bu={}));var wl;(function(e){e[e.Closed=1]="Closed",e[e.Disposed=2]="Disposed",e[e.AlreadyListening=3]="AlreadyListening"})(wl||(Jt.ConnectionErrors=wl={}));var ps=class e extends Error{constructor(t,n){super(n),this.code=t,Object.setPrototypeOf(this,e.prototype)}};Jt.ConnectionError=ps;var Bp;(function(e){function t(n){let r=n;return r&&lr.func(r.cancelUndispatched)}e.is=t})(Bp||(Jt.ConnectionStrategy=Bp={}));var qu;(function(e){function t(n){let r=n;return r&&(r.kind===void 0||r.kind==="id")&&lr.func(r.createCancellationTokenSource)&&(r.dispose===void 0||lr.func(r.dispose))}e.is=t})(qu||(Jt.IdCancellationReceiverStrategy=qu={}));var qp;(function(e){function t(n){let r=n;return r&&r.kind==="request"&&lr.func(r.createCancellationTokenSource)&&(r.dispose===void 0||lr.func(r.dispose))}e.is=t})(qp||(Jt.RequestCancellationReceiverStrategy=qp={}));var Gu;(function(e){e.Message=Object.freeze({createCancellationTokenSource(n){return new Rp.CancellationTokenSource}});function t(n){return qu.is(n)||qp.is(n)}e.is=t})(Gu||(Jt.CancellationReceiverStrategy=Gu={}));var Wu;(function(e){e.Message=Object.freeze({sendCancellation(n,r){return n.sendNotification(Fl.type,{id:r})},cleanup(n){}});function t(n){let r=n;return r&&lr.func(r.sendCancellation)&&lr.func(r.cleanup)}e.is=t})(Wu||(Jt.CancellationSenderStrategy=Wu={}));var ju;(function(e){e.Message=Object.freeze({receiver:Gu.Message,sender:Wu.Message});function t(n){let r=n;return r&&Gu.is(r.receiver)&&Wu.is(r.sender)}e.is=t})(ju||(Jt.CancellationStrategy=ju={}));var Hu;(function(e){function t(n){let r=n;return r&&lr.func(r.handleMessage)}e.is=t})(Hu||(Jt.MessageStrategy=Hu={}));var zy;(function(e){function t(n){let r=n;return r&&(ju.is(r.cancellationStrategy)||Bp.is(r.connectionStrategy)||Hu.is(r.messageStrategy))}e.is=t})(zy||(Jt.ConnectionOptions=zy={}));var Wi;(function(e){e[e.New=1]="New",e[e.Listening=2]="Listening",e[e.Closed=3]="Closed",e[e.Disposed=4]="Disposed"})(Wi||(Wi={}));function GL(e,t,n,r){let i=n!==void 0?n:Jt.NullLogger,o=0,a=0,s=0,l="2.0",u,c=new Map,f,_=new Map,p=new Map,d,v=new Py.LinkedMap,y=new Map,h=new Set,g=new Map,T=Cn.Off,E=Ei.Text,$,k=Wi.New,C=new Cl.Emitter,w=new Cl.Emitter,I=new Cl.Emitter,L=new Cl.Emitter,x=new Cl.Emitter,V=r&&r.cancellationStrategy?r.cancellationStrategy:ju.Message;function M(ee){if(ee===null)throw new Error("Can't send requests with id null since the response can't be correlated.");return"req-"+ee.toString()}function q(ee){return ee===null?"res-unknown-"+(++s).toString():"res-"+ee.toString()}function P(){return"not-"+(++a).toString()}function R(ee,W){qt.Message.isRequest(W)?ee.set(M(W.id),W):qt.Message.isResponse(W)?ee.set(q(W.id),W):ee.set(P(),W)}function te(ee){}function j(){return k===Wi.Listening}function Y(){return k===Wi.Closed}function le(){return k===Wi.Disposed}function Z(){(k===Wi.New||k===Wi.Listening)&&(k=Wi.Closed,w.fire(void 0))}function ce(ee){C.fire([ee,void 0,void 0])}function Te(ee){C.fire(ee)}e.onClose(Z),e.onError(ce),t.onClose(Z),t.onError(Te);function Ie(){d||v.size===0||(d=(0,Oy.default)().timer.setImmediate(()=>{d=void 0,be()}))}function ge(ee){qt.Message.isRequest(ee)?ze(ee):qt.Message.isNotification(ee)?pe(ee):qt.Message.isResponse(ee)?We(ee):fe(ee)}function be(){if(v.size===0)return;let ee=v.shift();try{let W=r==null?void 0:r.messageStrategy;Hu.is(W)?W.handleMessage(ee,ge):ge(ee)}finally{Ie()}}let De=ee=>{try{if(qt.Message.isNotification(ee)&&ee.method===Fl.type.method){let W=ee.params.id,oe=M(W),me=v.get(oe);if(qt.Message.isRequest(me)){let ye=r==null?void 0:r.connectionStrategy,he=ye&&ye.cancelUndispatched?ye.cancelUndispatched(me,te):void 0;if(he&&(he.error!==void 0||he.result!==void 0)){v.delete(oe),g.delete(W),he.id=me.id,Ze(he,ee.method,Date.now()),t.write(he).catch(()=>i.error("Sending response for canceled message failed."));return}}let de=g.get(W);if(de!==void 0){de.cancel(),It(ee);return}else h.add(W)}R(v,ee)}finally{Ie()}};function ze(ee){if(le())return;function W(qe,Pe,ie){let ae={jsonrpc:l,id:ee.id};qe instanceof qt.ResponseError?ae.error=qe.toJson():ae.result=qe===void 0?null:qe,Ze(ae,Pe,ie),t.write(ae).catch(()=>i.error("Sending response failed."))}function oe(qe,Pe,ie){let ae={jsonrpc:l,id:ee.id,error:qe.toJson()};Ze(ae,Pe,ie),t.write(ae).catch(()=>i.error("Sending response failed."))}function me(qe,Pe,ie){qe===void 0&&(qe=null);let ae={jsonrpc:l,id:ee.id,result:qe};Ze(ae,Pe,ie),t.write(ae).catch(()=>i.error("Sending response failed."))}$t(ee);let de=c.get(ee.method),ye,he;de&&(ye=de.type,he=de.handler);let Be=Date.now();if(he||u){let qe=ee.id??String(Date.now()),Pe=qu.is(V.receiver)?V.receiver.createCancellationTokenSource(qe):V.receiver.createCancellationTokenSource(ee);ee.id!==null&&h.has(ee.id)&&Pe.cancel(),ee.id!==null&&g.set(qe,Pe);try{let ie;if(he)if(ee.params===void 0){if(ye!==void 0&&ye.numberOfParams!==0){oe(new qt.ResponseError(qt.ErrorCodes.InvalidParams,`Request ${ee.method} defines ${ye.numberOfParams} params but received none.`),ee.method,Be);return}ie=he(Pe.token)}else if(Array.isArray(ee.params)){if(ye!==void 0&&ye.parameterStructures===qt.ParameterStructures.byName){oe(new qt.ResponseError(qt.ErrorCodes.InvalidParams,`Request ${ee.method} defines parameters by name but received parameters by position`),ee.method,Be);return}ie=he(...ee.params,Pe.token)}else{if(ye!==void 0&&ye.parameterStructures===qt.ParameterStructures.byPosition){oe(new qt.ResponseError(qt.ErrorCodes.InvalidParams,`Request ${ee.method} defines parameters by position but received parameters by name`),ee.method,Be);return}ie=he(ee.params,Pe.token)}else u&&(ie=u(ee.method,ee.params,Pe.token));let ae=ie;ie?ae.then?ae.then(we=>{g.delete(qe),W(we,ee.method,Be)},we=>{g.delete(qe),we instanceof qt.ResponseError?oe(we,ee.method,Be):we&&lr.string(we.message)?oe(new qt.ResponseError(qt.ErrorCodes.InternalError,`Request ${ee.method} failed with message: ${we.message}`),ee.method,Be):oe(new qt.ResponseError(qt.ErrorCodes.InternalError,`Request ${ee.method} failed unexpectedly without providing any details.`),ee.method,Be)}):(g.delete(qe),W(ie,ee.method,Be)):(g.delete(qe),me(ie,ee.method,Be))}catch(ie){g.delete(qe),ie instanceof qt.ResponseError?W(ie,ee.method,Be):ie&&lr.string(ie.message)?oe(new qt.ResponseError(qt.ErrorCodes.InternalError,`Request ${ee.method} failed with message: ${ie.message}`),ee.method,Be):oe(new qt.ResponseError(qt.ErrorCodes.InternalError,`Request ${ee.method} failed unexpectedly without providing any details.`),ee.method,Be)}}else oe(new qt.ResponseError(qt.ErrorCodes.MethodNotFound,`Unhandled method ${ee.method}`),ee.method,Be)}function We(ee){if(!le())if(ee.id===null)ee.error?i.error(`Received response message without id: Error is:
6
+ ${c}`);let _=c.substr(0,f),p=c.substr(f+1).trim();s.set(t?_.toLowerCase():_,p)}return s}tryReadBody(t){if(!(this._totalLength<t))return this._read(t)}get numberOfBytes(){return this._totalLength}_read(t){if(t===0)return this.emptyBuffer();if(t>this._totalLength)throw new Error("Cannot read so many bytes!");if(this._chunks[0].byteLength===t){let o=this._chunks[0];return this._chunks.shift(),this._totalLength-=t,this.asNative(o)}if(this._chunks[0].byteLength>t){let o=this._chunks[0],a=this.asNative(o,t);return this._chunks[0]=o.slice(t),this._totalLength-=t,a}let n=this.allocNative(t),r=0,i=0;for(;t>0;){let o=this._chunks[i];if(o.byteLength>t){let a=o.slice(0,t);n.set(a,r),r+=t,this._chunks[i]=o.slice(t),this._totalLength-=t,t-=t}else n.set(o,r),r+=o.byteLength,this._chunks.shift(),this._totalLength-=o.byteLength,t-=o.byteLength}return n}};zu.AbstractMessageBuffer=Mp});var By=dt(Jt=>{"use strict";Object.defineProperty(Jt,"__esModule",{value:!0});Jt.createMessageConnection=Jt.ConnectionOptions=Jt.MessageStrategy=Jt.CancellationStrategy=Jt.CancellationSenderStrategy=Jt.CancellationReceiverStrategy=Jt.RequestCancellationReceiverStrategy=Jt.IdCancellationReceiverStrategy=Jt.ConnectionStrategy=Jt.ConnectionError=Jt.ConnectionErrors=Jt.LogTraceNotification=Jt.SetTraceNotification=Jt.TraceFormat=Jt.TraceValues=Jt.Trace=Jt.NullLogger=Jt.ProgressType=Jt.ProgressToken=void 0;var Oy=Ko(),lr=ss(),qt=mp(),Py=gp(),Cl=us(),Rp=Ru(),Fl;(function(e){e.type=new qt.NotificationType("$/cancelRequest")})(Fl||(Fl={}));var Op;(function(e){function t(n){return typeof n=="string"||typeof n=="number"}e.is=t})(Op||(Jt.ProgressToken=Op={}));var kl;(function(e){e.type=new qt.NotificationType("$/progress")})(kl||(kl={}));var Pp=class{constructor(){}};Jt.ProgressType=Pp;var Up;(function(e){function t(n){return lr.func(n)}e.is=t})(Up||(Up={}));Jt.NullLogger=Object.freeze({error:()=>{},warn:()=>{},info:()=>{},log:()=>{}});var Cn;(function(e){e[e.Off=0]="Off",e[e.Messages=1]="Messages",e[e.Compact=2]="Compact",e[e.Verbose=3]="Verbose"})(Cn||(Jt.Trace=Cn={}));var Uy;(function(e){e.Off="off",e.Messages="messages",e.Compact="compact",e.Verbose="verbose"})(Uy||(Jt.TraceValues=Uy={}));(function(e){function t(r){if(!lr.string(r))return e.Off;switch(r=r.toLowerCase(),r){case"off":return e.Off;case"messages":return e.Messages;case"compact":return e.Compact;case"verbose":return e.Verbose;default:return e.Off}}e.fromString=t;function n(r){switch(r){case e.Off:return"off";case e.Messages:return"messages";case e.Compact:return"compact";case e.Verbose:return"verbose";default:return"off"}}e.toString=n})(Cn||(Jt.Trace=Cn={}));var Ei;(function(e){e.Text="text",e.JSON="json"})(Ei||(Jt.TraceFormat=Ei={}));(function(e){function t(n){return lr.string(n)?(n=n.toLowerCase(),n==="json"?e.JSON:e.Text):e.Text}e.fromString=t})(Ei||(Jt.TraceFormat=Ei={}));var zp;(function(e){e.type=new qt.NotificationType("$/setTrace")})(zp||(Jt.SetTraceNotification=zp={}));var Bu;(function(e){e.type=new qt.NotificationType("$/logTrace")})(Bu||(Jt.LogTraceNotification=Bu={}));var wl;(function(e){e[e.Closed=1]="Closed",e[e.Disposed=2]="Disposed",e[e.AlreadyListening=3]="AlreadyListening"})(wl||(Jt.ConnectionErrors=wl={}));var ps=class e extends Error{constructor(t,n){super(n),this.code=t,Object.setPrototypeOf(this,e.prototype)}};Jt.ConnectionError=ps;var Bp;(function(e){function t(n){let r=n;return r&&lr.func(r.cancelUndispatched)}e.is=t})(Bp||(Jt.ConnectionStrategy=Bp={}));var qu;(function(e){function t(n){let r=n;return r&&(r.kind===void 0||r.kind==="id")&&lr.func(r.createCancellationTokenSource)&&(r.dispose===void 0||lr.func(r.dispose))}e.is=t})(qu||(Jt.IdCancellationReceiverStrategy=qu={}));var qp;(function(e){function t(n){let r=n;return r&&r.kind==="request"&&lr.func(r.createCancellationTokenSource)&&(r.dispose===void 0||lr.func(r.dispose))}e.is=t})(qp||(Jt.RequestCancellationReceiverStrategy=qp={}));var Gu;(function(e){e.Message=Object.freeze({createCancellationTokenSource(n){return new Rp.CancellationTokenSource}});function t(n){return qu.is(n)||qp.is(n)}e.is=t})(Gu||(Jt.CancellationReceiverStrategy=Gu={}));var Wu;(function(e){e.Message=Object.freeze({sendCancellation(n,r){return n.sendNotification(Fl.type,{id:r})},cleanup(n){}});function t(n){let r=n;return r&&lr.func(r.sendCancellation)&&lr.func(r.cleanup)}e.is=t})(Wu||(Jt.CancellationSenderStrategy=Wu={}));var ju;(function(e){e.Message=Object.freeze({receiver:Gu.Message,sender:Wu.Message});function t(n){let r=n;return r&&Gu.is(r.receiver)&&Wu.is(r.sender)}e.is=t})(ju||(Jt.CancellationStrategy=ju={}));var Hu;(function(e){function t(n){let r=n;return r&&lr.func(r.handleMessage)}e.is=t})(Hu||(Jt.MessageStrategy=Hu={}));var zy;(function(e){function t(n){let r=n;return r&&(ju.is(r.cancellationStrategy)||Bp.is(r.connectionStrategy)||Hu.is(r.messageStrategy))}e.is=t})(zy||(Jt.ConnectionOptions=zy={}));var Wi;(function(e){e[e.New=1]="New",e[e.Listening=2]="Listening",e[e.Closed=3]="Closed",e[e.Disposed=4]="Disposed"})(Wi||(Wi={}));function GL(e,t,n,r){let i=n!==void 0?n:Jt.NullLogger,o=0,a=0,s=0,l="2.0",u,c=new Map,f,_=new Map,p=new Map,d,v=new Py.LinkedMap,y=new Map,h=new Set,g=new Map,T=Cn.Off,E=Ei.Text,$,k=Wi.New,C=new Cl.Emitter,w=new Cl.Emitter,I=new Cl.Emitter,L=new Cl.Emitter,x=new Cl.Emitter,V=r&&r.cancellationStrategy?r.cancellationStrategy:ju.Message;function M(ee){if(ee===null)throw new Error("Can't send requests with id null since the response can't be correlated.");return"req-"+ee.toString()}function q(ee){return ee===null?"res-unknown-"+(++s).toString():"res-"+ee.toString()}function P(){return"not-"+(++a).toString()}function R(ee,W){qt.Message.isRequest(W)?ee.set(M(W.id),W):qt.Message.isResponse(W)?ee.set(q(W.id),W):ee.set(P(),W)}function te(ee){}function j(){return k===Wi.Listening}function Y(){return k===Wi.Closed}function le(){return k===Wi.Disposed}function Z(){(k===Wi.New||k===Wi.Listening)&&(k=Wi.Closed,w.fire(void 0))}function ce(ee){C.fire([ee,void 0,void 0])}function Te(ee){C.fire(ee)}e.onClose(Z),e.onError(ce),t.onClose(Z),t.onError(Te);function Se(){d||v.size===0||(d=(0,Oy.default)().timer.setImmediate(()=>{d=void 0,be()}))}function ge(ee){qt.Message.isRequest(ee)?ze(ee):qt.Message.isNotification(ee)?pe(ee):qt.Message.isResponse(ee)?We(ee):fe(ee)}function be(){if(v.size===0)return;let ee=v.shift();try{let W=r==null?void 0:r.messageStrategy;Hu.is(W)?W.handleMessage(ee,ge):ge(ee)}finally{Se()}}let De=ee=>{try{if(qt.Message.isNotification(ee)&&ee.method===Fl.type.method){let W=ee.params.id,oe=M(W),me=v.get(oe);if(qt.Message.isRequest(me)){let ye=r==null?void 0:r.connectionStrategy,he=ye&&ye.cancelUndispatched?ye.cancelUndispatched(me,te):void 0;if(he&&(he.error!==void 0||he.result!==void 0)){v.delete(oe),g.delete(W),he.id=me.id,Ze(he,ee.method,Date.now()),t.write(he).catch(()=>i.error("Sending response for canceled message failed."));return}}let de=g.get(W);if(de!==void 0){de.cancel(),It(ee);return}else h.add(W)}R(v,ee)}finally{Se()}};function ze(ee){if(le())return;function W(qe,Pe,ie){let ae={jsonrpc:l,id:ee.id};qe instanceof qt.ResponseError?ae.error=qe.toJson():ae.result=qe===void 0?null:qe,Ze(ae,Pe,ie),t.write(ae).catch(()=>i.error("Sending response failed."))}function oe(qe,Pe,ie){let ae={jsonrpc:l,id:ee.id,error:qe.toJson()};Ze(ae,Pe,ie),t.write(ae).catch(()=>i.error("Sending response failed."))}function me(qe,Pe,ie){qe===void 0&&(qe=null);let ae={jsonrpc:l,id:ee.id,result:qe};Ze(ae,Pe,ie),t.write(ae).catch(()=>i.error("Sending response failed."))}$t(ee);let de=c.get(ee.method),ye,he;de&&(ye=de.type,he=de.handler);let Be=Date.now();if(he||u){let qe=ee.id??String(Date.now()),Pe=qu.is(V.receiver)?V.receiver.createCancellationTokenSource(qe):V.receiver.createCancellationTokenSource(ee);ee.id!==null&&h.has(ee.id)&&Pe.cancel(),ee.id!==null&&g.set(qe,Pe);try{let ie;if(he)if(ee.params===void 0){if(ye!==void 0&&ye.numberOfParams!==0){oe(new qt.ResponseError(qt.ErrorCodes.InvalidParams,`Request ${ee.method} defines ${ye.numberOfParams} params but received none.`),ee.method,Be);return}ie=he(Pe.token)}else if(Array.isArray(ee.params)){if(ye!==void 0&&ye.parameterStructures===qt.ParameterStructures.byName){oe(new qt.ResponseError(qt.ErrorCodes.InvalidParams,`Request ${ee.method} defines parameters by name but received parameters by position`),ee.method,Be);return}ie=he(...ee.params,Pe.token)}else{if(ye!==void 0&&ye.parameterStructures===qt.ParameterStructures.byPosition){oe(new qt.ResponseError(qt.ErrorCodes.InvalidParams,`Request ${ee.method} defines parameters by position but received parameters by name`),ee.method,Be);return}ie=he(ee.params,Pe.token)}else u&&(ie=u(ee.method,ee.params,Pe.token));let ae=ie;ie?ae.then?ae.then(we=>{g.delete(qe),W(we,ee.method,Be)},we=>{g.delete(qe),we instanceof qt.ResponseError?oe(we,ee.method,Be):we&&lr.string(we.message)?oe(new qt.ResponseError(qt.ErrorCodes.InternalError,`Request ${ee.method} failed with message: ${we.message}`),ee.method,Be):oe(new qt.ResponseError(qt.ErrorCodes.InternalError,`Request ${ee.method} failed unexpectedly without providing any details.`),ee.method,Be)}):(g.delete(qe),W(ie,ee.method,Be)):(g.delete(qe),me(ie,ee.method,Be))}catch(ie){g.delete(qe),ie instanceof qt.ResponseError?W(ie,ee.method,Be):ie&&lr.string(ie.message)?oe(new qt.ResponseError(qt.ErrorCodes.InternalError,`Request ${ee.method} failed with message: ${ie.message}`),ee.method,Be):oe(new qt.ResponseError(qt.ErrorCodes.InternalError,`Request ${ee.method} failed unexpectedly without providing any details.`),ee.method,Be)}}else oe(new qt.ResponseError(qt.ErrorCodes.MethodNotFound,`Unhandled method ${ee.method}`),ee.method,Be)}function We(ee){if(!le())if(ee.id===null)ee.error?i.error(`Received response message without id: Error is:
7
7
  ${JSON.stringify(ee.error,void 0,4)}`):i.error("Received response message without id. No further error information provided.");else{let W=ee.id,oe=y.get(W);if(jt(ee,oe),oe!==void 0){y.delete(W);try{if(ee.error){let me=ee.error;oe.reject(new qt.ResponseError(me.code,me.message,me.data))}else if(ee.result!==void 0)oe.resolve(ee.result);else throw new Error("Should never happen.")}catch(me){me.message?i.error(`Response handler '${oe.method}' failed with message: ${me.message}`):i.error(`Response handler '${oe.method}' failed unexpectedly.`)}}}}function pe(ee){if(le())return;let W,oe;if(ee.method===Fl.type.method){let me=ee.params.id;h.delete(me),It(ee);return}else{let me=_.get(ee.method);me&&(oe=me.handler,W=me.type)}if(oe||f)try{if(It(ee),oe)if(ee.params===void 0)W!==void 0&&W.numberOfParams!==0&&W.parameterStructures!==qt.ParameterStructures.byName&&i.error(`Notification ${ee.method} defines ${W.numberOfParams} params but received none.`),oe();else if(Array.isArray(ee.params)){let me=ee.params;ee.method===kl.type.method&&me.length===2&&Op.is(me[0])?oe({token:me[0],value:me[1]}):(W!==void 0&&(W.parameterStructures===qt.ParameterStructures.byName&&i.error(`Notification ${ee.method} defines parameters by name but received parameters by position`),W.numberOfParams!==ee.params.length&&i.error(`Notification ${ee.method} defines ${W.numberOfParams} params but received ${me.length} arguments`)),oe(...me))}else W!==void 0&&W.parameterStructures===qt.ParameterStructures.byPosition&&i.error(`Notification ${ee.method} defines parameters by position but received parameters by name`),oe(ee.params);else f&&f(ee.method,ee.params)}catch(me){me.message?i.error(`Notification handler '${ee.method}' failed with message: ${me.message}`):i.error(`Notification handler '${ee.method}' failed unexpectedly.`)}else I.fire(ee)}function fe(ee){if(!ee){i.error("Received empty message.");return}i.error(`Received message which is neither a response nor a notification message:
8
8
  ${JSON.stringify(ee,null,4)}`);let W=ee;if(lr.string(W.id)||lr.number(W.id)){let oe=W.id,me=y.get(oe);me&&me.reject(new Error("The received response has neither a result nor an error property."))}}function $e(ee){if(ee!=null)switch(T){case Cn.Verbose:return JSON.stringify(ee,null,4);case Cn.Compact:return JSON.stringify(ee);default:return}}function Le(ee){if(!(T===Cn.Off||!$))if(E===Ei.Text){let W;(T===Cn.Verbose||T===Cn.Compact)&&ee.params&&(W=`Params: ${$e(ee.params)}
9
9
 
@@ -29,7 +29,7 @@ ${JSON.stringify(ee,null,4)}`);let W=ee;if(lr.string(W.id)||lr.number(W.id)){let
29
29
 
30
30
  `:ee.error===void 0&&(oe=`No result returned.
31
31
 
32
- `)),W){let me=ee.error?` Request failed: ${ee.error.message} (${ee.error.code}).`:"";$.log(`Received response '${W.method} - (${ee.id})' in ${Date.now()-W.timerStart}ms.${me}`,oe)}else $.log(`Received response ${ee.id} without active response promise.`,oe)}else st("receive-response",ee)}function st(ee,W){if(!$||T===Cn.Off)return;let oe={isLSPMessage:!0,type:ee,message:W,timestamp:Date.now()};$.log(oe)}function Ct(){if(Y())throw new ps(wl.Closed,"Connection is closed.");if(le())throw new ps(wl.Disposed,"Connection is disposed.")}function rn(){if(j())throw new ps(wl.AlreadyListening,"Connection is already listening")}function Bt(){if(!j())throw new Error("Call listen() first.")}function gt(ee){return ee===void 0?null:ee}function ut(ee){if(ee!==null)return ee}function Nt(ee){return ee!=null&&!Array.isArray(ee)&&typeof ee=="object"}function Yt(ee,W){switch(ee){case qt.ParameterStructures.auto:return Nt(W)?ut(W):[gt(W)];case qt.ParameterStructures.byName:if(!Nt(W))throw new Error("Received parameters by name but param is not an object literal.");return ut(W);case qt.ParameterStructures.byPosition:return[gt(W)];default:throw new Error(`Unknown parameter structure ${ee.toString()}`)}}function wt(ee,W){let oe,me=ee.numberOfParams;switch(me){case 0:oe=void 0;break;case 1:oe=Yt(ee.parameterStructures,W[0]);break;default:oe=[];for(let de=0;de<W.length&&de<me;de++)oe.push(gt(W[de]));if(W.length<me)for(let de=W.length;de<me;de++)oe.push(null);break}return oe}let Ft={sendNotification:(ee,...W)=>{Ct();let oe,me;if(lr.string(ee)){oe=ee;let ye=W[0],he=0,Be=qt.ParameterStructures.auto;qt.ParameterStructures.is(ye)&&(he=1,Be=ye);let qe=W.length,Pe=qe-he;switch(Pe){case 0:me=void 0;break;case 1:me=Yt(Be,W[he]);break;default:if(Be===qt.ParameterStructures.byName)throw new Error(`Received ${Pe} parameters for 'by Name' notification parameter structure.`);me=W.slice(he,qe).map(ie=>gt(ie));break}}else{let ye=W;oe=ee.method,me=wt(ee,ye)}let de={jsonrpc:l,method:oe,params:me};return Me(de),t.write(de).catch(ye=>{throw i.error("Sending notification failed."),ye})},onNotification:(ee,W)=>{Ct();let oe;return lr.func(ee)?f=ee:W&&(lr.string(ee)?(oe=ee,_.set(ee,{type:void 0,handler:W})):(oe=ee.method,_.set(ee.method,{type:ee,handler:W}))),{dispose:()=>{oe!==void 0?_.delete(oe):f=void 0}}},onProgress:(ee,W,oe)=>{if(p.has(W))throw new Error(`Progress handler for token ${W} already registered`);return p.set(W,oe),{dispose:()=>{p.delete(W)}}},sendProgress:(ee,W,oe)=>Ft.sendNotification(kl.type,{token:W,value:oe}),onUnhandledProgress:L.event,sendRequest:(ee,...W)=>{Ct(),Bt();let oe,me,de;if(lr.string(ee)){oe=ee;let qe=W[0],Pe=W[W.length-1],ie=0,ae=qt.ParameterStructures.auto;qt.ParameterStructures.is(qe)&&(ie=1,ae=qe);let we=W.length;Rp.CancellationToken.is(Pe)&&(we=we-1,de=Pe);let Ne=we-ie;switch(Ne){case 0:me=void 0;break;case 1:me=Yt(ae,W[ie]);break;default:if(ae===qt.ParameterStructures.byName)throw new Error(`Received ${Ne} parameters for 'by Name' request parameter structure.`);me=W.slice(ie,we).map(tt=>gt(tt));break}}else{let qe=W;oe=ee.method,me=wt(ee,qe);let Pe=ee.numberOfParams;de=Rp.CancellationToken.is(qe[Pe])?qe[Pe]:void 0}let ye=o++,he;de&&(he=de.onCancellationRequested(()=>{let qe=V.sender.sendCancellation(Ft,ye);return qe===void 0?(i.log(`Received no promise from cancellation strategy when cancelling id ${ye}`),Promise.resolve()):qe.catch(()=>{i.log(`Sending cancellation messages for id ${ye} failed`)})}));let Be={jsonrpc:l,id:ye,method:oe,params:me};return Le(Be),typeof V.sender.enableCancellation=="function"&&V.sender.enableCancellation(Be),new Promise(async(qe,Pe)=>{let ie=Ne=>{qe(Ne),V.sender.cleanup(ye),he==null||he.dispose()},ae=Ne=>{Pe(Ne),V.sender.cleanup(ye),he==null||he.dispose()},we={method:oe,timerStart:Date.now(),resolve:ie,reject:ae};try{await t.write(Be),y.set(ye,we)}catch(Ne){throw i.error("Sending request failed."),we.reject(new qt.ResponseError(qt.ErrorCodes.MessageWriteError,Ne.message?Ne.message:"Unknown reason")),Ne}})},onRequest:(ee,W)=>{Ct();let oe=null;return Up.is(ee)?(oe=void 0,u=ee):lr.string(ee)?(oe=null,W!==void 0&&(oe=ee,c.set(ee,{handler:W,type:void 0}))):W!==void 0&&(oe=ee.method,c.set(ee.method,{type:ee,handler:W})),{dispose:()=>{oe!==null&&(oe!==void 0?c.delete(oe):u=void 0)}}},hasPendingResponse:()=>y.size>0,trace:async(ee,W,oe)=>{let me=!1,de=Ei.Text;oe!==void 0&&(lr.boolean(oe)?me=oe:(me=oe.sendNotification||!1,de=oe.traceFormat||Ei.Text)),T=ee,E=de,T===Cn.Off?$=void 0:$=W,me&&!Y()&&!le()&&await Ft.sendNotification(zp.type,{value:Cn.toString(ee)})},onError:C.event,onClose:w.event,onUnhandledNotification:I.event,onDispose:x.event,end:()=>{t.end()},dispose:()=>{if(le())return;k=Wi.Disposed,x.fire(void 0);let ee=new qt.ResponseError(qt.ErrorCodes.PendingResponseRejected,"Pending response rejected since connection got disposed");for(let W of y.values())W.reject(ee);y=new Map,g=new Map,h=new Set,v=new Py.LinkedMap,lr.func(t.dispose)&&t.dispose(),lr.func(e.dispose)&&e.dispose()},listen:()=>{Ct(),rn(),k=Wi.Listening,e.listen(De)},inspect:()=>{(0,Oy.default)().console.log("inspect")}};return Ft.onNotification(Bu.type,ee=>{if(T===Cn.Off||!$)return;let W=T===Cn.Verbose||T===Cn.Compact;$.log(ee.message,W?ee.verbose:void 0)}),Ft.onNotification(kl.type,ee=>{let W=p.get(ee.token);W?W(ee.value):L.fire(ee)}),Ft}Jt.createMessageConnection=GL});var Yu=dt(Re=>{"use strict";Object.defineProperty(Re,"__esModule",{value:!0});Re.ProgressType=Re.ProgressToken=Re.createMessageConnection=Re.NullLogger=Re.ConnectionOptions=Re.ConnectionStrategy=Re.AbstractMessageBuffer=Re.WriteableStreamMessageWriter=Re.AbstractMessageWriter=Re.MessageWriter=Re.ReadableStreamMessageReader=Re.AbstractMessageReader=Re.MessageReader=Re.SharedArrayReceiverStrategy=Re.SharedArraySenderStrategy=Re.CancellationToken=Re.CancellationTokenSource=Re.Emitter=Re.Event=Re.Disposable=Re.LRUCache=Re.Touch=Re.LinkedMap=Re.ParameterStructures=Re.NotificationType9=Re.NotificationType8=Re.NotificationType7=Re.NotificationType6=Re.NotificationType5=Re.NotificationType4=Re.NotificationType3=Re.NotificationType2=Re.NotificationType1=Re.NotificationType0=Re.NotificationType=Re.ErrorCodes=Re.ResponseError=Re.RequestType9=Re.RequestType8=Re.RequestType7=Re.RequestType6=Re.RequestType5=Re.RequestType4=Re.RequestType3=Re.RequestType2=Re.RequestType1=Re.RequestType0=Re.RequestType=Re.Message=Re.RAL=void 0;Re.MessageStrategy=Re.CancellationStrategy=Re.CancellationSenderStrategy=Re.CancellationReceiverStrategy=Re.ConnectionError=Re.ConnectionErrors=Re.LogTraceNotification=Re.SetTraceNotification=Re.TraceFormat=Re.TraceValues=Re.Trace=void 0;var Bn=mp();Object.defineProperty(Re,"Message",{enumerable:!0,get:function(){return Bn.Message}});Object.defineProperty(Re,"RequestType",{enumerable:!0,get:function(){return Bn.RequestType}});Object.defineProperty(Re,"RequestType0",{enumerable:!0,get:function(){return Bn.RequestType0}});Object.defineProperty(Re,"RequestType1",{enumerable:!0,get:function(){return Bn.RequestType1}});Object.defineProperty(Re,"RequestType2",{enumerable:!0,get:function(){return Bn.RequestType2}});Object.defineProperty(Re,"RequestType3",{enumerable:!0,get:function(){return Bn.RequestType3}});Object.defineProperty(Re,"RequestType4",{enumerable:!0,get:function(){return Bn.RequestType4}});Object.defineProperty(Re,"RequestType5",{enumerable:!0,get:function(){return Bn.RequestType5}});Object.defineProperty(Re,"RequestType6",{enumerable:!0,get:function(){return Bn.RequestType6}});Object.defineProperty(Re,"RequestType7",{enumerable:!0,get:function(){return Bn.RequestType7}});Object.defineProperty(Re,"RequestType8",{enumerable:!0,get:function(){return Bn.RequestType8}});Object.defineProperty(Re,"RequestType9",{enumerable:!0,get:function(){return Bn.RequestType9}});Object.defineProperty(Re,"ResponseError",{enumerable:!0,get:function(){return Bn.ResponseError}});Object.defineProperty(Re,"ErrorCodes",{enumerable:!0,get:function(){return Bn.ErrorCodes}});Object.defineProperty(Re,"NotificationType",{enumerable:!0,get:function(){return Bn.NotificationType}});Object.defineProperty(Re,"NotificationType0",{enumerable:!0,get:function(){return Bn.NotificationType0}});Object.defineProperty(Re,"NotificationType1",{enumerable:!0,get:function(){return Bn.NotificationType1}});Object.defineProperty(Re,"NotificationType2",{enumerable:!0,get:function(){return Bn.NotificationType2}});Object.defineProperty(Re,"NotificationType3",{enumerable:!0,get:function(){return Bn.NotificationType3}});Object.defineProperty(Re,"NotificationType4",{enumerable:!0,get:function(){return Bn.NotificationType4}});Object.defineProperty(Re,"NotificationType5",{enumerable:!0,get:function(){return Bn.NotificationType5}});Object.defineProperty(Re,"NotificationType6",{enumerable:!0,get:function(){return Bn.NotificationType6}});Object.defineProperty(Re,"NotificationType7",{enumerable:!0,get:function(){return Bn.NotificationType7}});Object.defineProperty(Re,"NotificationType8",{enumerable:!0,get:function(){return Bn.NotificationType8}});Object.defineProperty(Re,"NotificationType9",{enumerable:!0,get:function(){return Bn.NotificationType9}});Object.defineProperty(Re,"ParameterStructures",{enumerable:!0,get:function(){return Bn.ParameterStructures}});var Gp=gp();Object.defineProperty(Re,"LinkedMap",{enumerable:!0,get:function(){return Gp.LinkedMap}});Object.defineProperty(Re,"LRUCache",{enumerable:!0,get:function(){return Gp.LRUCache}});Object.defineProperty(Re,"Touch",{enumerable:!0,get:function(){return Gp.Touch}});var WL=Fy();Object.defineProperty(Re,"Disposable",{enumerable:!0,get:function(){return WL.Disposable}});var qy=us();Object.defineProperty(Re,"Event",{enumerable:!0,get:function(){return qy.Event}});Object.defineProperty(Re,"Emitter",{enumerable:!0,get:function(){return qy.Emitter}});var Gy=Ru();Object.defineProperty(Re,"CancellationTokenSource",{enumerable:!0,get:function(){return Gy.CancellationTokenSource}});Object.defineProperty(Re,"CancellationToken",{enumerable:!0,get:function(){return Gy.CancellationToken}});var Wy=Iy();Object.defineProperty(Re,"SharedArraySenderStrategy",{enumerable:!0,get:function(){return Wy.SharedArraySenderStrategy}});Object.defineProperty(Re,"SharedArrayReceiverStrategy",{enumerable:!0,get:function(){return Wy.SharedArrayReceiverStrategy}});var Wp=Ay();Object.defineProperty(Re,"MessageReader",{enumerable:!0,get:function(){return Wp.MessageReader}});Object.defineProperty(Re,"AbstractMessageReader",{enumerable:!0,get:function(){return Wp.AbstractMessageReader}});Object.defineProperty(Re,"ReadableStreamMessageReader",{enumerable:!0,get:function(){return Wp.ReadableStreamMessageReader}});var jp=My();Object.defineProperty(Re,"MessageWriter",{enumerable:!0,get:function(){return jp.MessageWriter}});Object.defineProperty(Re,"AbstractMessageWriter",{enumerable:!0,get:function(){return jp.AbstractMessageWriter}});Object.defineProperty(Re,"WriteableStreamMessageWriter",{enumerable:!0,get:function(){return jp.WriteableStreamMessageWriter}});var jL=Ry();Object.defineProperty(Re,"AbstractMessageBuffer",{enumerable:!0,get:function(){return jL.AbstractMessageBuffer}});var zr=By();Object.defineProperty(Re,"ConnectionStrategy",{enumerable:!0,get:function(){return zr.ConnectionStrategy}});Object.defineProperty(Re,"ConnectionOptions",{enumerable:!0,get:function(){return zr.ConnectionOptions}});Object.defineProperty(Re,"NullLogger",{enumerable:!0,get:function(){return zr.NullLogger}});Object.defineProperty(Re,"createMessageConnection",{enumerable:!0,get:function(){return zr.createMessageConnection}});Object.defineProperty(Re,"ProgressToken",{enumerable:!0,get:function(){return zr.ProgressToken}});Object.defineProperty(Re,"ProgressType",{enumerable:!0,get:function(){return zr.ProgressType}});Object.defineProperty(Re,"Trace",{enumerable:!0,get:function(){return zr.Trace}});Object.defineProperty(Re,"TraceValues",{enumerable:!0,get:function(){return zr.TraceValues}});Object.defineProperty(Re,"TraceFormat",{enumerable:!0,get:function(){return zr.TraceFormat}});Object.defineProperty(Re,"SetTraceNotification",{enumerable:!0,get:function(){return zr.SetTraceNotification}});Object.defineProperty(Re,"LogTraceNotification",{enumerable:!0,get:function(){return zr.LogTraceNotification}});Object.defineProperty(Re,"ConnectionErrors",{enumerable:!0,get:function(){return zr.ConnectionErrors}});Object.defineProperty(Re,"ConnectionError",{enumerable:!0,get:function(){return zr.ConnectionError}});Object.defineProperty(Re,"CancellationReceiverStrategy",{enumerable:!0,get:function(){return zr.CancellationReceiverStrategy}});Object.defineProperty(Re,"CancellationSenderStrategy",{enumerable:!0,get:function(){return zr.CancellationSenderStrategy}});Object.defineProperty(Re,"CancellationStrategy",{enumerable:!0,get:function(){return zr.CancellationStrategy}});Object.defineProperty(Re,"MessageStrategy",{enumerable:!0,get:function(){return zr.MessageStrategy}});var HL=Ko();Re.RAL=HL.default});var Yy=dt(Xp=>{"use strict";Object.defineProperty(Xp,"__esModule",{value:!0});var jy=require("util"),Fo=Yu(),Ku=class e extends Fo.AbstractMessageBuffer{constructor(t="utf-8"){super(t)}emptyBuffer(){return e.emptyBuffer}fromString(t,n){return Buffer.from(t,n)}toString(t,n){return t instanceof Buffer?t.toString(n):new jy.TextDecoder(n).decode(t)}asNative(t,n){return n===void 0?t instanceof Buffer?t:Buffer.from(t):t instanceof Buffer?t.slice(0,n):Buffer.from(t,0,n)}allocNative(t){return Buffer.allocUnsafe(t)}};Ku.emptyBuffer=Buffer.allocUnsafe(0);var Hp=class{constructor(t){this.stream=t}onClose(t){return this.stream.on("close",t),Fo.Disposable.create(()=>this.stream.off("close",t))}onError(t){return this.stream.on("error",t),Fo.Disposable.create(()=>this.stream.off("error",t))}onEnd(t){return this.stream.on("end",t),Fo.Disposable.create(()=>this.stream.off("end",t))}onData(t){return this.stream.on("data",t),Fo.Disposable.create(()=>this.stream.off("data",t))}},Yp=class{constructor(t){this.stream=t}onClose(t){return this.stream.on("close",t),Fo.Disposable.create(()=>this.stream.off("close",t))}onError(t){return this.stream.on("error",t),Fo.Disposable.create(()=>this.stream.off("error",t))}onEnd(t){return this.stream.on("end",t),Fo.Disposable.create(()=>this.stream.off("end",t))}write(t,n){return new Promise((r,i)=>{let o=a=>{a==null?r():i(a)};typeof t=="string"?this.stream.write(t,n,o):this.stream.write(t,o)})}end(){this.stream.end()}},Hy=Object.freeze({messageBuffer:Object.freeze({create:e=>new Ku(e)}),applicationJson:Object.freeze({encoder:Object.freeze({name:"application/json",encode:(e,t)=>{try{return Promise.resolve(Buffer.from(JSON.stringify(e,void 0,0),t.charset))}catch(n){return Promise.reject(n)}}}),decoder:Object.freeze({name:"application/json",decode:(e,t)=>{try{return e instanceof Buffer?Promise.resolve(JSON.parse(e.toString(t.charset))):Promise.resolve(JSON.parse(new jy.TextDecoder(t.charset).decode(e)))}catch(n){return Promise.reject(n)}}})}),stream:Object.freeze({asReadableStream:e=>new Hp(e),asWritableStream:e=>new Yp(e)}),console,timer:Object.freeze({setTimeout(e,t,...n){let r=setTimeout(e,t,...n);return{dispose:()=>clearTimeout(r)}},setImmediate(e,...t){let n=setImmediate(e,...t);return{dispose:()=>clearImmediate(n)}},setInterval(e,t,...n){let r=setInterval(e,t,...n);return{dispose:()=>clearInterval(r)}}})});function Kp(){return Hy}(function(e){function t(){Fo.RAL.install(Hy)}e.install=t})(Kp||(Kp={}));Xp.default=Kp});var La=dt(mn=>{"use strict";var YL=mn&&mn.__createBinding||(Object.create?function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}:function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]}),KL=mn&&mn.__exportStar||function(e,t){for(var n in e)n!=="default"&&!Object.prototype.hasOwnProperty.call(t,n)&&YL(t,e,n)};Object.defineProperty(mn,"__esModule",{value:!0});mn.createMessageConnection=mn.createServerSocketTransport=mn.createClientSocketTransport=mn.createServerPipeTransport=mn.createClientPipeTransport=mn.generateRandomPipeName=mn.StreamMessageWriter=mn.StreamMessageReader=mn.SocketMessageWriter=mn.SocketMessageReader=mn.PortMessageWriter=mn.PortMessageReader=mn.IPCMessageWriter=mn.IPCMessageReader=void 0;var ds=Yy();ds.default.install();var Ky=require("path"),XL=require("os"),QL=require("crypto"),Ju=require("net"),$i=Yu();KL(Yu(),mn);var Qp=class extends $i.AbstractMessageReader{constructor(t){super(),this.process=t;let n=this.process;n.on("error",r=>this.fireError(r)),n.on("close",()=>this.fireClose())}listen(t){return this.process.on("message",t),$i.Disposable.create(()=>this.process.off("message",t))}};mn.IPCMessageReader=Qp;var Jp=class extends $i.AbstractMessageWriter{constructor(t){super(),this.process=t,this.errorCount=0;let n=this.process;n.on("error",r=>this.fireError(r)),n.on("close",()=>this.fireClose)}write(t){try{return typeof this.process.send=="function"&&this.process.send(t,void 0,void 0,n=>{n?(this.errorCount++,this.handleError(n,t)):this.errorCount=0}),Promise.resolve()}catch(n){return this.handleError(n,t),Promise.reject(n)}}handleError(t,n){this.errorCount++,this.fireError(t,n,this.errorCount)}end(){}};mn.IPCMessageWriter=Jp;var Zp=class extends $i.AbstractMessageReader{constructor(t){super(),this.onData=new $i.Emitter,t.on("close",()=>this.fireClose),t.on("error",n=>this.fireError(n)),t.on("message",n=>{this.onData.fire(n)})}listen(t){return this.onData.event(t)}};mn.PortMessageReader=Zp;var ed=class extends $i.AbstractMessageWriter{constructor(t){super(),this.port=t,this.errorCount=0,t.on("close",()=>this.fireClose()),t.on("error",n=>this.fireError(n))}write(t){try{return this.port.postMessage(t),Promise.resolve()}catch(n){return this.handleError(n,t),Promise.reject(n)}}handleError(t,n){this.errorCount++,this.fireError(t,n,this.errorCount)}end(){}};mn.PortMessageWriter=ed;var wa=class extends $i.ReadableStreamMessageReader{constructor(t,n="utf-8"){super((0,ds.default)().stream.asReadableStream(t),n)}};mn.SocketMessageReader=wa;var Fa=class extends $i.WriteableStreamMessageWriter{constructor(t,n){super((0,ds.default)().stream.asWritableStream(t),n),this.socket=t}dispose(){super.dispose(),this.socket.destroy()}};mn.SocketMessageWriter=Fa;var Xu=class extends $i.ReadableStreamMessageReader{constructor(t,n){super((0,ds.default)().stream.asReadableStream(t),n)}};mn.StreamMessageReader=Xu;var Qu=class extends $i.WriteableStreamMessageWriter{constructor(t,n){super((0,ds.default)().stream.asWritableStream(t),n)}};mn.StreamMessageWriter=Qu;var Xy=process.env.XDG_RUNTIME_DIR,JL=new Map([["linux",107],["darwin",103]]);function ZL(){let e=(0,QL.randomBytes)(21).toString("hex");if(process.platform==="win32")return`\\\\.\\pipe\\vscode-jsonrpc-${e}-sock`;let t;Xy?t=Ky.join(Xy,`vscode-ipc-${e}.sock`):t=Ky.join(XL.tmpdir(),`vscode-${e}.sock`);let n=JL.get(process.platform);return n!==void 0&&t.length>n&&(0,ds.default)().console.warn(`WARNING: IPC handle "${t}" is longer than ${n} characters.`),t}mn.generateRandomPipeName=ZL;function eI(e,t="utf-8"){let n,r=new Promise((i,o)=>{n=i});return new Promise((i,o)=>{let a=(0,Ju.createServer)(s=>{a.close(),n([new wa(s,t),new Fa(s,t)])});a.on("error",o),a.listen(e,()=>{a.removeListener("error",o),i({onConnected:()=>r})})})}mn.createClientPipeTransport=eI;function tI(e,t="utf-8"){let n=(0,Ju.createConnection)(e);return[new wa(n,t),new Fa(n,t)]}mn.createServerPipeTransport=tI;function nI(e,t="utf-8"){let n,r=new Promise((i,o)=>{n=i});return new Promise((i,o)=>{let a=(0,Ju.createServer)(s=>{a.close(),n([new wa(s,t),new Fa(s,t)])});a.on("error",o),a.listen(e,"127.0.0.1",()=>{a.removeListener("error",o),i({onConnected:()=>r})})})}mn.createClientSocketTransport=nI;function rI(e,t="utf-8"){let n=(0,Ju.createConnection)(e,"127.0.0.1");return[new wa(n,t),new Fa(n,t)]}mn.createServerSocketTransport=rI;function iI(e){let t=e;return t.read!==void 0&&t.addListener!==void 0}function oI(e){let t=e;return t.write!==void 0&&t.addListener!==void 0}function aI(e,t,n,r){n||(n=$i.NullLogger);let i=iI(e)?new Xu(e):e,o=oI(t)?new Qu(t):t;return $i.ConnectionStrategy.is(r)&&(r={connectionStrategy:r}),(0,$i.createMessageConnection)(i,o,n,r)}mn.createMessageConnection=aI});var td=dt((ND,Qy)=>{"use strict";Qy.exports=La()});var ec=dt((Jy,Zu)=>{(function(e){if(typeof Zu=="object"&&typeof Zu.exports=="object"){var t=e(require,Jy);t!==void 0&&(Zu.exports=t)}else typeof define=="function"&&define.amd&&define(["require","exports"],e)})(function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TextDocument=t.EOL=t.WorkspaceFolder=t.InlineCompletionContext=t.SelectedCompletionInfo=t.InlineCompletionTriggerKind=t.InlineCompletionList=t.InlineCompletionItem=t.StringValue=t.InlayHint=t.InlayHintLabelPart=t.InlayHintKind=t.InlineValueContext=t.InlineValueEvaluatableExpression=t.InlineValueVariableLookup=t.InlineValueText=t.SemanticTokens=t.SemanticTokenModifiers=t.SemanticTokenTypes=t.SelectionRange=t.DocumentLink=t.FormattingOptions=t.CodeLens=t.CodeAction=t.CodeActionContext=t.CodeActionTriggerKind=t.CodeActionKind=t.DocumentSymbol=t.WorkspaceSymbol=t.SymbolInformation=t.SymbolTag=t.SymbolKind=t.DocumentHighlight=t.DocumentHighlightKind=t.SignatureInformation=t.ParameterInformation=t.Hover=t.MarkedString=t.CompletionList=t.CompletionItem=t.CompletionItemLabelDetails=t.InsertTextMode=t.InsertReplaceEdit=t.CompletionItemTag=t.InsertTextFormat=t.CompletionItemKind=t.MarkupContent=t.MarkupKind=t.TextDocumentItem=t.OptionalVersionedTextDocumentIdentifier=t.VersionedTextDocumentIdentifier=t.TextDocumentIdentifier=t.WorkspaceChange=t.WorkspaceEdit=t.DeleteFile=t.RenameFile=t.CreateFile=t.TextDocumentEdit=t.AnnotatedTextEdit=t.ChangeAnnotationIdentifier=t.ChangeAnnotation=t.TextEdit=t.Command=t.Diagnostic=t.CodeDescription=t.DiagnosticTag=t.DiagnosticSeverity=t.DiagnosticRelatedInformation=t.FoldingRange=t.FoldingRangeKind=t.ColorPresentation=t.ColorInformation=t.Color=t.LocationLink=t.Location=t.Range=t.Position=t.uinteger=t.integer=t.URI=t.DocumentUri=void 0;var n;(function(N){function K(G){return typeof G=="string"}N.is=K})(n||(t.DocumentUri=n={}));var r;(function(N){function K(G){return typeof G=="string"}N.is=K})(r||(t.URI=r={}));var i;(function(N){N.MIN_VALUE=-2147483648,N.MAX_VALUE=2147483647;function K(G){return typeof G=="number"&&N.MIN_VALUE<=G&&G<=N.MAX_VALUE}N.is=K})(i||(t.integer=i={}));var o;(function(N){N.MIN_VALUE=0,N.MAX_VALUE=2147483647;function K(G){return typeof G=="number"&&N.MIN_VALUE<=G&&G<=N.MAX_VALUE}N.is=K})(o||(t.uinteger=o={}));var a;(function(N){function K(z,D){return z===Number.MAX_VALUE&&(z=o.MAX_VALUE),D===Number.MAX_VALUE&&(D=o.MAX_VALUE),{line:z,character:D}}N.create=K;function G(z){var D=z;return re.objectLiteral(D)&&re.uinteger(D.line)&&re.uinteger(D.character)}N.is=G})(a||(t.Position=a={}));var s;(function(N){function K(z,D,ue,Fe){if(re.uinteger(z)&&re.uinteger(D)&&re.uinteger(ue)&&re.uinteger(Fe))return{start:a.create(z,D),end:a.create(ue,Fe)};if(a.is(z)&&a.is(D))return{start:z,end:D};throw new Error("Range#create called with invalid arguments[".concat(z,", ").concat(D,", ").concat(ue,", ").concat(Fe,"]"))}N.create=K;function G(z){var D=z;return re.objectLiteral(D)&&a.is(D.start)&&a.is(D.end)}N.is=G})(s||(t.Range=s={}));var l;(function(N){function K(z,D){return{uri:z,range:D}}N.create=K;function G(z){var D=z;return re.objectLiteral(D)&&s.is(D.range)&&(re.string(D.uri)||re.undefined(D.uri))}N.is=G})(l||(t.Location=l={}));var u;(function(N){function K(z,D,ue,Fe){return{targetUri:z,targetRange:D,targetSelectionRange:ue,originSelectionRange:Fe}}N.create=K;function G(z){var D=z;return re.objectLiteral(D)&&s.is(D.targetRange)&&re.string(D.targetUri)&&s.is(D.targetSelectionRange)&&(s.is(D.originSelectionRange)||re.undefined(D.originSelectionRange))}N.is=G})(u||(t.LocationLink=u={}));var c;(function(N){function K(z,D,ue,Fe){return{red:z,green:D,blue:ue,alpha:Fe}}N.create=K;function G(z){var D=z;return re.objectLiteral(D)&&re.numberRange(D.red,0,1)&&re.numberRange(D.green,0,1)&&re.numberRange(D.blue,0,1)&&re.numberRange(D.alpha,0,1)}N.is=G})(c||(t.Color=c={}));var f;(function(N){function K(z,D){return{range:z,color:D}}N.create=K;function G(z){var D=z;return re.objectLiteral(D)&&s.is(D.range)&&c.is(D.color)}N.is=G})(f||(t.ColorInformation=f={}));var _;(function(N){function K(z,D,ue){return{label:z,textEdit:D,additionalTextEdits:ue}}N.create=K;function G(z){var D=z;return re.objectLiteral(D)&&re.string(D.label)&&(re.undefined(D.textEdit)||$.is(D))&&(re.undefined(D.additionalTextEdits)||re.typedArray(D.additionalTextEdits,$.is))}N.is=G})(_||(t.ColorPresentation=_={}));var p;(function(N){N.Comment="comment",N.Imports="imports",N.Region="region"})(p||(t.FoldingRangeKind=p={}));var d;(function(N){function K(z,D,ue,Fe,nt,St){var At={startLine:z,endLine:D};return re.defined(ue)&&(At.startCharacter=ue),re.defined(Fe)&&(At.endCharacter=Fe),re.defined(nt)&&(At.kind=nt),re.defined(St)&&(At.collapsedText=St),At}N.create=K;function G(z){var D=z;return re.objectLiteral(D)&&re.uinteger(D.startLine)&&re.uinteger(D.startLine)&&(re.undefined(D.startCharacter)||re.uinteger(D.startCharacter))&&(re.undefined(D.endCharacter)||re.uinteger(D.endCharacter))&&(re.undefined(D.kind)||re.string(D.kind))}N.is=G})(d||(t.FoldingRange=d={}));var v;(function(N){function K(z,D){return{location:z,message:D}}N.create=K;function G(z){var D=z;return re.defined(D)&&l.is(D.location)&&re.string(D.message)}N.is=G})(v||(t.DiagnosticRelatedInformation=v={}));var y;(function(N){N.Error=1,N.Warning=2,N.Information=3,N.Hint=4})(y||(t.DiagnosticSeverity=y={}));var h;(function(N){N.Unnecessary=1,N.Deprecated=2})(h||(t.DiagnosticTag=h={}));var g;(function(N){function K(G){var z=G;return re.objectLiteral(z)&&re.string(z.href)}N.is=K})(g||(t.CodeDescription=g={}));var T;(function(N){function K(z,D,ue,Fe,nt,St){var At={range:z,message:D};return re.defined(ue)&&(At.severity=ue),re.defined(Fe)&&(At.code=Fe),re.defined(nt)&&(At.source=nt),re.defined(St)&&(At.relatedInformation=St),At}N.create=K;function G(z){var D,ue=z;return re.defined(ue)&&s.is(ue.range)&&re.string(ue.message)&&(re.number(ue.severity)||re.undefined(ue.severity))&&(re.integer(ue.code)||re.string(ue.code)||re.undefined(ue.code))&&(re.undefined(ue.codeDescription)||re.string((D=ue.codeDescription)===null||D===void 0?void 0:D.href))&&(re.string(ue.source)||re.undefined(ue.source))&&(re.undefined(ue.relatedInformation)||re.typedArray(ue.relatedInformation,v.is))}N.is=G})(T||(t.Diagnostic=T={}));var E;(function(N){function K(z,D){for(var ue=[],Fe=2;Fe<arguments.length;Fe++)ue[Fe-2]=arguments[Fe];var nt={title:z,command:D};return re.defined(ue)&&ue.length>0&&(nt.arguments=ue),nt}N.create=K;function G(z){var D=z;return re.defined(D)&&re.string(D.title)&&re.string(D.command)}N.is=G})(E||(t.Command=E={}));var $;(function(N){function K(ue,Fe){return{range:ue,newText:Fe}}N.replace=K;function G(ue,Fe){return{range:{start:ue,end:ue},newText:Fe}}N.insert=G;function z(ue){return{range:ue,newText:""}}N.del=z;function D(ue){var Fe=ue;return re.objectLiteral(Fe)&&re.string(Fe.newText)&&s.is(Fe.range)}N.is=D})($||(t.TextEdit=$={}));var k;(function(N){function K(z,D,ue){var Fe={label:z};return D!==void 0&&(Fe.needsConfirmation=D),ue!==void 0&&(Fe.description=ue),Fe}N.create=K;function G(z){var D=z;return re.objectLiteral(D)&&re.string(D.label)&&(re.boolean(D.needsConfirmation)||D.needsConfirmation===void 0)&&(re.string(D.description)||D.description===void 0)}N.is=G})(k||(t.ChangeAnnotation=k={}));var C;(function(N){function K(G){var z=G;return re.string(z)}N.is=K})(C||(t.ChangeAnnotationIdentifier=C={}));var w;(function(N){function K(ue,Fe,nt){return{range:ue,newText:Fe,annotationId:nt}}N.replace=K;function G(ue,Fe,nt){return{range:{start:ue,end:ue},newText:Fe,annotationId:nt}}N.insert=G;function z(ue,Fe){return{range:ue,newText:"",annotationId:Fe}}N.del=z;function D(ue){var Fe=ue;return $.is(Fe)&&(k.is(Fe.annotationId)||C.is(Fe.annotationId))}N.is=D})(w||(t.AnnotatedTextEdit=w={}));var I;(function(N){function K(z,D){return{textDocument:z,edits:D}}N.create=K;function G(z){var D=z;return re.defined(D)&&Y.is(D.textDocument)&&Array.isArray(D.edits)}N.is=G})(I||(t.TextDocumentEdit=I={}));var L;(function(N){function K(z,D,ue){var Fe={kind:"create",uri:z};return D!==void 0&&(D.overwrite!==void 0||D.ignoreIfExists!==void 0)&&(Fe.options=D),ue!==void 0&&(Fe.annotationId=ue),Fe}N.create=K;function G(z){var D=z;return D&&D.kind==="create"&&re.string(D.uri)&&(D.options===void 0||(D.options.overwrite===void 0||re.boolean(D.options.overwrite))&&(D.options.ignoreIfExists===void 0||re.boolean(D.options.ignoreIfExists)))&&(D.annotationId===void 0||C.is(D.annotationId))}N.is=G})(L||(t.CreateFile=L={}));var x;(function(N){function K(z,D,ue,Fe){var nt={kind:"rename",oldUri:z,newUri:D};return ue!==void 0&&(ue.overwrite!==void 0||ue.ignoreIfExists!==void 0)&&(nt.options=ue),Fe!==void 0&&(nt.annotationId=Fe),nt}N.create=K;function G(z){var D=z;return D&&D.kind==="rename"&&re.string(D.oldUri)&&re.string(D.newUri)&&(D.options===void 0||(D.options.overwrite===void 0||re.boolean(D.options.overwrite))&&(D.options.ignoreIfExists===void 0||re.boolean(D.options.ignoreIfExists)))&&(D.annotationId===void 0||C.is(D.annotationId))}N.is=G})(x||(t.RenameFile=x={}));var V;(function(N){function K(z,D,ue){var Fe={kind:"delete",uri:z};return D!==void 0&&(D.recursive!==void 0||D.ignoreIfNotExists!==void 0)&&(Fe.options=D),ue!==void 0&&(Fe.annotationId=ue),Fe}N.create=K;function G(z){var D=z;return D&&D.kind==="delete"&&re.string(D.uri)&&(D.options===void 0||(D.options.recursive===void 0||re.boolean(D.options.recursive))&&(D.options.ignoreIfNotExists===void 0||re.boolean(D.options.ignoreIfNotExists)))&&(D.annotationId===void 0||C.is(D.annotationId))}N.is=G})(V||(t.DeleteFile=V={}));var M;(function(N){function K(G){var z=G;return z&&(z.changes!==void 0||z.documentChanges!==void 0)&&(z.documentChanges===void 0||z.documentChanges.every(function(D){return re.string(D.kind)?L.is(D)||x.is(D)||V.is(D):I.is(D)}))}N.is=K})(M||(t.WorkspaceEdit=M={}));var q=function(){function N(K,G){this.edits=K,this.changeAnnotations=G}return N.prototype.insert=function(K,G,z){var D,ue;if(z===void 0?D=$.insert(K,G):C.is(z)?(ue=z,D=w.insert(K,G,z)):(this.assertChangeAnnotations(this.changeAnnotations),ue=this.changeAnnotations.manage(z),D=w.insert(K,G,ue)),this.edits.push(D),ue!==void 0)return ue},N.prototype.replace=function(K,G,z){var D,ue;if(z===void 0?D=$.replace(K,G):C.is(z)?(ue=z,D=w.replace(K,G,z)):(this.assertChangeAnnotations(this.changeAnnotations),ue=this.changeAnnotations.manage(z),D=w.replace(K,G,ue)),this.edits.push(D),ue!==void 0)return ue},N.prototype.delete=function(K,G){var z,D;if(G===void 0?z=$.del(K):C.is(G)?(D=G,z=w.del(K,G)):(this.assertChangeAnnotations(this.changeAnnotations),D=this.changeAnnotations.manage(G),z=w.del(K,D)),this.edits.push(z),D!==void 0)return D},N.prototype.add=function(K){this.edits.push(K)},N.prototype.all=function(){return this.edits},N.prototype.clear=function(){this.edits.splice(0,this.edits.length)},N.prototype.assertChangeAnnotations=function(K){if(K===void 0)throw new Error("Text edit change is not configured to manage change annotations.")},N}(),P=function(){function N(K){this._annotations=K===void 0?Object.create(null):K,this._counter=0,this._size=0}return N.prototype.all=function(){return this._annotations},Object.defineProperty(N.prototype,"size",{get:function(){return this._size},enumerable:!1,configurable:!0}),N.prototype.manage=function(K,G){var z;if(C.is(K)?z=K:(z=this.nextId(),G=K),this._annotations[z]!==void 0)throw new Error("Id ".concat(z," is already in use."));if(G===void 0)throw new Error("No annotation provided for id ".concat(z));return this._annotations[z]=G,this._size++,z},N.prototype.nextId=function(){return this._counter++,this._counter.toString()},N}(),R=function(){function N(K){var G=this;this._textEditChanges=Object.create(null),K!==void 0?(this._workspaceEdit=K,K.documentChanges?(this._changeAnnotations=new P(K.changeAnnotations),K.changeAnnotations=this._changeAnnotations.all(),K.documentChanges.forEach(function(z){if(I.is(z)){var D=new q(z.edits,G._changeAnnotations);G._textEditChanges[z.textDocument.uri]=D}})):K.changes&&Object.keys(K.changes).forEach(function(z){var D=new q(K.changes[z]);G._textEditChanges[z]=D})):this._workspaceEdit={}}return Object.defineProperty(N.prototype,"edit",{get:function(){return this.initDocumentChanges(),this._changeAnnotations!==void 0&&(this._changeAnnotations.size===0?this._workspaceEdit.changeAnnotations=void 0:this._workspaceEdit.changeAnnotations=this._changeAnnotations.all()),this._workspaceEdit},enumerable:!1,configurable:!0}),N.prototype.getTextEditChange=function(K){if(Y.is(K)){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var G={uri:K.uri,version:K.version},z=this._textEditChanges[G.uri];if(!z){var D=[],ue={textDocument:G,edits:D};this._workspaceEdit.documentChanges.push(ue),z=new q(D,this._changeAnnotations),this._textEditChanges[G.uri]=z}return z}else{if(this.initChanges(),this._workspaceEdit.changes===void 0)throw new Error("Workspace edit is not configured for normal text edit changes.");var z=this._textEditChanges[K];if(!z){var D=[];this._workspaceEdit.changes[K]=D,z=new q(D),this._textEditChanges[K]=z}return z}},N.prototype.initDocumentChanges=function(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._changeAnnotations=new P,this._workspaceEdit.documentChanges=[],this._workspaceEdit.changeAnnotations=this._changeAnnotations.all())},N.prototype.initChanges=function(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._workspaceEdit.changes=Object.create(null))},N.prototype.createFile=function(K,G,z){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var D;k.is(G)||C.is(G)?D=G:z=G;var ue,Fe;if(D===void 0?ue=L.create(K,z):(Fe=C.is(D)?D:this._changeAnnotations.manage(D),ue=L.create(K,z,Fe)),this._workspaceEdit.documentChanges.push(ue),Fe!==void 0)return Fe},N.prototype.renameFile=function(K,G,z,D){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var ue;k.is(z)||C.is(z)?ue=z:D=z;var Fe,nt;if(ue===void 0?Fe=x.create(K,G,D):(nt=C.is(ue)?ue:this._changeAnnotations.manage(ue),Fe=x.create(K,G,D,nt)),this._workspaceEdit.documentChanges.push(Fe),nt!==void 0)return nt},N.prototype.deleteFile=function(K,G,z){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var D;k.is(G)||C.is(G)?D=G:z=G;var ue,Fe;if(D===void 0?ue=V.create(K,z):(Fe=C.is(D)?D:this._changeAnnotations.manage(D),ue=V.create(K,z,Fe)),this._workspaceEdit.documentChanges.push(ue),Fe!==void 0)return Fe},N}();t.WorkspaceChange=R;var te;(function(N){function K(z){return{uri:z}}N.create=K;function G(z){var D=z;return re.defined(D)&&re.string(D.uri)}N.is=G})(te||(t.TextDocumentIdentifier=te={}));var j;(function(N){function K(z,D){return{uri:z,version:D}}N.create=K;function G(z){var D=z;return re.defined(D)&&re.string(D.uri)&&re.integer(D.version)}N.is=G})(j||(t.VersionedTextDocumentIdentifier=j={}));var Y;(function(N){function K(z,D){return{uri:z,version:D}}N.create=K;function G(z){var D=z;return re.defined(D)&&re.string(D.uri)&&(D.version===null||re.integer(D.version))}N.is=G})(Y||(t.OptionalVersionedTextDocumentIdentifier=Y={}));var le;(function(N){function K(z,D,ue,Fe){return{uri:z,languageId:D,version:ue,text:Fe}}N.create=K;function G(z){var D=z;return re.defined(D)&&re.string(D.uri)&&re.string(D.languageId)&&re.integer(D.version)&&re.string(D.text)}N.is=G})(le||(t.TextDocumentItem=le={}));var Z;(function(N){N.PlainText="plaintext",N.Markdown="markdown";function K(G){var z=G;return z===N.PlainText||z===N.Markdown}N.is=K})(Z||(t.MarkupKind=Z={}));var ce;(function(N){function K(G){var z=G;return re.objectLiteral(G)&&Z.is(z.kind)&&re.string(z.value)}N.is=K})(ce||(t.MarkupContent=ce={}));var Te;(function(N){N.Text=1,N.Method=2,N.Function=3,N.Constructor=4,N.Field=5,N.Variable=6,N.Class=7,N.Interface=8,N.Module=9,N.Property=10,N.Unit=11,N.Value=12,N.Enum=13,N.Keyword=14,N.Snippet=15,N.Color=16,N.File=17,N.Reference=18,N.Folder=19,N.EnumMember=20,N.Constant=21,N.Struct=22,N.Event=23,N.Operator=24,N.TypeParameter=25})(Te||(t.CompletionItemKind=Te={}));var Ie;(function(N){N.PlainText=1,N.Snippet=2})(Ie||(t.InsertTextFormat=Ie={}));var ge;(function(N){N.Deprecated=1})(ge||(t.CompletionItemTag=ge={}));var be;(function(N){function K(z,D,ue){return{newText:z,insert:D,replace:ue}}N.create=K;function G(z){var D=z;return D&&re.string(D.newText)&&s.is(D.insert)&&s.is(D.replace)}N.is=G})(be||(t.InsertReplaceEdit=be={}));var De;(function(N){N.asIs=1,N.adjustIndentation=2})(De||(t.InsertTextMode=De={}));var ze;(function(N){function K(G){var z=G;return z&&(re.string(z.detail)||z.detail===void 0)&&(re.string(z.description)||z.description===void 0)}N.is=K})(ze||(t.CompletionItemLabelDetails=ze={}));var We;(function(N){function K(G){return{label:G}}N.create=K})(We||(t.CompletionItem=We={}));var pe;(function(N){function K(G,z){return{items:G||[],isIncomplete:!!z}}N.create=K})(pe||(t.CompletionList=pe={}));var fe;(function(N){function K(z){return z.replace(/[\\`*_{}[\]()#+\-.!]/g,"\\$&")}N.fromPlainText=K;function G(z){var D=z;return re.string(D)||re.objectLiteral(D)&&re.string(D.language)&&re.string(D.value)}N.is=G})(fe||(t.MarkedString=fe={}));var $e;(function(N){function K(G){var z=G;return!!z&&re.objectLiteral(z)&&(ce.is(z.contents)||fe.is(z.contents)||re.typedArray(z.contents,fe.is))&&(G.range===void 0||s.is(G.range))}N.is=K})($e||(t.Hover=$e={}));var Le;(function(N){function K(G,z){return z?{label:G,documentation:z}:{label:G}}N.create=K})(Le||(t.ParameterInformation=Le={}));var Me;(function(N){function K(G,z){for(var D=[],ue=2;ue<arguments.length;ue++)D[ue-2]=arguments[ue];var Fe={label:G};return re.defined(z)&&(Fe.documentation=z),re.defined(D)?Fe.parameters=D:Fe.parameters=[],Fe}N.create=K})(Me||(t.SignatureInformation=Me={}));var Ze;(function(N){N.Text=1,N.Read=2,N.Write=3})(Ze||(t.DocumentHighlightKind=Ze={}));var $t;(function(N){function K(G,z){var D={range:G};return re.number(z)&&(D.kind=z),D}N.create=K})($t||(t.DocumentHighlight=$t={}));var It;(function(N){N.File=1,N.Module=2,N.Namespace=3,N.Package=4,N.Class=5,N.Method=6,N.Property=7,N.Field=8,N.Constructor=9,N.Enum=10,N.Interface=11,N.Function=12,N.Variable=13,N.Constant=14,N.String=15,N.Number=16,N.Boolean=17,N.Array=18,N.Object=19,N.Key=20,N.Null=21,N.EnumMember=22,N.Struct=23,N.Event=24,N.Operator=25,N.TypeParameter=26})(It||(t.SymbolKind=It={}));var jt;(function(N){N.Deprecated=1})(jt||(t.SymbolTag=jt={}));var st;(function(N){function K(G,z,D,ue,Fe){var nt={name:G,kind:z,location:{uri:ue,range:D}};return Fe&&(nt.containerName=Fe),nt}N.create=K})(st||(t.SymbolInformation=st={}));var Ct;(function(N){function K(G,z,D,ue){return ue!==void 0?{name:G,kind:z,location:{uri:D,range:ue}}:{name:G,kind:z,location:{uri:D}}}N.create=K})(Ct||(t.WorkspaceSymbol=Ct={}));var rn;(function(N){function K(z,D,ue,Fe,nt,St){var At={name:z,detail:D,kind:ue,range:Fe,selectionRange:nt};return St!==void 0&&(At.children=St),At}N.create=K;function G(z){var D=z;return D&&re.string(D.name)&&re.number(D.kind)&&s.is(D.range)&&s.is(D.selectionRange)&&(D.detail===void 0||re.string(D.detail))&&(D.deprecated===void 0||re.boolean(D.deprecated))&&(D.children===void 0||Array.isArray(D.children))&&(D.tags===void 0||Array.isArray(D.tags))}N.is=G})(rn||(t.DocumentSymbol=rn={}));var Bt;(function(N){N.Empty="",N.QuickFix="quickfix",N.Refactor="refactor",N.RefactorExtract="refactor.extract",N.RefactorInline="refactor.inline",N.RefactorRewrite="refactor.rewrite",N.Source="source",N.SourceOrganizeImports="source.organizeImports",N.SourceFixAll="source.fixAll"})(Bt||(t.CodeActionKind=Bt={}));var gt;(function(N){N.Invoked=1,N.Automatic=2})(gt||(t.CodeActionTriggerKind=gt={}));var ut;(function(N){function K(z,D,ue){var Fe={diagnostics:z};return D!=null&&(Fe.only=D),ue!=null&&(Fe.triggerKind=ue),Fe}N.create=K;function G(z){var D=z;return re.defined(D)&&re.typedArray(D.diagnostics,T.is)&&(D.only===void 0||re.typedArray(D.only,re.string))&&(D.triggerKind===void 0||D.triggerKind===gt.Invoked||D.triggerKind===gt.Automatic)}N.is=G})(ut||(t.CodeActionContext=ut={}));var Nt;(function(N){function K(z,D,ue){var Fe={title:z},nt=!0;return typeof D=="string"?(nt=!1,Fe.kind=D):E.is(D)?Fe.command=D:Fe.edit=D,nt&&ue!==void 0&&(Fe.kind=ue),Fe}N.create=K;function G(z){var D=z;return D&&re.string(D.title)&&(D.diagnostics===void 0||re.typedArray(D.diagnostics,T.is))&&(D.kind===void 0||re.string(D.kind))&&(D.edit!==void 0||D.command!==void 0)&&(D.command===void 0||E.is(D.command))&&(D.isPreferred===void 0||re.boolean(D.isPreferred))&&(D.edit===void 0||M.is(D.edit))}N.is=G})(Nt||(t.CodeAction=Nt={}));var Yt;(function(N){function K(z,D){var ue={range:z};return re.defined(D)&&(ue.data=D),ue}N.create=K;function G(z){var D=z;return re.defined(D)&&s.is(D.range)&&(re.undefined(D.command)||E.is(D.command))}N.is=G})(Yt||(t.CodeLens=Yt={}));var wt;(function(N){function K(z,D){return{tabSize:z,insertSpaces:D}}N.create=K;function G(z){var D=z;return re.defined(D)&&re.uinteger(D.tabSize)&&re.boolean(D.insertSpaces)}N.is=G})(wt||(t.FormattingOptions=wt={}));var Ft;(function(N){function K(z,D,ue){return{range:z,target:D,data:ue}}N.create=K;function G(z){var D=z;return re.defined(D)&&s.is(D.range)&&(re.undefined(D.target)||re.string(D.target))}N.is=G})(Ft||(t.DocumentLink=Ft={}));var ee;(function(N){function K(z,D){return{range:z,parent:D}}N.create=K;function G(z){var D=z;return re.objectLiteral(D)&&s.is(D.range)&&(D.parent===void 0||N.is(D.parent))}N.is=G})(ee||(t.SelectionRange=ee={}));var W;(function(N){N.namespace="namespace",N.type="type",N.class="class",N.enum="enum",N.interface="interface",N.struct="struct",N.typeParameter="typeParameter",N.parameter="parameter",N.variable="variable",N.property="property",N.enumMember="enumMember",N.event="event",N.function="function",N.method="method",N.macro="macro",N.keyword="keyword",N.modifier="modifier",N.comment="comment",N.string="string",N.number="number",N.regexp="regexp",N.operator="operator",N.decorator="decorator"})(W||(t.SemanticTokenTypes=W={}));var oe;(function(N){N.declaration="declaration",N.definition="definition",N.readonly="readonly",N.static="static",N.deprecated="deprecated",N.abstract="abstract",N.async="async",N.modification="modification",N.documentation="documentation",N.defaultLibrary="defaultLibrary"})(oe||(t.SemanticTokenModifiers=oe={}));var me;(function(N){function K(G){var z=G;return re.objectLiteral(z)&&(z.resultId===void 0||typeof z.resultId=="string")&&Array.isArray(z.data)&&(z.data.length===0||typeof z.data[0]=="number")}N.is=K})(me||(t.SemanticTokens=me={}));var de;(function(N){function K(z,D){return{range:z,text:D}}N.create=K;function G(z){var D=z;return D!=null&&s.is(D.range)&&re.string(D.text)}N.is=G})(de||(t.InlineValueText=de={}));var ye;(function(N){function K(z,D,ue){return{range:z,variableName:D,caseSensitiveLookup:ue}}N.create=K;function G(z){var D=z;return D!=null&&s.is(D.range)&&re.boolean(D.caseSensitiveLookup)&&(re.string(D.variableName)||D.variableName===void 0)}N.is=G})(ye||(t.InlineValueVariableLookup=ye={}));var he;(function(N){function K(z,D){return{range:z,expression:D}}N.create=K;function G(z){var D=z;return D!=null&&s.is(D.range)&&(re.string(D.expression)||D.expression===void 0)}N.is=G})(he||(t.InlineValueEvaluatableExpression=he={}));var Be;(function(N){function K(z,D){return{frameId:z,stoppedLocation:D}}N.create=K;function G(z){var D=z;return re.defined(D)&&s.is(z.stoppedLocation)}N.is=G})(Be||(t.InlineValueContext=Be={}));var qe;(function(N){N.Type=1,N.Parameter=2;function K(G){return G===1||G===2}N.is=K})(qe||(t.InlayHintKind=qe={}));var Pe;(function(N){function K(z){return{value:z}}N.create=K;function G(z){var D=z;return re.objectLiteral(D)&&(D.tooltip===void 0||re.string(D.tooltip)||ce.is(D.tooltip))&&(D.location===void 0||l.is(D.location))&&(D.command===void 0||E.is(D.command))}N.is=G})(Pe||(t.InlayHintLabelPart=Pe={}));var ie;(function(N){function K(z,D,ue){var Fe={position:z,label:D};return ue!==void 0&&(Fe.kind=ue),Fe}N.create=K;function G(z){var D=z;return re.objectLiteral(D)&&a.is(D.position)&&(re.string(D.label)||re.typedArray(D.label,Pe.is))&&(D.kind===void 0||qe.is(D.kind))&&D.textEdits===void 0||re.typedArray(D.textEdits,$.is)&&(D.tooltip===void 0||re.string(D.tooltip)||ce.is(D.tooltip))&&(D.paddingLeft===void 0||re.boolean(D.paddingLeft))&&(D.paddingRight===void 0||re.boolean(D.paddingRight))}N.is=G})(ie||(t.InlayHint=ie={}));var ae;(function(N){function K(G){return{kind:"snippet",value:G}}N.createSnippet=K})(ae||(t.StringValue=ae={}));var we;(function(N){function K(G,z,D,ue){return{insertText:G,filterText:z,range:D,command:ue}}N.create=K})(we||(t.InlineCompletionItem=we={}));var Ne;(function(N){function K(G){return{items:G}}N.create=K})(Ne||(t.InlineCompletionList=Ne={}));var tt;(function(N){N.Invoked=0,N.Automatic=1})(tt||(t.InlineCompletionTriggerKind=tt={}));var Ae;(function(N){function K(G,z){return{range:G,text:z}}N.create=K})(Ae||(t.SelectedCompletionInfo=Ae={}));var He;(function(N){function K(G,z){return{triggerKind:G,selectedCompletionInfo:z}}N.create=K})(He||(t.InlineCompletionContext=He={}));var Qe;(function(N){function K(G){var z=G;return re.objectLiteral(z)&&r.is(z.uri)&&re.string(z.name)}N.is=K})(Qe||(t.WorkspaceFolder=Qe={})),t.EOL=[`
32
+ `)),W){let me=ee.error?` Request failed: ${ee.error.message} (${ee.error.code}).`:"";$.log(`Received response '${W.method} - (${ee.id})' in ${Date.now()-W.timerStart}ms.${me}`,oe)}else $.log(`Received response ${ee.id} without active response promise.`,oe)}else st("receive-response",ee)}function st(ee,W){if(!$||T===Cn.Off)return;let oe={isLSPMessage:!0,type:ee,message:W,timestamp:Date.now()};$.log(oe)}function Ct(){if(Y())throw new ps(wl.Closed,"Connection is closed.");if(le())throw new ps(wl.Disposed,"Connection is disposed.")}function rn(){if(j())throw new ps(wl.AlreadyListening,"Connection is already listening")}function Bt(){if(!j())throw new Error("Call listen() first.")}function gt(ee){return ee===void 0?null:ee}function ut(ee){if(ee!==null)return ee}function Nt(ee){return ee!=null&&!Array.isArray(ee)&&typeof ee=="object"}function Yt(ee,W){switch(ee){case qt.ParameterStructures.auto:return Nt(W)?ut(W):[gt(W)];case qt.ParameterStructures.byName:if(!Nt(W))throw new Error("Received parameters by name but param is not an object literal.");return ut(W);case qt.ParameterStructures.byPosition:return[gt(W)];default:throw new Error(`Unknown parameter structure ${ee.toString()}`)}}function wt(ee,W){let oe,me=ee.numberOfParams;switch(me){case 0:oe=void 0;break;case 1:oe=Yt(ee.parameterStructures,W[0]);break;default:oe=[];for(let de=0;de<W.length&&de<me;de++)oe.push(gt(W[de]));if(W.length<me)for(let de=W.length;de<me;de++)oe.push(null);break}return oe}let Ft={sendNotification:(ee,...W)=>{Ct();let oe,me;if(lr.string(ee)){oe=ee;let ye=W[0],he=0,Be=qt.ParameterStructures.auto;qt.ParameterStructures.is(ye)&&(he=1,Be=ye);let qe=W.length,Pe=qe-he;switch(Pe){case 0:me=void 0;break;case 1:me=Yt(Be,W[he]);break;default:if(Be===qt.ParameterStructures.byName)throw new Error(`Received ${Pe} parameters for 'by Name' notification parameter structure.`);me=W.slice(he,qe).map(ie=>gt(ie));break}}else{let ye=W;oe=ee.method,me=wt(ee,ye)}let de={jsonrpc:l,method:oe,params:me};return Me(de),t.write(de).catch(ye=>{throw i.error("Sending notification failed."),ye})},onNotification:(ee,W)=>{Ct();let oe;return lr.func(ee)?f=ee:W&&(lr.string(ee)?(oe=ee,_.set(ee,{type:void 0,handler:W})):(oe=ee.method,_.set(ee.method,{type:ee,handler:W}))),{dispose:()=>{oe!==void 0?_.delete(oe):f=void 0}}},onProgress:(ee,W,oe)=>{if(p.has(W))throw new Error(`Progress handler for token ${W} already registered`);return p.set(W,oe),{dispose:()=>{p.delete(W)}}},sendProgress:(ee,W,oe)=>Ft.sendNotification(kl.type,{token:W,value:oe}),onUnhandledProgress:L.event,sendRequest:(ee,...W)=>{Ct(),Bt();let oe,me,de;if(lr.string(ee)){oe=ee;let qe=W[0],Pe=W[W.length-1],ie=0,ae=qt.ParameterStructures.auto;qt.ParameterStructures.is(qe)&&(ie=1,ae=qe);let we=W.length;Rp.CancellationToken.is(Pe)&&(we=we-1,de=Pe);let Ne=we-ie;switch(Ne){case 0:me=void 0;break;case 1:me=Yt(ae,W[ie]);break;default:if(ae===qt.ParameterStructures.byName)throw new Error(`Received ${Ne} parameters for 'by Name' request parameter structure.`);me=W.slice(ie,we).map(tt=>gt(tt));break}}else{let qe=W;oe=ee.method,me=wt(ee,qe);let Pe=ee.numberOfParams;de=Rp.CancellationToken.is(qe[Pe])?qe[Pe]:void 0}let ye=o++,he;de&&(he=de.onCancellationRequested(()=>{let qe=V.sender.sendCancellation(Ft,ye);return qe===void 0?(i.log(`Received no promise from cancellation strategy when cancelling id ${ye}`),Promise.resolve()):qe.catch(()=>{i.log(`Sending cancellation messages for id ${ye} failed`)})}));let Be={jsonrpc:l,id:ye,method:oe,params:me};return Le(Be),typeof V.sender.enableCancellation=="function"&&V.sender.enableCancellation(Be),new Promise(async(qe,Pe)=>{let ie=Ne=>{qe(Ne),V.sender.cleanup(ye),he==null||he.dispose()},ae=Ne=>{Pe(Ne),V.sender.cleanup(ye),he==null||he.dispose()},we={method:oe,timerStart:Date.now(),resolve:ie,reject:ae};try{await t.write(Be),y.set(ye,we)}catch(Ne){throw i.error("Sending request failed."),we.reject(new qt.ResponseError(qt.ErrorCodes.MessageWriteError,Ne.message?Ne.message:"Unknown reason")),Ne}})},onRequest:(ee,W)=>{Ct();let oe=null;return Up.is(ee)?(oe=void 0,u=ee):lr.string(ee)?(oe=null,W!==void 0&&(oe=ee,c.set(ee,{handler:W,type:void 0}))):W!==void 0&&(oe=ee.method,c.set(ee.method,{type:ee,handler:W})),{dispose:()=>{oe!==null&&(oe!==void 0?c.delete(oe):u=void 0)}}},hasPendingResponse:()=>y.size>0,trace:async(ee,W,oe)=>{let me=!1,de=Ei.Text;oe!==void 0&&(lr.boolean(oe)?me=oe:(me=oe.sendNotification||!1,de=oe.traceFormat||Ei.Text)),T=ee,E=de,T===Cn.Off?$=void 0:$=W,me&&!Y()&&!le()&&await Ft.sendNotification(zp.type,{value:Cn.toString(ee)})},onError:C.event,onClose:w.event,onUnhandledNotification:I.event,onDispose:x.event,end:()=>{t.end()},dispose:()=>{if(le())return;k=Wi.Disposed,x.fire(void 0);let ee=new qt.ResponseError(qt.ErrorCodes.PendingResponseRejected,"Pending response rejected since connection got disposed");for(let W of y.values())W.reject(ee);y=new Map,g=new Map,h=new Set,v=new Py.LinkedMap,lr.func(t.dispose)&&t.dispose(),lr.func(e.dispose)&&e.dispose()},listen:()=>{Ct(),rn(),k=Wi.Listening,e.listen(De)},inspect:()=>{(0,Oy.default)().console.log("inspect")}};return Ft.onNotification(Bu.type,ee=>{if(T===Cn.Off||!$)return;let W=T===Cn.Verbose||T===Cn.Compact;$.log(ee.message,W?ee.verbose:void 0)}),Ft.onNotification(kl.type,ee=>{let W=p.get(ee.token);W?W(ee.value):L.fire(ee)}),Ft}Jt.createMessageConnection=GL});var Yu=dt(Re=>{"use strict";Object.defineProperty(Re,"__esModule",{value:!0});Re.ProgressType=Re.ProgressToken=Re.createMessageConnection=Re.NullLogger=Re.ConnectionOptions=Re.ConnectionStrategy=Re.AbstractMessageBuffer=Re.WriteableStreamMessageWriter=Re.AbstractMessageWriter=Re.MessageWriter=Re.ReadableStreamMessageReader=Re.AbstractMessageReader=Re.MessageReader=Re.SharedArrayReceiverStrategy=Re.SharedArraySenderStrategy=Re.CancellationToken=Re.CancellationTokenSource=Re.Emitter=Re.Event=Re.Disposable=Re.LRUCache=Re.Touch=Re.LinkedMap=Re.ParameterStructures=Re.NotificationType9=Re.NotificationType8=Re.NotificationType7=Re.NotificationType6=Re.NotificationType5=Re.NotificationType4=Re.NotificationType3=Re.NotificationType2=Re.NotificationType1=Re.NotificationType0=Re.NotificationType=Re.ErrorCodes=Re.ResponseError=Re.RequestType9=Re.RequestType8=Re.RequestType7=Re.RequestType6=Re.RequestType5=Re.RequestType4=Re.RequestType3=Re.RequestType2=Re.RequestType1=Re.RequestType0=Re.RequestType=Re.Message=Re.RAL=void 0;Re.MessageStrategy=Re.CancellationStrategy=Re.CancellationSenderStrategy=Re.CancellationReceiverStrategy=Re.ConnectionError=Re.ConnectionErrors=Re.LogTraceNotification=Re.SetTraceNotification=Re.TraceFormat=Re.TraceValues=Re.Trace=void 0;var Bn=mp();Object.defineProperty(Re,"Message",{enumerable:!0,get:function(){return Bn.Message}});Object.defineProperty(Re,"RequestType",{enumerable:!0,get:function(){return Bn.RequestType}});Object.defineProperty(Re,"RequestType0",{enumerable:!0,get:function(){return Bn.RequestType0}});Object.defineProperty(Re,"RequestType1",{enumerable:!0,get:function(){return Bn.RequestType1}});Object.defineProperty(Re,"RequestType2",{enumerable:!0,get:function(){return Bn.RequestType2}});Object.defineProperty(Re,"RequestType3",{enumerable:!0,get:function(){return Bn.RequestType3}});Object.defineProperty(Re,"RequestType4",{enumerable:!0,get:function(){return Bn.RequestType4}});Object.defineProperty(Re,"RequestType5",{enumerable:!0,get:function(){return Bn.RequestType5}});Object.defineProperty(Re,"RequestType6",{enumerable:!0,get:function(){return Bn.RequestType6}});Object.defineProperty(Re,"RequestType7",{enumerable:!0,get:function(){return Bn.RequestType7}});Object.defineProperty(Re,"RequestType8",{enumerable:!0,get:function(){return Bn.RequestType8}});Object.defineProperty(Re,"RequestType9",{enumerable:!0,get:function(){return Bn.RequestType9}});Object.defineProperty(Re,"ResponseError",{enumerable:!0,get:function(){return Bn.ResponseError}});Object.defineProperty(Re,"ErrorCodes",{enumerable:!0,get:function(){return Bn.ErrorCodes}});Object.defineProperty(Re,"NotificationType",{enumerable:!0,get:function(){return Bn.NotificationType}});Object.defineProperty(Re,"NotificationType0",{enumerable:!0,get:function(){return Bn.NotificationType0}});Object.defineProperty(Re,"NotificationType1",{enumerable:!0,get:function(){return Bn.NotificationType1}});Object.defineProperty(Re,"NotificationType2",{enumerable:!0,get:function(){return Bn.NotificationType2}});Object.defineProperty(Re,"NotificationType3",{enumerable:!0,get:function(){return Bn.NotificationType3}});Object.defineProperty(Re,"NotificationType4",{enumerable:!0,get:function(){return Bn.NotificationType4}});Object.defineProperty(Re,"NotificationType5",{enumerable:!0,get:function(){return Bn.NotificationType5}});Object.defineProperty(Re,"NotificationType6",{enumerable:!0,get:function(){return Bn.NotificationType6}});Object.defineProperty(Re,"NotificationType7",{enumerable:!0,get:function(){return Bn.NotificationType7}});Object.defineProperty(Re,"NotificationType8",{enumerable:!0,get:function(){return Bn.NotificationType8}});Object.defineProperty(Re,"NotificationType9",{enumerable:!0,get:function(){return Bn.NotificationType9}});Object.defineProperty(Re,"ParameterStructures",{enumerable:!0,get:function(){return Bn.ParameterStructures}});var Gp=gp();Object.defineProperty(Re,"LinkedMap",{enumerable:!0,get:function(){return Gp.LinkedMap}});Object.defineProperty(Re,"LRUCache",{enumerable:!0,get:function(){return Gp.LRUCache}});Object.defineProperty(Re,"Touch",{enumerable:!0,get:function(){return Gp.Touch}});var WL=Fy();Object.defineProperty(Re,"Disposable",{enumerable:!0,get:function(){return WL.Disposable}});var qy=us();Object.defineProperty(Re,"Event",{enumerable:!0,get:function(){return qy.Event}});Object.defineProperty(Re,"Emitter",{enumerable:!0,get:function(){return qy.Emitter}});var Gy=Ru();Object.defineProperty(Re,"CancellationTokenSource",{enumerable:!0,get:function(){return Gy.CancellationTokenSource}});Object.defineProperty(Re,"CancellationToken",{enumerable:!0,get:function(){return Gy.CancellationToken}});var Wy=Iy();Object.defineProperty(Re,"SharedArraySenderStrategy",{enumerable:!0,get:function(){return Wy.SharedArraySenderStrategy}});Object.defineProperty(Re,"SharedArrayReceiverStrategy",{enumerable:!0,get:function(){return Wy.SharedArrayReceiverStrategy}});var Wp=Ay();Object.defineProperty(Re,"MessageReader",{enumerable:!0,get:function(){return Wp.MessageReader}});Object.defineProperty(Re,"AbstractMessageReader",{enumerable:!0,get:function(){return Wp.AbstractMessageReader}});Object.defineProperty(Re,"ReadableStreamMessageReader",{enumerable:!0,get:function(){return Wp.ReadableStreamMessageReader}});var jp=My();Object.defineProperty(Re,"MessageWriter",{enumerable:!0,get:function(){return jp.MessageWriter}});Object.defineProperty(Re,"AbstractMessageWriter",{enumerable:!0,get:function(){return jp.AbstractMessageWriter}});Object.defineProperty(Re,"WriteableStreamMessageWriter",{enumerable:!0,get:function(){return jp.WriteableStreamMessageWriter}});var jL=Ry();Object.defineProperty(Re,"AbstractMessageBuffer",{enumerable:!0,get:function(){return jL.AbstractMessageBuffer}});var zr=By();Object.defineProperty(Re,"ConnectionStrategy",{enumerable:!0,get:function(){return zr.ConnectionStrategy}});Object.defineProperty(Re,"ConnectionOptions",{enumerable:!0,get:function(){return zr.ConnectionOptions}});Object.defineProperty(Re,"NullLogger",{enumerable:!0,get:function(){return zr.NullLogger}});Object.defineProperty(Re,"createMessageConnection",{enumerable:!0,get:function(){return zr.createMessageConnection}});Object.defineProperty(Re,"ProgressToken",{enumerable:!0,get:function(){return zr.ProgressToken}});Object.defineProperty(Re,"ProgressType",{enumerable:!0,get:function(){return zr.ProgressType}});Object.defineProperty(Re,"Trace",{enumerable:!0,get:function(){return zr.Trace}});Object.defineProperty(Re,"TraceValues",{enumerable:!0,get:function(){return zr.TraceValues}});Object.defineProperty(Re,"TraceFormat",{enumerable:!0,get:function(){return zr.TraceFormat}});Object.defineProperty(Re,"SetTraceNotification",{enumerable:!0,get:function(){return zr.SetTraceNotification}});Object.defineProperty(Re,"LogTraceNotification",{enumerable:!0,get:function(){return zr.LogTraceNotification}});Object.defineProperty(Re,"ConnectionErrors",{enumerable:!0,get:function(){return zr.ConnectionErrors}});Object.defineProperty(Re,"ConnectionError",{enumerable:!0,get:function(){return zr.ConnectionError}});Object.defineProperty(Re,"CancellationReceiverStrategy",{enumerable:!0,get:function(){return zr.CancellationReceiverStrategy}});Object.defineProperty(Re,"CancellationSenderStrategy",{enumerable:!0,get:function(){return zr.CancellationSenderStrategy}});Object.defineProperty(Re,"CancellationStrategy",{enumerable:!0,get:function(){return zr.CancellationStrategy}});Object.defineProperty(Re,"MessageStrategy",{enumerable:!0,get:function(){return zr.MessageStrategy}});var HL=Ko();Re.RAL=HL.default});var Yy=dt(Xp=>{"use strict";Object.defineProperty(Xp,"__esModule",{value:!0});var jy=require("util"),Fo=Yu(),Ku=class e extends Fo.AbstractMessageBuffer{constructor(t="utf-8"){super(t)}emptyBuffer(){return e.emptyBuffer}fromString(t,n){return Buffer.from(t,n)}toString(t,n){return t instanceof Buffer?t.toString(n):new jy.TextDecoder(n).decode(t)}asNative(t,n){return n===void 0?t instanceof Buffer?t:Buffer.from(t):t instanceof Buffer?t.slice(0,n):Buffer.from(t,0,n)}allocNative(t){return Buffer.allocUnsafe(t)}};Ku.emptyBuffer=Buffer.allocUnsafe(0);var Hp=class{constructor(t){this.stream=t}onClose(t){return this.stream.on("close",t),Fo.Disposable.create(()=>this.stream.off("close",t))}onError(t){return this.stream.on("error",t),Fo.Disposable.create(()=>this.stream.off("error",t))}onEnd(t){return this.stream.on("end",t),Fo.Disposable.create(()=>this.stream.off("end",t))}onData(t){return this.stream.on("data",t),Fo.Disposable.create(()=>this.stream.off("data",t))}},Yp=class{constructor(t){this.stream=t}onClose(t){return this.stream.on("close",t),Fo.Disposable.create(()=>this.stream.off("close",t))}onError(t){return this.stream.on("error",t),Fo.Disposable.create(()=>this.stream.off("error",t))}onEnd(t){return this.stream.on("end",t),Fo.Disposable.create(()=>this.stream.off("end",t))}write(t,n){return new Promise((r,i)=>{let o=a=>{a==null?r():i(a)};typeof t=="string"?this.stream.write(t,n,o):this.stream.write(t,o)})}end(){this.stream.end()}},Hy=Object.freeze({messageBuffer:Object.freeze({create:e=>new Ku(e)}),applicationJson:Object.freeze({encoder:Object.freeze({name:"application/json",encode:(e,t)=>{try{return Promise.resolve(Buffer.from(JSON.stringify(e,void 0,0),t.charset))}catch(n){return Promise.reject(n)}}}),decoder:Object.freeze({name:"application/json",decode:(e,t)=>{try{return e instanceof Buffer?Promise.resolve(JSON.parse(e.toString(t.charset))):Promise.resolve(JSON.parse(new jy.TextDecoder(t.charset).decode(e)))}catch(n){return Promise.reject(n)}}})}),stream:Object.freeze({asReadableStream:e=>new Hp(e),asWritableStream:e=>new Yp(e)}),console,timer:Object.freeze({setTimeout(e,t,...n){let r=setTimeout(e,t,...n);return{dispose:()=>clearTimeout(r)}},setImmediate(e,...t){let n=setImmediate(e,...t);return{dispose:()=>clearImmediate(n)}},setInterval(e,t,...n){let r=setInterval(e,t,...n);return{dispose:()=>clearInterval(r)}}})});function Kp(){return Hy}(function(e){function t(){Fo.RAL.install(Hy)}e.install=t})(Kp||(Kp={}));Xp.default=Kp});var La=dt(mn=>{"use strict";var YL=mn&&mn.__createBinding||(Object.create?function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}:function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]}),KL=mn&&mn.__exportStar||function(e,t){for(var n in e)n!=="default"&&!Object.prototype.hasOwnProperty.call(t,n)&&YL(t,e,n)};Object.defineProperty(mn,"__esModule",{value:!0});mn.createMessageConnection=mn.createServerSocketTransport=mn.createClientSocketTransport=mn.createServerPipeTransport=mn.createClientPipeTransport=mn.generateRandomPipeName=mn.StreamMessageWriter=mn.StreamMessageReader=mn.SocketMessageWriter=mn.SocketMessageReader=mn.PortMessageWriter=mn.PortMessageReader=mn.IPCMessageWriter=mn.IPCMessageReader=void 0;var ds=Yy();ds.default.install();var Ky=require("path"),XL=require("os"),QL=require("crypto"),Ju=require("net"),$i=Yu();KL(Yu(),mn);var Qp=class extends $i.AbstractMessageReader{constructor(t){super(),this.process=t;let n=this.process;n.on("error",r=>this.fireError(r)),n.on("close",()=>this.fireClose())}listen(t){return this.process.on("message",t),$i.Disposable.create(()=>this.process.off("message",t))}};mn.IPCMessageReader=Qp;var Jp=class extends $i.AbstractMessageWriter{constructor(t){super(),this.process=t,this.errorCount=0;let n=this.process;n.on("error",r=>this.fireError(r)),n.on("close",()=>this.fireClose)}write(t){try{return typeof this.process.send=="function"&&this.process.send(t,void 0,void 0,n=>{n?(this.errorCount++,this.handleError(n,t)):this.errorCount=0}),Promise.resolve()}catch(n){return this.handleError(n,t),Promise.reject(n)}}handleError(t,n){this.errorCount++,this.fireError(t,n,this.errorCount)}end(){}};mn.IPCMessageWriter=Jp;var Zp=class extends $i.AbstractMessageReader{constructor(t){super(),this.onData=new $i.Emitter,t.on("close",()=>this.fireClose),t.on("error",n=>this.fireError(n)),t.on("message",n=>{this.onData.fire(n)})}listen(t){return this.onData.event(t)}};mn.PortMessageReader=Zp;var ed=class extends $i.AbstractMessageWriter{constructor(t){super(),this.port=t,this.errorCount=0,t.on("close",()=>this.fireClose()),t.on("error",n=>this.fireError(n))}write(t){try{return this.port.postMessage(t),Promise.resolve()}catch(n){return this.handleError(n,t),Promise.reject(n)}}handleError(t,n){this.errorCount++,this.fireError(t,n,this.errorCount)}end(){}};mn.PortMessageWriter=ed;var wa=class extends $i.ReadableStreamMessageReader{constructor(t,n="utf-8"){super((0,ds.default)().stream.asReadableStream(t),n)}};mn.SocketMessageReader=wa;var Fa=class extends $i.WriteableStreamMessageWriter{constructor(t,n){super((0,ds.default)().stream.asWritableStream(t),n),this.socket=t}dispose(){super.dispose(),this.socket.destroy()}};mn.SocketMessageWriter=Fa;var Xu=class extends $i.ReadableStreamMessageReader{constructor(t,n){super((0,ds.default)().stream.asReadableStream(t),n)}};mn.StreamMessageReader=Xu;var Qu=class extends $i.WriteableStreamMessageWriter{constructor(t,n){super((0,ds.default)().stream.asWritableStream(t),n)}};mn.StreamMessageWriter=Qu;var Xy=process.env.XDG_RUNTIME_DIR,JL=new Map([["linux",107],["darwin",103]]);function ZL(){let e=(0,QL.randomBytes)(21).toString("hex");if(process.platform==="win32")return`\\\\.\\pipe\\vscode-jsonrpc-${e}-sock`;let t;Xy?t=Ky.join(Xy,`vscode-ipc-${e}.sock`):t=Ky.join(XL.tmpdir(),`vscode-${e}.sock`);let n=JL.get(process.platform);return n!==void 0&&t.length>n&&(0,ds.default)().console.warn(`WARNING: IPC handle "${t}" is longer than ${n} characters.`),t}mn.generateRandomPipeName=ZL;function eI(e,t="utf-8"){let n,r=new Promise((i,o)=>{n=i});return new Promise((i,o)=>{let a=(0,Ju.createServer)(s=>{a.close(),n([new wa(s,t),new Fa(s,t)])});a.on("error",o),a.listen(e,()=>{a.removeListener("error",o),i({onConnected:()=>r})})})}mn.createClientPipeTransport=eI;function tI(e,t="utf-8"){let n=(0,Ju.createConnection)(e);return[new wa(n,t),new Fa(n,t)]}mn.createServerPipeTransport=tI;function nI(e,t="utf-8"){let n,r=new Promise((i,o)=>{n=i});return new Promise((i,o)=>{let a=(0,Ju.createServer)(s=>{a.close(),n([new wa(s,t),new Fa(s,t)])});a.on("error",o),a.listen(e,"127.0.0.1",()=>{a.removeListener("error",o),i({onConnected:()=>r})})})}mn.createClientSocketTransport=nI;function rI(e,t="utf-8"){let n=(0,Ju.createConnection)(e,"127.0.0.1");return[new wa(n,t),new Fa(n,t)]}mn.createServerSocketTransport=rI;function iI(e){let t=e;return t.read!==void 0&&t.addListener!==void 0}function oI(e){let t=e;return t.write!==void 0&&t.addListener!==void 0}function aI(e,t,n,r){n||(n=$i.NullLogger);let i=iI(e)?new Xu(e):e,o=oI(t)?new Qu(t):t;return $i.ConnectionStrategy.is(r)&&(r={connectionStrategy:r}),(0,$i.createMessageConnection)(i,o,n,r)}mn.createMessageConnection=aI});var td=dt((ND,Qy)=>{"use strict";Qy.exports=La()});var ec=dt((Jy,Zu)=>{(function(e){if(typeof Zu=="object"&&typeof Zu.exports=="object"){var t=e(require,Jy);t!==void 0&&(Zu.exports=t)}else typeof define=="function"&&define.amd&&define(["require","exports"],e)})(function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TextDocument=t.EOL=t.WorkspaceFolder=t.InlineCompletionContext=t.SelectedCompletionInfo=t.InlineCompletionTriggerKind=t.InlineCompletionList=t.InlineCompletionItem=t.StringValue=t.InlayHint=t.InlayHintLabelPart=t.InlayHintKind=t.InlineValueContext=t.InlineValueEvaluatableExpression=t.InlineValueVariableLookup=t.InlineValueText=t.SemanticTokens=t.SemanticTokenModifiers=t.SemanticTokenTypes=t.SelectionRange=t.DocumentLink=t.FormattingOptions=t.CodeLens=t.CodeAction=t.CodeActionContext=t.CodeActionTriggerKind=t.CodeActionKind=t.DocumentSymbol=t.WorkspaceSymbol=t.SymbolInformation=t.SymbolTag=t.SymbolKind=t.DocumentHighlight=t.DocumentHighlightKind=t.SignatureInformation=t.ParameterInformation=t.Hover=t.MarkedString=t.CompletionList=t.CompletionItem=t.CompletionItemLabelDetails=t.InsertTextMode=t.InsertReplaceEdit=t.CompletionItemTag=t.InsertTextFormat=t.CompletionItemKind=t.MarkupContent=t.MarkupKind=t.TextDocumentItem=t.OptionalVersionedTextDocumentIdentifier=t.VersionedTextDocumentIdentifier=t.TextDocumentIdentifier=t.WorkspaceChange=t.WorkspaceEdit=t.DeleteFile=t.RenameFile=t.CreateFile=t.TextDocumentEdit=t.AnnotatedTextEdit=t.ChangeAnnotationIdentifier=t.ChangeAnnotation=t.TextEdit=t.Command=t.Diagnostic=t.CodeDescription=t.DiagnosticTag=t.DiagnosticSeverity=t.DiagnosticRelatedInformation=t.FoldingRange=t.FoldingRangeKind=t.ColorPresentation=t.ColorInformation=t.Color=t.LocationLink=t.Location=t.Range=t.Position=t.uinteger=t.integer=t.URI=t.DocumentUri=void 0;var n;(function(N){function K(G){return typeof G=="string"}N.is=K})(n||(t.DocumentUri=n={}));var r;(function(N){function K(G){return typeof G=="string"}N.is=K})(r||(t.URI=r={}));var i;(function(N){N.MIN_VALUE=-2147483648,N.MAX_VALUE=2147483647;function K(G){return typeof G=="number"&&N.MIN_VALUE<=G&&G<=N.MAX_VALUE}N.is=K})(i||(t.integer=i={}));var o;(function(N){N.MIN_VALUE=0,N.MAX_VALUE=2147483647;function K(G){return typeof G=="number"&&N.MIN_VALUE<=G&&G<=N.MAX_VALUE}N.is=K})(o||(t.uinteger=o={}));var a;(function(N){function K(z,D){return z===Number.MAX_VALUE&&(z=o.MAX_VALUE),D===Number.MAX_VALUE&&(D=o.MAX_VALUE),{line:z,character:D}}N.create=K;function G(z){var D=z;return re.objectLiteral(D)&&re.uinteger(D.line)&&re.uinteger(D.character)}N.is=G})(a||(t.Position=a={}));var s;(function(N){function K(z,D,ue,Fe){if(re.uinteger(z)&&re.uinteger(D)&&re.uinteger(ue)&&re.uinteger(Fe))return{start:a.create(z,D),end:a.create(ue,Fe)};if(a.is(z)&&a.is(D))return{start:z,end:D};throw new Error("Range#create called with invalid arguments[".concat(z,", ").concat(D,", ").concat(ue,", ").concat(Fe,"]"))}N.create=K;function G(z){var D=z;return re.objectLiteral(D)&&a.is(D.start)&&a.is(D.end)}N.is=G})(s||(t.Range=s={}));var l;(function(N){function K(z,D){return{uri:z,range:D}}N.create=K;function G(z){var D=z;return re.objectLiteral(D)&&s.is(D.range)&&(re.string(D.uri)||re.undefined(D.uri))}N.is=G})(l||(t.Location=l={}));var u;(function(N){function K(z,D,ue,Fe){return{targetUri:z,targetRange:D,targetSelectionRange:ue,originSelectionRange:Fe}}N.create=K;function G(z){var D=z;return re.objectLiteral(D)&&s.is(D.targetRange)&&re.string(D.targetUri)&&s.is(D.targetSelectionRange)&&(s.is(D.originSelectionRange)||re.undefined(D.originSelectionRange))}N.is=G})(u||(t.LocationLink=u={}));var c;(function(N){function K(z,D,ue,Fe){return{red:z,green:D,blue:ue,alpha:Fe}}N.create=K;function G(z){var D=z;return re.objectLiteral(D)&&re.numberRange(D.red,0,1)&&re.numberRange(D.green,0,1)&&re.numberRange(D.blue,0,1)&&re.numberRange(D.alpha,0,1)}N.is=G})(c||(t.Color=c={}));var f;(function(N){function K(z,D){return{range:z,color:D}}N.create=K;function G(z){var D=z;return re.objectLiteral(D)&&s.is(D.range)&&c.is(D.color)}N.is=G})(f||(t.ColorInformation=f={}));var _;(function(N){function K(z,D,ue){return{label:z,textEdit:D,additionalTextEdits:ue}}N.create=K;function G(z){var D=z;return re.objectLiteral(D)&&re.string(D.label)&&(re.undefined(D.textEdit)||$.is(D))&&(re.undefined(D.additionalTextEdits)||re.typedArray(D.additionalTextEdits,$.is))}N.is=G})(_||(t.ColorPresentation=_={}));var p;(function(N){N.Comment="comment",N.Imports="imports",N.Region="region"})(p||(t.FoldingRangeKind=p={}));var d;(function(N){function K(z,D,ue,Fe,nt,St){var At={startLine:z,endLine:D};return re.defined(ue)&&(At.startCharacter=ue),re.defined(Fe)&&(At.endCharacter=Fe),re.defined(nt)&&(At.kind=nt),re.defined(St)&&(At.collapsedText=St),At}N.create=K;function G(z){var D=z;return re.objectLiteral(D)&&re.uinteger(D.startLine)&&re.uinteger(D.startLine)&&(re.undefined(D.startCharacter)||re.uinteger(D.startCharacter))&&(re.undefined(D.endCharacter)||re.uinteger(D.endCharacter))&&(re.undefined(D.kind)||re.string(D.kind))}N.is=G})(d||(t.FoldingRange=d={}));var v;(function(N){function K(z,D){return{location:z,message:D}}N.create=K;function G(z){var D=z;return re.defined(D)&&l.is(D.location)&&re.string(D.message)}N.is=G})(v||(t.DiagnosticRelatedInformation=v={}));var y;(function(N){N.Error=1,N.Warning=2,N.Information=3,N.Hint=4})(y||(t.DiagnosticSeverity=y={}));var h;(function(N){N.Unnecessary=1,N.Deprecated=2})(h||(t.DiagnosticTag=h={}));var g;(function(N){function K(G){var z=G;return re.objectLiteral(z)&&re.string(z.href)}N.is=K})(g||(t.CodeDescription=g={}));var T;(function(N){function K(z,D,ue,Fe,nt,St){var At={range:z,message:D};return re.defined(ue)&&(At.severity=ue),re.defined(Fe)&&(At.code=Fe),re.defined(nt)&&(At.source=nt),re.defined(St)&&(At.relatedInformation=St),At}N.create=K;function G(z){var D,ue=z;return re.defined(ue)&&s.is(ue.range)&&re.string(ue.message)&&(re.number(ue.severity)||re.undefined(ue.severity))&&(re.integer(ue.code)||re.string(ue.code)||re.undefined(ue.code))&&(re.undefined(ue.codeDescription)||re.string((D=ue.codeDescription)===null||D===void 0?void 0:D.href))&&(re.string(ue.source)||re.undefined(ue.source))&&(re.undefined(ue.relatedInformation)||re.typedArray(ue.relatedInformation,v.is))}N.is=G})(T||(t.Diagnostic=T={}));var E;(function(N){function K(z,D){for(var ue=[],Fe=2;Fe<arguments.length;Fe++)ue[Fe-2]=arguments[Fe];var nt={title:z,command:D};return re.defined(ue)&&ue.length>0&&(nt.arguments=ue),nt}N.create=K;function G(z){var D=z;return re.defined(D)&&re.string(D.title)&&re.string(D.command)}N.is=G})(E||(t.Command=E={}));var $;(function(N){function K(ue,Fe){return{range:ue,newText:Fe}}N.replace=K;function G(ue,Fe){return{range:{start:ue,end:ue},newText:Fe}}N.insert=G;function z(ue){return{range:ue,newText:""}}N.del=z;function D(ue){var Fe=ue;return re.objectLiteral(Fe)&&re.string(Fe.newText)&&s.is(Fe.range)}N.is=D})($||(t.TextEdit=$={}));var k;(function(N){function K(z,D,ue){var Fe={label:z};return D!==void 0&&(Fe.needsConfirmation=D),ue!==void 0&&(Fe.description=ue),Fe}N.create=K;function G(z){var D=z;return re.objectLiteral(D)&&re.string(D.label)&&(re.boolean(D.needsConfirmation)||D.needsConfirmation===void 0)&&(re.string(D.description)||D.description===void 0)}N.is=G})(k||(t.ChangeAnnotation=k={}));var C;(function(N){function K(G){var z=G;return re.string(z)}N.is=K})(C||(t.ChangeAnnotationIdentifier=C={}));var w;(function(N){function K(ue,Fe,nt){return{range:ue,newText:Fe,annotationId:nt}}N.replace=K;function G(ue,Fe,nt){return{range:{start:ue,end:ue},newText:Fe,annotationId:nt}}N.insert=G;function z(ue,Fe){return{range:ue,newText:"",annotationId:Fe}}N.del=z;function D(ue){var Fe=ue;return $.is(Fe)&&(k.is(Fe.annotationId)||C.is(Fe.annotationId))}N.is=D})(w||(t.AnnotatedTextEdit=w={}));var I;(function(N){function K(z,D){return{textDocument:z,edits:D}}N.create=K;function G(z){var D=z;return re.defined(D)&&Y.is(D.textDocument)&&Array.isArray(D.edits)}N.is=G})(I||(t.TextDocumentEdit=I={}));var L;(function(N){function K(z,D,ue){var Fe={kind:"create",uri:z};return D!==void 0&&(D.overwrite!==void 0||D.ignoreIfExists!==void 0)&&(Fe.options=D),ue!==void 0&&(Fe.annotationId=ue),Fe}N.create=K;function G(z){var D=z;return D&&D.kind==="create"&&re.string(D.uri)&&(D.options===void 0||(D.options.overwrite===void 0||re.boolean(D.options.overwrite))&&(D.options.ignoreIfExists===void 0||re.boolean(D.options.ignoreIfExists)))&&(D.annotationId===void 0||C.is(D.annotationId))}N.is=G})(L||(t.CreateFile=L={}));var x;(function(N){function K(z,D,ue,Fe){var nt={kind:"rename",oldUri:z,newUri:D};return ue!==void 0&&(ue.overwrite!==void 0||ue.ignoreIfExists!==void 0)&&(nt.options=ue),Fe!==void 0&&(nt.annotationId=Fe),nt}N.create=K;function G(z){var D=z;return D&&D.kind==="rename"&&re.string(D.oldUri)&&re.string(D.newUri)&&(D.options===void 0||(D.options.overwrite===void 0||re.boolean(D.options.overwrite))&&(D.options.ignoreIfExists===void 0||re.boolean(D.options.ignoreIfExists)))&&(D.annotationId===void 0||C.is(D.annotationId))}N.is=G})(x||(t.RenameFile=x={}));var V;(function(N){function K(z,D,ue){var Fe={kind:"delete",uri:z};return D!==void 0&&(D.recursive!==void 0||D.ignoreIfNotExists!==void 0)&&(Fe.options=D),ue!==void 0&&(Fe.annotationId=ue),Fe}N.create=K;function G(z){var D=z;return D&&D.kind==="delete"&&re.string(D.uri)&&(D.options===void 0||(D.options.recursive===void 0||re.boolean(D.options.recursive))&&(D.options.ignoreIfNotExists===void 0||re.boolean(D.options.ignoreIfNotExists)))&&(D.annotationId===void 0||C.is(D.annotationId))}N.is=G})(V||(t.DeleteFile=V={}));var M;(function(N){function K(G){var z=G;return z&&(z.changes!==void 0||z.documentChanges!==void 0)&&(z.documentChanges===void 0||z.documentChanges.every(function(D){return re.string(D.kind)?L.is(D)||x.is(D)||V.is(D):I.is(D)}))}N.is=K})(M||(t.WorkspaceEdit=M={}));var q=function(){function N(K,G){this.edits=K,this.changeAnnotations=G}return N.prototype.insert=function(K,G,z){var D,ue;if(z===void 0?D=$.insert(K,G):C.is(z)?(ue=z,D=w.insert(K,G,z)):(this.assertChangeAnnotations(this.changeAnnotations),ue=this.changeAnnotations.manage(z),D=w.insert(K,G,ue)),this.edits.push(D),ue!==void 0)return ue},N.prototype.replace=function(K,G,z){var D,ue;if(z===void 0?D=$.replace(K,G):C.is(z)?(ue=z,D=w.replace(K,G,z)):(this.assertChangeAnnotations(this.changeAnnotations),ue=this.changeAnnotations.manage(z),D=w.replace(K,G,ue)),this.edits.push(D),ue!==void 0)return ue},N.prototype.delete=function(K,G){var z,D;if(G===void 0?z=$.del(K):C.is(G)?(D=G,z=w.del(K,G)):(this.assertChangeAnnotations(this.changeAnnotations),D=this.changeAnnotations.manage(G),z=w.del(K,D)),this.edits.push(z),D!==void 0)return D},N.prototype.add=function(K){this.edits.push(K)},N.prototype.all=function(){return this.edits},N.prototype.clear=function(){this.edits.splice(0,this.edits.length)},N.prototype.assertChangeAnnotations=function(K){if(K===void 0)throw new Error("Text edit change is not configured to manage change annotations.")},N}(),P=function(){function N(K){this._annotations=K===void 0?Object.create(null):K,this._counter=0,this._size=0}return N.prototype.all=function(){return this._annotations},Object.defineProperty(N.prototype,"size",{get:function(){return this._size},enumerable:!1,configurable:!0}),N.prototype.manage=function(K,G){var z;if(C.is(K)?z=K:(z=this.nextId(),G=K),this._annotations[z]!==void 0)throw new Error("Id ".concat(z," is already in use."));if(G===void 0)throw new Error("No annotation provided for id ".concat(z));return this._annotations[z]=G,this._size++,z},N.prototype.nextId=function(){return this._counter++,this._counter.toString()},N}(),R=function(){function N(K){var G=this;this._textEditChanges=Object.create(null),K!==void 0?(this._workspaceEdit=K,K.documentChanges?(this._changeAnnotations=new P(K.changeAnnotations),K.changeAnnotations=this._changeAnnotations.all(),K.documentChanges.forEach(function(z){if(I.is(z)){var D=new q(z.edits,G._changeAnnotations);G._textEditChanges[z.textDocument.uri]=D}})):K.changes&&Object.keys(K.changes).forEach(function(z){var D=new q(K.changes[z]);G._textEditChanges[z]=D})):this._workspaceEdit={}}return Object.defineProperty(N.prototype,"edit",{get:function(){return this.initDocumentChanges(),this._changeAnnotations!==void 0&&(this._changeAnnotations.size===0?this._workspaceEdit.changeAnnotations=void 0:this._workspaceEdit.changeAnnotations=this._changeAnnotations.all()),this._workspaceEdit},enumerable:!1,configurable:!0}),N.prototype.getTextEditChange=function(K){if(Y.is(K)){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var G={uri:K.uri,version:K.version},z=this._textEditChanges[G.uri];if(!z){var D=[],ue={textDocument:G,edits:D};this._workspaceEdit.documentChanges.push(ue),z=new q(D,this._changeAnnotations),this._textEditChanges[G.uri]=z}return z}else{if(this.initChanges(),this._workspaceEdit.changes===void 0)throw new Error("Workspace edit is not configured for normal text edit changes.");var z=this._textEditChanges[K];if(!z){var D=[];this._workspaceEdit.changes[K]=D,z=new q(D),this._textEditChanges[K]=z}return z}},N.prototype.initDocumentChanges=function(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._changeAnnotations=new P,this._workspaceEdit.documentChanges=[],this._workspaceEdit.changeAnnotations=this._changeAnnotations.all())},N.prototype.initChanges=function(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._workspaceEdit.changes=Object.create(null))},N.prototype.createFile=function(K,G,z){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var D;k.is(G)||C.is(G)?D=G:z=G;var ue,Fe;if(D===void 0?ue=L.create(K,z):(Fe=C.is(D)?D:this._changeAnnotations.manage(D),ue=L.create(K,z,Fe)),this._workspaceEdit.documentChanges.push(ue),Fe!==void 0)return Fe},N.prototype.renameFile=function(K,G,z,D){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var ue;k.is(z)||C.is(z)?ue=z:D=z;var Fe,nt;if(ue===void 0?Fe=x.create(K,G,D):(nt=C.is(ue)?ue:this._changeAnnotations.manage(ue),Fe=x.create(K,G,D,nt)),this._workspaceEdit.documentChanges.push(Fe),nt!==void 0)return nt},N.prototype.deleteFile=function(K,G,z){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var D;k.is(G)||C.is(G)?D=G:z=G;var ue,Fe;if(D===void 0?ue=V.create(K,z):(Fe=C.is(D)?D:this._changeAnnotations.manage(D),ue=V.create(K,z,Fe)),this._workspaceEdit.documentChanges.push(ue),Fe!==void 0)return Fe},N}();t.WorkspaceChange=R;var te;(function(N){function K(z){return{uri:z}}N.create=K;function G(z){var D=z;return re.defined(D)&&re.string(D.uri)}N.is=G})(te||(t.TextDocumentIdentifier=te={}));var j;(function(N){function K(z,D){return{uri:z,version:D}}N.create=K;function G(z){var D=z;return re.defined(D)&&re.string(D.uri)&&re.integer(D.version)}N.is=G})(j||(t.VersionedTextDocumentIdentifier=j={}));var Y;(function(N){function K(z,D){return{uri:z,version:D}}N.create=K;function G(z){var D=z;return re.defined(D)&&re.string(D.uri)&&(D.version===null||re.integer(D.version))}N.is=G})(Y||(t.OptionalVersionedTextDocumentIdentifier=Y={}));var le;(function(N){function K(z,D,ue,Fe){return{uri:z,languageId:D,version:ue,text:Fe}}N.create=K;function G(z){var D=z;return re.defined(D)&&re.string(D.uri)&&re.string(D.languageId)&&re.integer(D.version)&&re.string(D.text)}N.is=G})(le||(t.TextDocumentItem=le={}));var Z;(function(N){N.PlainText="plaintext",N.Markdown="markdown";function K(G){var z=G;return z===N.PlainText||z===N.Markdown}N.is=K})(Z||(t.MarkupKind=Z={}));var ce;(function(N){function K(G){var z=G;return re.objectLiteral(G)&&Z.is(z.kind)&&re.string(z.value)}N.is=K})(ce||(t.MarkupContent=ce={}));var Te;(function(N){N.Text=1,N.Method=2,N.Function=3,N.Constructor=4,N.Field=5,N.Variable=6,N.Class=7,N.Interface=8,N.Module=9,N.Property=10,N.Unit=11,N.Value=12,N.Enum=13,N.Keyword=14,N.Snippet=15,N.Color=16,N.File=17,N.Reference=18,N.Folder=19,N.EnumMember=20,N.Constant=21,N.Struct=22,N.Event=23,N.Operator=24,N.TypeParameter=25})(Te||(t.CompletionItemKind=Te={}));var Se;(function(N){N.PlainText=1,N.Snippet=2})(Se||(t.InsertTextFormat=Se={}));var ge;(function(N){N.Deprecated=1})(ge||(t.CompletionItemTag=ge={}));var be;(function(N){function K(z,D,ue){return{newText:z,insert:D,replace:ue}}N.create=K;function G(z){var D=z;return D&&re.string(D.newText)&&s.is(D.insert)&&s.is(D.replace)}N.is=G})(be||(t.InsertReplaceEdit=be={}));var De;(function(N){N.asIs=1,N.adjustIndentation=2})(De||(t.InsertTextMode=De={}));var ze;(function(N){function K(G){var z=G;return z&&(re.string(z.detail)||z.detail===void 0)&&(re.string(z.description)||z.description===void 0)}N.is=K})(ze||(t.CompletionItemLabelDetails=ze={}));var We;(function(N){function K(G){return{label:G}}N.create=K})(We||(t.CompletionItem=We={}));var pe;(function(N){function K(G,z){return{items:G||[],isIncomplete:!!z}}N.create=K})(pe||(t.CompletionList=pe={}));var fe;(function(N){function K(z){return z.replace(/[\\`*_{}[\]()#+\-.!]/g,"\\$&")}N.fromPlainText=K;function G(z){var D=z;return re.string(D)||re.objectLiteral(D)&&re.string(D.language)&&re.string(D.value)}N.is=G})(fe||(t.MarkedString=fe={}));var $e;(function(N){function K(G){var z=G;return!!z&&re.objectLiteral(z)&&(ce.is(z.contents)||fe.is(z.contents)||re.typedArray(z.contents,fe.is))&&(G.range===void 0||s.is(G.range))}N.is=K})($e||(t.Hover=$e={}));var Le;(function(N){function K(G,z){return z?{label:G,documentation:z}:{label:G}}N.create=K})(Le||(t.ParameterInformation=Le={}));var Me;(function(N){function K(G,z){for(var D=[],ue=2;ue<arguments.length;ue++)D[ue-2]=arguments[ue];var Fe={label:G};return re.defined(z)&&(Fe.documentation=z),re.defined(D)?Fe.parameters=D:Fe.parameters=[],Fe}N.create=K})(Me||(t.SignatureInformation=Me={}));var Ze;(function(N){N.Text=1,N.Read=2,N.Write=3})(Ze||(t.DocumentHighlightKind=Ze={}));var $t;(function(N){function K(G,z){var D={range:G};return re.number(z)&&(D.kind=z),D}N.create=K})($t||(t.DocumentHighlight=$t={}));var It;(function(N){N.File=1,N.Module=2,N.Namespace=3,N.Package=4,N.Class=5,N.Method=6,N.Property=7,N.Field=8,N.Constructor=9,N.Enum=10,N.Interface=11,N.Function=12,N.Variable=13,N.Constant=14,N.String=15,N.Number=16,N.Boolean=17,N.Array=18,N.Object=19,N.Key=20,N.Null=21,N.EnumMember=22,N.Struct=23,N.Event=24,N.Operator=25,N.TypeParameter=26})(It||(t.SymbolKind=It={}));var jt;(function(N){N.Deprecated=1})(jt||(t.SymbolTag=jt={}));var st;(function(N){function K(G,z,D,ue,Fe){var nt={name:G,kind:z,location:{uri:ue,range:D}};return Fe&&(nt.containerName=Fe),nt}N.create=K})(st||(t.SymbolInformation=st={}));var Ct;(function(N){function K(G,z,D,ue){return ue!==void 0?{name:G,kind:z,location:{uri:D,range:ue}}:{name:G,kind:z,location:{uri:D}}}N.create=K})(Ct||(t.WorkspaceSymbol=Ct={}));var rn;(function(N){function K(z,D,ue,Fe,nt,St){var At={name:z,detail:D,kind:ue,range:Fe,selectionRange:nt};return St!==void 0&&(At.children=St),At}N.create=K;function G(z){var D=z;return D&&re.string(D.name)&&re.number(D.kind)&&s.is(D.range)&&s.is(D.selectionRange)&&(D.detail===void 0||re.string(D.detail))&&(D.deprecated===void 0||re.boolean(D.deprecated))&&(D.children===void 0||Array.isArray(D.children))&&(D.tags===void 0||Array.isArray(D.tags))}N.is=G})(rn||(t.DocumentSymbol=rn={}));var Bt;(function(N){N.Empty="",N.QuickFix="quickfix",N.Refactor="refactor",N.RefactorExtract="refactor.extract",N.RefactorInline="refactor.inline",N.RefactorRewrite="refactor.rewrite",N.Source="source",N.SourceOrganizeImports="source.organizeImports",N.SourceFixAll="source.fixAll"})(Bt||(t.CodeActionKind=Bt={}));var gt;(function(N){N.Invoked=1,N.Automatic=2})(gt||(t.CodeActionTriggerKind=gt={}));var ut;(function(N){function K(z,D,ue){var Fe={diagnostics:z};return D!=null&&(Fe.only=D),ue!=null&&(Fe.triggerKind=ue),Fe}N.create=K;function G(z){var D=z;return re.defined(D)&&re.typedArray(D.diagnostics,T.is)&&(D.only===void 0||re.typedArray(D.only,re.string))&&(D.triggerKind===void 0||D.triggerKind===gt.Invoked||D.triggerKind===gt.Automatic)}N.is=G})(ut||(t.CodeActionContext=ut={}));var Nt;(function(N){function K(z,D,ue){var Fe={title:z},nt=!0;return typeof D=="string"?(nt=!1,Fe.kind=D):E.is(D)?Fe.command=D:Fe.edit=D,nt&&ue!==void 0&&(Fe.kind=ue),Fe}N.create=K;function G(z){var D=z;return D&&re.string(D.title)&&(D.diagnostics===void 0||re.typedArray(D.diagnostics,T.is))&&(D.kind===void 0||re.string(D.kind))&&(D.edit!==void 0||D.command!==void 0)&&(D.command===void 0||E.is(D.command))&&(D.isPreferred===void 0||re.boolean(D.isPreferred))&&(D.edit===void 0||M.is(D.edit))}N.is=G})(Nt||(t.CodeAction=Nt={}));var Yt;(function(N){function K(z,D){var ue={range:z};return re.defined(D)&&(ue.data=D),ue}N.create=K;function G(z){var D=z;return re.defined(D)&&s.is(D.range)&&(re.undefined(D.command)||E.is(D.command))}N.is=G})(Yt||(t.CodeLens=Yt={}));var wt;(function(N){function K(z,D){return{tabSize:z,insertSpaces:D}}N.create=K;function G(z){var D=z;return re.defined(D)&&re.uinteger(D.tabSize)&&re.boolean(D.insertSpaces)}N.is=G})(wt||(t.FormattingOptions=wt={}));var Ft;(function(N){function K(z,D,ue){return{range:z,target:D,data:ue}}N.create=K;function G(z){var D=z;return re.defined(D)&&s.is(D.range)&&(re.undefined(D.target)||re.string(D.target))}N.is=G})(Ft||(t.DocumentLink=Ft={}));var ee;(function(N){function K(z,D){return{range:z,parent:D}}N.create=K;function G(z){var D=z;return re.objectLiteral(D)&&s.is(D.range)&&(D.parent===void 0||N.is(D.parent))}N.is=G})(ee||(t.SelectionRange=ee={}));var W;(function(N){N.namespace="namespace",N.type="type",N.class="class",N.enum="enum",N.interface="interface",N.struct="struct",N.typeParameter="typeParameter",N.parameter="parameter",N.variable="variable",N.property="property",N.enumMember="enumMember",N.event="event",N.function="function",N.method="method",N.macro="macro",N.keyword="keyword",N.modifier="modifier",N.comment="comment",N.string="string",N.number="number",N.regexp="regexp",N.operator="operator",N.decorator="decorator"})(W||(t.SemanticTokenTypes=W={}));var oe;(function(N){N.declaration="declaration",N.definition="definition",N.readonly="readonly",N.static="static",N.deprecated="deprecated",N.abstract="abstract",N.async="async",N.modification="modification",N.documentation="documentation",N.defaultLibrary="defaultLibrary"})(oe||(t.SemanticTokenModifiers=oe={}));var me;(function(N){function K(G){var z=G;return re.objectLiteral(z)&&(z.resultId===void 0||typeof z.resultId=="string")&&Array.isArray(z.data)&&(z.data.length===0||typeof z.data[0]=="number")}N.is=K})(me||(t.SemanticTokens=me={}));var de;(function(N){function K(z,D){return{range:z,text:D}}N.create=K;function G(z){var D=z;return D!=null&&s.is(D.range)&&re.string(D.text)}N.is=G})(de||(t.InlineValueText=de={}));var ye;(function(N){function K(z,D,ue){return{range:z,variableName:D,caseSensitiveLookup:ue}}N.create=K;function G(z){var D=z;return D!=null&&s.is(D.range)&&re.boolean(D.caseSensitiveLookup)&&(re.string(D.variableName)||D.variableName===void 0)}N.is=G})(ye||(t.InlineValueVariableLookup=ye={}));var he;(function(N){function K(z,D){return{range:z,expression:D}}N.create=K;function G(z){var D=z;return D!=null&&s.is(D.range)&&(re.string(D.expression)||D.expression===void 0)}N.is=G})(he||(t.InlineValueEvaluatableExpression=he={}));var Be;(function(N){function K(z,D){return{frameId:z,stoppedLocation:D}}N.create=K;function G(z){var D=z;return re.defined(D)&&s.is(z.stoppedLocation)}N.is=G})(Be||(t.InlineValueContext=Be={}));var qe;(function(N){N.Type=1,N.Parameter=2;function K(G){return G===1||G===2}N.is=K})(qe||(t.InlayHintKind=qe={}));var Pe;(function(N){function K(z){return{value:z}}N.create=K;function G(z){var D=z;return re.objectLiteral(D)&&(D.tooltip===void 0||re.string(D.tooltip)||ce.is(D.tooltip))&&(D.location===void 0||l.is(D.location))&&(D.command===void 0||E.is(D.command))}N.is=G})(Pe||(t.InlayHintLabelPart=Pe={}));var ie;(function(N){function K(z,D,ue){var Fe={position:z,label:D};return ue!==void 0&&(Fe.kind=ue),Fe}N.create=K;function G(z){var D=z;return re.objectLiteral(D)&&a.is(D.position)&&(re.string(D.label)||re.typedArray(D.label,Pe.is))&&(D.kind===void 0||qe.is(D.kind))&&D.textEdits===void 0||re.typedArray(D.textEdits,$.is)&&(D.tooltip===void 0||re.string(D.tooltip)||ce.is(D.tooltip))&&(D.paddingLeft===void 0||re.boolean(D.paddingLeft))&&(D.paddingRight===void 0||re.boolean(D.paddingRight))}N.is=G})(ie||(t.InlayHint=ie={}));var ae;(function(N){function K(G){return{kind:"snippet",value:G}}N.createSnippet=K})(ae||(t.StringValue=ae={}));var we;(function(N){function K(G,z,D,ue){return{insertText:G,filterText:z,range:D,command:ue}}N.create=K})(we||(t.InlineCompletionItem=we={}));var Ne;(function(N){function K(G){return{items:G}}N.create=K})(Ne||(t.InlineCompletionList=Ne={}));var tt;(function(N){N.Invoked=0,N.Automatic=1})(tt||(t.InlineCompletionTriggerKind=tt={}));var Ae;(function(N){function K(G,z){return{range:G,text:z}}N.create=K})(Ae||(t.SelectedCompletionInfo=Ae={}));var He;(function(N){function K(G,z){return{triggerKind:G,selectedCompletionInfo:z}}N.create=K})(He||(t.InlineCompletionContext=He={}));var Qe;(function(N){function K(G){var z=G;return re.objectLiteral(z)&&r.is(z.uri)&&re.string(z.name)}N.is=K})(Qe||(t.WorkspaceFolder=Qe={})),t.EOL=[`
33
33
  `,`\r
34
34
  `,"\r"];var Je;(function(N){function K(ue,Fe,nt,St){return new lt(ue,Fe,nt,St)}N.create=K;function G(ue){var Fe=ue;return!!(re.defined(Fe)&&re.string(Fe.uri)&&(re.undefined(Fe.languageId)||re.string(Fe.languageId))&&re.uinteger(Fe.lineCount)&&re.func(Fe.getText)&&re.func(Fe.positionAt)&&re.func(Fe.offsetAt))}N.is=G;function z(ue,Fe){for(var nt=ue.getText(),St=D(Fe,function(jr,Ti){var oo=jr.range.start.line-Ti.range.start.line;return oo===0?jr.range.start.character-Ti.range.start.character:oo}),At=nt.length,$n=St.length-1;$n>=0;$n--){var sr=St[$n],xn=ue.offsetAt(sr.range.start),Pt=ue.offsetAt(sr.range.end);if(Pt<=At)nt=nt.substring(0,xn)+sr.newText+nt.substring(Pt,nt.length);else throw new Error("Overlapping edit");At=xn}return nt}N.applyEdits=z;function D(ue,Fe){if(ue.length<=1)return ue;var nt=ue.length/2|0,St=ue.slice(0,nt),At=ue.slice(nt);D(St,Fe),D(At,Fe);for(var $n=0,sr=0,xn=0;$n<St.length&&sr<At.length;){var Pt=Fe(St[$n],At[sr]);Pt<=0?ue[xn++]=St[$n++]:ue[xn++]=At[sr++]}for(;$n<St.length;)ue[xn++]=St[$n++];for(;sr<At.length;)ue[xn++]=At[sr++];return ue}})(Je||(t.TextDocument=Je={}));var lt=function(){function N(K,G,z,D){this._uri=K,this._languageId=G,this._version=z,this._content=D,this._lineOffsets=void 0}return Object.defineProperty(N.prototype,"uri",{get:function(){return this._uri},enumerable:!1,configurable:!0}),Object.defineProperty(N.prototype,"languageId",{get:function(){return this._languageId},enumerable:!1,configurable:!0}),Object.defineProperty(N.prototype,"version",{get:function(){return this._version},enumerable:!1,configurable:!0}),N.prototype.getText=function(K){if(K){var G=this.offsetAt(K.start),z=this.offsetAt(K.end);return this._content.substring(G,z)}return this._content},N.prototype.update=function(K,G){this._content=K.text,this._version=G,this._lineOffsets=void 0},N.prototype.getLineOffsets=function(){if(this._lineOffsets===void 0){for(var K=[],G=this._content,z=!0,D=0;D<G.length;D++){z&&(K.push(D),z=!1);var ue=G.charAt(D);z=ue==="\r"||ue===`
35
35
  `,ue==="\r"&&D+1<G.length&&G.charAt(D+1)===`
@@ -76,9 +76,9 @@ ${n.map(r=>A(r)).join(`
76
76
  ${e}
77
77
  // === END auto-generated code ===
78
78
  `,inputString:e});if(t.getParserError())throw t.getParserError();return t.getProgram()}var Sr=(pe=>(pe.Unit="unit",pe.Bool="bool",pe.Usize="usize",pe.Isize="isize",pe.U8="u8",pe.I8="i8",pe.U16="u16",pe.I16="i16",pe.U32="u32",pe.I32="i32",pe.U64="u64",pe.I64="i64",pe.F32="f32",pe.F64="f64",pe.ComptimeInt="comptime_int",pe.ComptimeFloat="comptime_float",pe.ComptimeString="comptime_string",pe.Char="char",pe.Short="short",pe.UShort="ushort",pe.Int="int",pe.UInt="uint",pe.Long="long",pe.ULong="ulong",pe.LongLong="longlong",pe.ULongLong="ulonglong",pe.LongDouble="longdouble",pe.Void="void",pe.Type="Type",pe.Array="Array",pe.Tuple="Tuple",pe.Struct="Struct",pe.Enum="Enum",pe.Union="Union",pe.Function="Function",pe.SomeType="SomeType",pe.Slice="Slice",pe.Module="Module",pe.Trait="Trait",pe.Ptr="Ptr",pe.Iso="Iso",pe.Dyn="Dyn",pe.Expr="Expr",pe.ComptimeList="ComptimeList",pe.EffectsRow="EffectsRow",pe.TypeApplication="TypeApplication",pe))(Sr||{});function Ol(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 Ke(e){return(e==null?void 0:e.tag)==="unit"}function yn(e){return(e==null?void 0:e.tag)==="comptime_int"}function On(e){return(e==null?void 0:e.tag)==="comptime_float"}function gn(e){return(e==null?void 0:e.tag)==="comptime_string"}function vn(e){return(e==null?void 0:e.tag)==="ComptimeList"}function Va(e){return vn(e)&&Pn(e.childType)}function Mr(e){return(e==null?void 0:e.tag)==="bool"}function Pl(e){return(e==null?void 0:e.tag)==="usize"}function Ul(e){return(e==null?void 0:e.tag)==="isize"}function Yi(e){return(e==null?void 0:e.tag)==="u8"}function zl(e){return(e==null?void 0:e.tag)==="i8"}function Bl(e){return(e==null?void 0:e.tag)==="u16"}function ql(e){return(e==null?void 0:e.tag)==="i16"}function Gl(e){return(e==null?void 0:e.tag)==="u32"}function Wl(e){return(e==null?void 0:e.tag)==="i32"}function jl(e){return(e==null?void 0:e.tag)==="u64"}function Hl(e){return(e==null?void 0:e.tag)==="i64"}function Yl(e){return(e==null?void 0:e.tag)==="f32"}function Kl(e){return(e==null?void 0:e.tag)==="f64"}function Pn(e){return(e==null?void 0:e.tag)==="Expr"}function ft(e){return(e==null?void 0:e.tag)==="Array"}function Vt(e){return(e==null?void 0:e.tag)==="Slice"}function Tt(e){return(e==null?void 0:e.tag)==="Tuple"}function Ht(e){return(e==null?void 0:e.tag)==="Union"}function Ye(e){return(e==null?void 0:e.tag)==="Enum"}function Oe(e){return(e==null?void 0:e.tag)==="Struct"}function dn(e){return(e==null?void 0:e.tag)==="Struct"&&e.isReferenceSemantics}function uo(e){return(e==null?void 0:e.tag)==="Struct"&&e.isReferenceSemantics&&e.isAtomicRc===!0}function Qr(e){return(e==null?void 0:e.tag)==="Struct"&&e.isNewtype}function rt(e){return(e==null?void 0:e.tag)==="Module"}function _t(e){return(e==null?void 0:e.tag)==="Trait"}function Dn(e){return _t(e)&&e.isFn!==void 0}function _e(e){return(e==null?void 0:e.tag)==="Function"}function Xl(e){return(e==null?void 0:e.tag)==="Function"&&e.return.isCompileTimeOnly}function Lt(e){return(e==null?void 0:e.tag)==="Type"}function KT(e){return Lt(e)&&e.tag==="Type"&&e.level===0}function H(e){return(e==null?void 0:e.tag)==="SomeType"}function et(e){return(e==null?void 0:e.tag)==="Ptr"}function Vn(e){return(e==null?void 0:e.tag)==="Iso"}function ht(e){return(e==null?void 0:e.tag)==="Dyn"}function Io(e){return(e==null?void 0:e.tag)==="TypeApplication"}function Ar(e){if(H(e)){let t=e;if(yt(t))return!0;if(t.resolvedConcreteType)return Ar(t.resolvedConcreteType)}return dn(e)||ht(e)||Vn(e)}function co(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 fo(e){return(e==null?void 0:e.tag)==="f32"||(e==null?void 0:e.tag)==="f64"}function XT(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 Is(e){return(e==null?void 0:e.tag)==="char"}function So(e){return(e==null?void 0:e.tag)==="void"}function dr(e){return _t(e)&&e.isFuture!==void 0}function Kc(e){return _t(e)&&e.isConcrete!==void 0}function Ki(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 Di(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&&H(i.type)&&!yt(i.type));return t||n}function _o(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&&H(i.type)&&!yt(i.type));return t||n}function jd(e){var n;let t=e.type;return t?Di(t)&&(((n=e.specializedFunctionCaches)==null?void 0:n.length)??0)>0:!1}function hr(e){var t;return dn(e)?e.fields.length===1&&e.fields[0].label==="*"&&!!((t=e.typeName)!=null&&t.startsWith("Box(")):!1}function ln(e){return(e==null?void 0:e.tag)==="EffectsRow"}function Xc(e,t,n){let r=!1,i=0;for(let o of t){let a=o.type;if(n.includes(o))throw m({token:n[n.length-1].exprs.expr.token,errorMessage:`Recursive type has infinite size in field "${n[n.length-1].label}"
79
- Insert some indirection (e.g., a pointer '*' or reference '&') to break the cycle.`});if(dn(a))continue;let s=[...n,o],l=In(a,s);Lt(l)&&(i=Math.max(i,l.level),l.tag==="Type"&&(r=!0))}return i>0?Br(i):r?en(e):en(e)}function In(e,t=[]){if(ht(e))return en(e);if(Ol(e))return en(e);if(Lt(e))return Br(e.level+1);if(yn(e)||On(e)||gn(e)||vn(e))return en(e);if(Pn(e))return en(e);if(_e(e))return en(e);if(Dn(e))return en(e);if(ft(e))return In(e.childType,t);if(Vt(e))return en(e);if(Tt(e))return Xc(e,e.fields,t);if(Oe(e))return Xc(e,e.fields,t);if(Ye(e)){let n=[];for(let r of e.variants)r.fields&&n.push(...r.fields);return Xc(e,n,t)}else{if(Ht(e))return Xc(e,e.fields,t);if(rt(e))return Br(1,e);if(_t(e))return Br(1,e);if(H(e))return e.parentType;if(et(e))return en(e);if(Vn(e))return en(e);if(dr(e))return en(e);if(So(e))return en(e);if(ln(e))return Br(1);throw new Error(`Unknown type tag: ${e.tag}`)}}function QT(e){var t,n,r;if((t=e.exprs.labelExpr)!=null&&t.token)return e.exprs.labelExpr.token;if((n=e.exprs.typeExpr)!=null&&n.token)return e.exprs.typeExpr.token;if((r=e.exprs.defaultValueExpr)!=null&&r.token)return e.exprs.defaultValueExpr.token;throw new Error("Cannot get token for function parameter")}function bt(e){if(!e)return"<runtime value>";switch(e.tag){case"Type":return O(e.value);case"ComptimeInt":case"ComptimeFloat":return e.value.toString();case"ComptimeString":return JSON.stringify(e.value);case"ComptimeList":return`comptime_list(${e.elements.map(bt).join(", ")})`;case"U8":case"I8":case"U16":case"I16":case"U32":case"I32":case"U64":case"I64":case"F32":case"F64":case"Usize":case"Isize":return typeof e.value=="bigint",e.value.toString();case"Bool":return e.value.toString();case"Array":return`[${e.elements.map(bt).join(", ")}${e.elements.length===1?",":""}]`;case"Slice":return`slice[${e.sourceArray[0].elements.slice(e.startIndex,e.endIndex).map(bt).join(", ")}]`;case"Tuple":return e.fields.length===0?"()":`(${e.fields.map(bt).join(", ")}${e.fields.length===1?",":""})`;case"Struct":return`${e.type.typeName??"_"}(${e.fields.map((t,n)=>{let r=e.type.fields[n].label;return mi(r)&&(r=`(${r})`),`${r}: ${bt(t)}`}).join(", ")})`;case"Enum":{if(e.fields.length===0)return`.${e.variantName}`;let t=e.type.variants.find(n=>n.name===e.variantName);return`.${e.variantName}(${e.fields.map((n,r)=>{let i=(t==null?void 0:t.fields[r].label)??"_";return mi(i)&&(i=`(${i})`),`${i}: ${bt(n)}`}).join(", ")})`}case"Function":return e.funcName?`<fn ${e.funcName}>`:e.type.typeName?`<fn ${e.type.typeName}>`:"<fn>";case"Module":return`${e.type.typeName??"_"}(${e.fields.map((t,n)=>{let r=e.type.fields[n].label;return mi(r)&&(r=`(${r})`),`${r}: ${bt(t)}`}).join(", ")})`;case"Trait":return`${e.type.typeName??"_"}(${e.fields.map((t,n)=>{let r=e.type.fields[n].label;return mi(r)&&(r=`(${r})`),`${r}: ${bt(t)}`}).join(", ")})`;case"Unit":return"()";case"Expr":return`quote(${A(e.value)})`;case"Unknown":return e.variableName?e.variableName:`<comptime ${O(e.type)}>`;case"Ptr":{let t=e.targetValue[0];return qr(t)?`<ptr to ${bt(t.elements[e.targetIndex])}>`:`<ptr to ${bt(t)}>`}default:throw new Error("valueToString: Unsupported value")}}function X(e){return(e==null?void 0:e.tag)==="Type"}function Gr(e){return(e==null?void 0:e.tag)==="ComptimeInt"}function Qc(e){return(e==null?void 0:e.tag)==="ComptimeFloat"}function pt(e){return(e==null?void 0:e.tag)==="ComptimeString"}function Jr(e){return(e==null?void 0:e.tag)==="ComptimeList"}function JT(e){return Jr(e)&&Pn(e.type.childType)}function Mt(e){return(e==null?void 0:e.tag)==="ComptimeInt"||(e==null?void 0:e.tag)==="ComptimeFloat"||(e==null?void 0:e.tag)==="U8"||(e==null?void 0:e.tag)==="I8"||(e==null?void 0:e.tag)==="U16"||(e==null?void 0:e.tag)==="I16"||(e==null?void 0:e.tag)==="U32"||(e==null?void 0:e.tag)==="I32"||(e==null?void 0:e.tag)==="U64"||(e==null?void 0:e.tag)==="I64"||(e==null?void 0:e.tag)==="F32"||(e==null?void 0:e.tag)==="F64"||(e==null?void 0:e.tag)==="Usize"||(e==null?void 0:e.tag)==="Isize"}function Ut(e){return(e==null?void 0:e.tag)==="Bool"}function Se(e){return(e==null?void 0:e.tag)==="Function"}function Ge(e){return(e==null?void 0:e.tag)==="Unknown"}function kr(e){return(e==null?void 0:e.tag)==="Tuple"}function qn(e){return(e==null?void 0:e.tag)==="Struct"}function qr(e){return(e==null?void 0:e.tag)==="Array"}function Ma(e){return(e==null?void 0:e.tag)==="Slice"}function Sn(e){return(e==null?void 0:e.tag)==="Enum"}function Rt(e){return(e==null?void 0:e.tag)==="Module"}function on(e){return(e==null?void 0:e.tag)==="Trait"}function bi(e){return(e==null?void 0:e.tag)==="Ptr"}function rr(e){return(e==null?void 0:e.tag)==="Expr"}function xe(e){return{tag:"Type",type:In(e),value:e}}function Gn(e){return{tag:"ComptimeString",type:Wn(),value:e}}function wr(e,t){return{tag:"ComptimeList",type:Ao(e),elements:t}}function mr(e,t){let n;if(e==="ComptimeInt")n=po();else if(e==="ComptimeFloat")n=xs();else if(e==="U8")n=Ds();else if(e==="I8")n=Vs();else if(e==="U16")n=Ms();else if(e==="I16")n=Rs();else if(e==="U32")n=Os();else if(e==="I32")n=la();else if(e==="U64")n=Ps();else if(e==="I64")n=Us();else if(e==="F32")n=zs();else if(e==="F64")n=ua();else if(e==="Usize")n=Mn();else if(e==="Isize")n=Ns();else throw new Error(`createNumberValue: Unsupported tag: ${e}`);return{tag:e,type:n,value:t}}function Vi(e){return mr("ComptimeInt",e)}function Jc(e){return mr("ComptimeFloat",e)}function pn(e){return{tag:"Bool",type:tn(),value:e}}function Ee(e,{variableName:t,recursiveTypeRef:n,env:r,context:i}){if(Lt(e)&&e.level===0){if(!t)throw console.trace("!variableName bug found in createUnknownValue"),new Error(`createUnknownValue expects a variable name for type ${O(e)}`);let o=Zr(e,t,{recursiveTypeRef:n,env:r,context:i});return xe(o)}if(_e(e)&&t){let o=e;if(o.return.isCompileTimeOnly&&Lt(o.return.type)&&o.return.type.level===0&&o.parameters.every(s=>s.isCompileTimeOnly)){let s=Zr(o.return.type,t,{recursiveTypeRef:n,env:r,context:i});return s.kindFunctionType=o,xe(s)}}return{tag:"Unknown",type:e,variableName:t}}function Mi(e,t){return{tag:"Struct",type:e,fields:t}}function ZT(e,t,n){return{tag:"Module",type:e,fields:t,moduleLevelInitExprs:n&&n.length>0?n:void 0}}function Ss(e,t){return{tag:"Trait",type:e,fields:t}}function Zc(e,t){return{tag:"Tuple",type:e,fields:t}}function Ra(e,t,n){return{tag:"Enum",type:e,variantName:t,fields:n}}function aa(e,t){return{tag:"Array",type:e,elements:t}}function As(e,t,n,r){return{tag:"Slice",type:e,sourceArray:t,startIndex:n,endIndex:r}}function vr(e){return{tag:"Expr",type:ir(),value:e}}function sa(e,t,n=0){return{tag:"Ptr",type:e,targetValue:t,targetIndex:n}}function Un(e,t){let n=e.value,r=t.value;if(n===r)return!0;if(!n||!r)return!1;if(n.tag==="Type"&&r.tag==="Type")return Ce({type:n.value,env:e.env},{type:r.value,env:t.env},!0);if(pt(n)&&pt(r))return n.value===r.value;if(Jr(n)&&Jr(r)){if(n.elements.length!==r.elements.length)return!1;for(let i=0;i<n.elements.length;i++)if(!Un({value:n.elements[i],env:e.env},{value:r.elements[i],env:t.env}))return!1;return!0}else if(Mt(n)&&Mt(r)){let i=n.value,o=r.value;if(typeof i==typeof o)return i===o;let a=typeof i=="bigint"?i:BigInt(i),s=typeof o=="bigint"?o:BigInt(o);return a===s}else{if(Ut(n)&&Ut(r))return n.value===r.value;if(qr(n)&&qr(r)){if(n.elements.length!==r.elements.length)return!1;for(let i=0;i<n.elements.length;i++)if(!Un({value:n.elements[i],env:e.env},{value:r.elements[i],env:t.env}))return!1;return!0}else if(Ma(n)&&Ma(r)){let i=n.endIndex-n.startIndex,o=r.endIndex-r.startIndex;if(i!==o)return!1;for(let a=0;a<i;a++){let s=n.sourceArray[0].elements[n.startIndex+a],l=r.sourceArray[0].elements[r.startIndex+a];if(!Un({value:s,env:e.env},{value:l,env:t.env}))return!1}return!0}else if(kr(n)&&kr(r)){if(n.fields.length!==r.fields.length)return!1;for(let i=0;i<n.fields.length;i++)if(!Un({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(qn(n)&&qn(r)){if(n.fields.length!==r.fields.length||!Ce({type:n.type,env:e.env},{type:r.type,env:t.env},!0))return!1;for(let i=0;i<n.fields.length;i++)if(!Un({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(Sn(n)&&Sn(r)){if(n.fields.length!==r.fields.length||!Ce({type:n.type,env:e.env},{type:r.type,env:t.env},!0)||n.variantName!==r.variantName)return!1;for(let i=0;i<n.fields.length;i++)if(!Un({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(Rt(n)&&Rt(r)){if(n.fields.length!==r.fields.length||!Ce({type:n.type,env:e.env},{type:r.type,env:t.env},!0))return!1;for(let i=0;i<n.fields.length;i++)if(!Un({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(on(n)&&on(r)){if(n.fields.length!==r.fields.length||!Ce({type:n.type,env:e.env},{type:r.type,env:t.env},!0))return!1;for(let i=0;i<n.fields.length;i++)if(!Un({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else{if(rr(n)&&rr(r))return n.value===r.value||ef(n.value,r.value);if(Ge(n)&&Ge(r)){let i,o;if(n.variableName){let a=ve(e.env,n.variableName);if(a.length>0){let s=a[a.length-1];s.value&&!Ge(s.value[0])&&(i=s.value[0])}}if(r.variableName){let a=ve(t.env,r.variableName);if(a.length>0){let s=a[a.length-1];s.value&&!Ge(s.value[0])&&(o=s.value[0])}}return i&&o?Un({value:i,env:e.env},{value:o,env:t.env}):i||o?!1:Ce({type:n.type,env:e.env},{type:r.type,env:t.env},!0)}else if(Ge(n)&&!Ge(r)){if(n.variableName){let i=ve(e.env,n.variableName);if(i.length>0){let o=i[i.length-1];if(o.value&&!Ge(o.value[0]))return Un({value:o.value[0],env:e.env},{value:r,env:t.env})}}return!1}else if(!Ge(n)&&Ge(r)){if(r.variableName){let i=ve(t.env,r.variableName);if(i.length>0){let o=i[i.length-1];if(o.value&&!Ge(o.value[0]))return Un({value:n,env:e.env},{value:o.value[0],env:t.env})}}return!1}else return bi(n)&&bi(r)?n.targetValue===r.targetValue&&n.targetIndex===r.targetIndex:!1}}}function yo(e,t){return e?Oa(e,t):!1}function go(e,t){return e?RS(e,t):!1}function Oa(e,t){return Zi(e,t)&&!Do(e,t)}function RS(e,t){let n=Zi(e,t),r=Do(e,t);return!n&&r}function mt(e,t=[]){if(!e||t.includes(e)||(t.push(e),e.isExtern))return!1;if(Ar(e))return!0;switch(e.tag){case"Array":return mt(e.childType,t);case"Tuple":return e.fields.some(n=>mt(n.type,t));case"Union":return e.fields.some(n=>mt(n.type,t));case"Struct":return e.fields.some(n=>mt(n.type,t));case"Enum":return e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(i=>mt(i.type,t))});case"Iso":return mt(e.childType,t);case"Module":return!1;case"Function":return!1;case"SomeType":{let n=e;return yt(n)?!0:n.resolvedConcreteType?mt(n.resolvedConcreteType,t):!0}default:return!1}}function Xe(e,t=[]){if(!e||t.includes(e))return!1;if(t.push(e),H(e))return e.isExtern?!1:e.resolvedConcreteType?Xe(e.resolvedConcreteType,t):!(ur(e)||yt(e));switch(e.tag){case"Array":return Xe(e.childType,t);case"Tuple":return e.fields.some(n=>Xe(n.type,t));case"Struct":return e.fields.some(n=>!n.isEffectParam&&Xe(n.type,t));case"Enum":return e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(i=>Xe(i.type,t))});case"Union":return e.fields.some(n=>Xe(n.type,t));case"Function":{let n=e;return n.forallParameters.length>0||n.parameters.some(r=>Xe(r.type,t))||Xe(n.return.type,t)}case"Module":return e.fields.some(n=>Xe(n.type,t));case"Ptr":return Xe(e.childType,t);case"Slice":return Xe(e.childType,t);case"TypeApplication":return!0;default:return!1}}function xo(e,t=new Set){return t.has(e.id)?!1:(t.add(e.id),ft(e)?Ge(e.length)?!0:xo(e.childType,t):et(e)||Vt(e)?xo(e.childType,t):Tt(e)?e.fields.some(n=>xo(n.type,t)):Oe(e)?e.fields.some(n=>xo(n.type,t)):Ye(e)?e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(i=>xo(i.type,t))}):Ht(e)?e.fields.some(n=>xo(n.type,t)):!1)}function Yd(e){let t=new Set,n=new Set;function r(i){if(!(i&&n.has(i))){if(i&&n.add(i),H(i)){if(t.has(i))return;i.resolvedConcreteType||t.add(i)}switch(i.tag){case"Array":r(i.childType);break;case"Tuple":i.fields.forEach(o=>r(o.type));break;case"Struct":i.fields.forEach(o=>r(o.type));break;case"Enum":i.variants.forEach(o=>{var a;(a=o.fields)==null||a.forEach(s=>r(s.type))});break;case"Union":i.fields.forEach(o=>r(o.type));break;case"Module":i.fields.forEach(o=>r(o.type));break;case"Ptr":r(i.childType);break;default:break}}}return r(e),t}function qs(e){if(!e)return!1;switch(e.tag){case"Array":{let t=e;return Ge(t.length)||qs(t.childType)}case"SomeType":return!0;case"Module":return!1;case"Trait":{let t=e;return t.isFn?qs(t.isFn.callType):!1}default:return!1}}function hn({type:e,expectedType:t,expr:n,env:r}){let i;if(yn(e))i=la();else if(On(e))i=ua();else if(gn(e))t&&(et(t)&&(Yi(t.childType)||Is(t.childType))||Vt(t))&&(i=t),i||(i=rE(r));else return e;return i&&(n!=null&&n.$)&&(n.$.convertedRuntimeType=i),i??e}function Hd(e,t=new Set){let n=e.label;e.isQuote?n=`quote(${n})`:e.isImplicit||e.isCompileTimeOnly&&(n=`comptime(${n})`);let r=O(e.type,t),i=e.exprs.defaultValueExpr?A(e.exprs.defaultValueExpr):"";return n===""?r:i?`(${n} : ${r}) ?= ${i}`:`${n} : ${r}`}function Bs(e,t=new Set){let n=e.label;mi(n)&&(n=`(${n})`);let r=e.defaultValue?bt(e.defaultValue):"",i=e.assignedValue?bt(e.assignedValue):"";return r?`(${n}: ${O(e.type,t)}) ?= ${r}`:i?`(${n}: ${O(e.type,t)}) = ${i}`:`${n}: ${O(e.type,t)}`}function eE(e,t=new Set){let n=e.label;mi(n)&&(n=`(${n})`);let r=e.defaultValue?bt(e.defaultValue):"",i=e.assignedValue?bt(e.assignedValue):"";return r?`(${n} : ${O(e.type,t)}) ?= ${r}`:i?`(${n} : ${O(e.type,t)}) = ${i}`:`${n} : ${O(e.type,t)}`}function tE(e,t=new Set){var f;let n=e.parameters.map(_=>Hd(_,t)).join(", "),r=e.forallParameters.length>0?`forall(${e.forallParameters.map(_=>Hd(_,t)).join(", ")})`:"",i="";e.variadicParameter&&(e.variadicParameter.label==="..."?i="...":e.variadicParameter.isQuote?i=`...(quote(${e.variadicParameter.label}))`:e.variadicParameter.isCompileTimeOnly?i=`...(comptime(${e.variadicParameter.label}))`:i=`...(${e.variadicParameter.label})`);let o=O(e.return.type,t),a=o;e.return.isUnquote?e.return.label?a=`(unquote(${e.return.label}) : ${o})`:a=`unquote(${o})`:e.return.isCompileTimeOnly&&(e.return.label?a=`(comptime(${e.return.label}) : ${o})`:a=`comptime(${o})`);let s=e.implicitParameters.length>0?`using(${e.implicitParameters.map(_=>_.isEffectRowSpread?`...(${_.label})`:Hd(_,t)).join(", ")})`:"",l=[r,n,s,i].filter(_=>!!_).join(", "),u=(f=e.SelfType)==null?void 0:f.typeName;return`${u?`(${u}) `:""}fn(${l}) -> ${a}`}function O(e,t=new Set){if(e.id&&t.has(e.id))return e.typeName||`<circular:${e.tag}>`;e.id&&t.add(e.id);try{return OS(e,t)}finally{e.id&&t.delete(e.id)}}function OS(e,t){if(!e)return"unknown";switch(e.tag){case"unit":return"unit";case"bool":return"bool";case"usize":return"usize";case"isize":return"isize";case"u8":return"u8";case"i8":return"i8";case"u16":return"u16";case"i16":return"i16";case"u32":return"u32";case"i32":return"i32";case"u64":return"u64";case"i64":return"i64";case"f32":return"f32";case"f64":return"f64";case"Type":return"level"in e&&typeof e.level=="number"&&e.level>0?`Type(${e.level})`:"Type";case"Array":return`[${O(e.childType,t)}; ${bt(e.length)}]`;case"Slice":return`[${O(e.childType,t)}]`;case"Tuple":return e.fields.length===0?"()":`(${e.fields.map(n=>Bs(n,t)).join(", ")}${e.fields.length===1?",":""})`;case"Struct":{let n=e;return n.typeName?n.typeName:`${n.typeName?`(${n.typeName}) `:""}${n.isAtomicRc?"atomic ":""}${n.isReferenceSemantics?"object":n.isNewtype?"newtype":"struct"}(${n.fields.map(r=>Bs(r,t)).join(", ")})`}case"Enum":{let n=e;if(n.typeName){let r=n.typeName;return n.requiredVariantNames??n.selectedVariantName?`${r} (${n.requiredVariantNames?`${n.requiredVariantNames.map(i=>`.${i}`).join(" | ")} required`:`.${n.selectedVariantName} selected`})`:r}return`${n.typeName?`(${n.typeName}) `:""}enum(${n.variants.map(r=>`${r.name}${r.fields?`(${r.fields.map(i=>Bs(i,t)).join(", ")})`:""}`).join(", ")})`}case"Union":{let n=e;if(n.typeName)return n.typeName;let r=n.fields;return`${n.typeName?`(${n.typeName}) `:""}${n.typeName?"union":n.id}(${r.map(i=>Bs(i,t)).join(", ")})`}case"Module":{let n=e,r;return n.typeName?r=n.typeName:r=`${n.typeName?`(${n.typeName}) `:""}module(${n.fields.map(i=>eE(i,t)).join(", ")})`,r}case"Trait":{let n=e;if(Dn(n))return`Fn${tE(n.isFn.callType,t).slice(2)}`;if(dr(n)){let i=[O(n.isFuture.outputType,t)];for(let o of n.isFuture.effects)o.isEffectRowSpread?i.push(`...(${o.label})`):i.push(O(o.type,t));return`Future(${i.join(", ")})`}let r;return n.typeName?r=n.typeName:r=`${n.typeName?`(${n.typeName}) `:""}trait(${n.fields.map(i=>eE(i,t)).join(", ")})`,n.receiverType&&(r=`(${O(n.receiverType,t)} <: ${r})`),r}case"Function":{let n=e;return n.typeName?n.typeName:tE(n,t)}case"SomeType":{let n=e;if(n.typeName)return n.typeName;if(n.functionApplication)return A(n.functionApplication);let r=[];if(n.requiredTraits&&n.requiredTraits.length>0)for(let i of n.requiredTraits)r.push(O(i.traitType,t));if(n.negativeTraits&&n.negativeTraits.length>0)for(let i of n.negativeTraits)r.push(`!(${O(i.traitType,t)})`);return r.length>0?`${n.name||"Impl"}(${r.join(", ")})`:n.name||"Impl()"}case"Ptr":return`*(${O(e.childType,t)})`;case"Iso":return`Iso(${O(e.childType,t)})`;case"Expr":return"Expr";case"ComptimeList":return`ComptimeList(${O(e.childType)})`;case"EffectsRow":{let n=e;return n.implicitParameters.length===0?"EffectsRow()":`EffectsRow(${n.implicitParameters.map(r=>`${r.label} : ${O(r.type,t)}`).join(", ")})`}case"Dyn":{let n=e;if(n.typeName)return n.typeName;let r=[];for(let{traitType:i}of n.requiredTraits)r.push(O(i,t));if(n.negativeTraits&&n.negativeTraits.length>0)for(let{traitType:i}of n.negativeTraits)r.push(`!(${O(i,t)})`);return`Dyn(${r.join(", ")})`}case"TypeApplication":{let n=e,r=O(n.constructor,t),i=n.args.map(o=>O(o,t)).join(", ");return`${r}(${i})`}default:return`${e.tag}`}}var nE=64;function Qi(){return nE}function tf(){return nE/8}function PS(e){let t=fa(e.childType);if(t===null)return null;if(t===-1)return-1;let n=e.length;if(Mt(n)){let r=BigInt(n.value);if(r<0)throw new Error("Array length cannot be negative");return Number(r)*t}return null}function US(e){let t=0,n=1;for(let r of e.fields){let i=fa(r.type);if(i===null)return null;if(i===-1)return-1;let o=Xi(r.type);if(o===null)return null;let a=Math.ceil(i/8);t=Math.ceil(t/o)*o,t+=a,n=Math.max(n,o)}return t=Math.ceil(t/n)*n,t*8}function zS(e){let t=0,n=1;for(let r of e.fields){let i=fa(r.type);if(i===null)return null;if(i===-1)return-1;let o=Xi(r.type);if(o===null)return null;let a=Math.ceil(i/8);t=Math.ceil(t/o)*o,t+=a,n=Math.max(n,o)}return t=Math.ceil(t/n)*n,t*8}function BS(e){let t=0,n=0;for(let d of e.variants){let v=0,y=1;if(d.fields)for(let g of d.fields){let T=fa(g.type);if(T===null)return null;if(T===-1)return-1;let E=Xi(g.type);if(E===null)return null;let $=Math.ceil(T/8);v=Math.ceil(v/E)*E,v+=$,y=Math.max(y,E),n=Math.max(n,E*8)}v=Math.ceil(v/y)*y;let h=v*8;t=Math.max(t,h)}let r=Math.ceil(Math.ceil(Math.log2(e.variants.length))/8)*8,i=32,o=Math.max(n,8),a=Math.max(i,o),s=r/8,l=o/8,u=(l-s%l)%l*8,c=r+u+t,f=c/8,_=a/8,p=(_-f%_)%_*8;return c+p}function qS(e){let t=0;for(let n of e.fields){let r=fa(n.type);if(r===null)return null;if(r===-1)return-1;t=Math.max(t,r)}return t}function Xi(e){if(H(e))return null;if(Ke(e)||Lt(e)||yn(e)||On(e)||gn(e)||vn(e)||rt(e)||_t(e)||Pn(e))return 1;if(Mr(e))return 1;if(Pl(e)||Ul(e))return tf();if(Yi(e)||zl(e))return 1;if(Bl(e)||ql(e))return 2;if(Gl(e)||Wl(e))return 4;if(jl(e)||Hl(e))return 8;if(Yl(e))return 4;if(Kl(e))return 8;if(ft(e))return Xi(e.childType);if(Tt(e)){let t=1;for(let n of e.fields){let r=Xi(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else if(Oe(e)){if(e.isReferenceSemantics)return tf();if(e.isNewtype)return Xi(e.fields[0].type);let t=1;for(let n of e.fields){let r=Xi(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else if(Ye(e)){let t=1;for(let n of e.variants)if(n.fields)for(let r of n.fields){let i=Xi(r.type);if(i===null)return null;t=Math.max(t,i)}return t}else if(Ht(e)){let t=1;for(let n of e.fields){let r=Xi(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else{if(_e(e))return tf();if(et(e))return tf()}return null}function fa(e){return H(e)?null:Ke(e)||Lt(e)||yn(e)||On(e)||gn(e)||vn(e)||rt(e)||_t(e)||Pn(e)?0:Mr(e)?8:Pl(e)||Ul(e)?Qi():Yi(e)||zl(e)?8:Bl(e)||ql(e)?16:Gl(e)||Wl(e)?32:jl(e)||Hl(e)?64:Yl(e)?32:Kl(e)?64:ft(e)?PS(e):Tt(e)?US(e):Oe(e)?e.isReferenceSemantics?Qi():e.isNewtype?fa(e.fields[0].type):zS(e):Ye(e)?BS(e):Ht(e)?qS(e):_e(e)||et(e)?Qi():null}function No(e,t){if(So(e))throw _n([{token:t,errorMessage:`Cannot use 'void' type here.
79
+ Insert some indirection (e.g., a pointer '*' or reference '&') to break the cycle.`});if(dn(a))continue;let s=[...n,o],l=In(a,s);Lt(l)&&(i=Math.max(i,l.level),l.tag==="Type"&&(r=!0))}return i>0?Br(i):r?en(e):en(e)}function In(e,t=[]){if(ht(e))return en(e);if(Ol(e))return en(e);if(Lt(e))return Br(e.level+1);if(yn(e)||On(e)||gn(e)||vn(e))return en(e);if(Pn(e))return en(e);if(_e(e))return en(e);if(Dn(e))return en(e);if(ft(e))return In(e.childType,t);if(Vt(e))return en(e);if(Tt(e))return Xc(e,e.fields,t);if(Oe(e))return Xc(e,e.fields,t);if(Ye(e)){let n=[];for(let r of e.variants)r.fields&&n.push(...r.fields);return Xc(e,n,t)}else{if(Ht(e))return Xc(e,e.fields,t);if(rt(e))return Br(1,e);if(_t(e))return Br(1,e);if(H(e))return e.parentType;if(et(e))return en(e);if(Vn(e))return en(e);if(dr(e))return en(e);if(So(e))return en(e);if(ln(e))return Br(1);throw new Error(`Unknown type tag: ${e.tag}`)}}function QT(e){var t,n,r;if((t=e.exprs.labelExpr)!=null&&t.token)return e.exprs.labelExpr.token;if((n=e.exprs.typeExpr)!=null&&n.token)return e.exprs.typeExpr.token;if((r=e.exprs.defaultValueExpr)!=null&&r.token)return e.exprs.defaultValueExpr.token;throw new Error("Cannot get token for function parameter")}function bt(e){if(!e)return"<runtime value>";switch(e.tag){case"Type":return O(e.value);case"ComptimeInt":case"ComptimeFloat":return e.value.toString();case"ComptimeString":return JSON.stringify(e.value);case"ComptimeList":return`comptime_list(${e.elements.map(bt).join(", ")})`;case"U8":case"I8":case"U16":case"I16":case"U32":case"I32":case"U64":case"I64":case"F32":case"F64":case"Usize":case"Isize":return typeof e.value=="bigint",e.value.toString();case"Bool":return e.value.toString();case"Array":return`[${e.elements.map(bt).join(", ")}${e.elements.length===1?",":""}]`;case"Slice":return`slice[${e.sourceArray[0].elements.slice(e.startIndex,e.endIndex).map(bt).join(", ")}]`;case"Tuple":return e.fields.length===0?"()":`(${e.fields.map(bt).join(", ")}${e.fields.length===1?",":""})`;case"Struct":return`${e.type.typeName??"_"}(${e.fields.map((t,n)=>{let r=e.type.fields[n].label;return mi(r)&&(r=`(${r})`),`${r}: ${bt(t)}`}).join(", ")})`;case"Enum":{if(e.fields.length===0)return`.${e.variantName}`;let t=e.type.variants.find(n=>n.name===e.variantName);return`.${e.variantName}(${e.fields.map((n,r)=>{let i=(t==null?void 0:t.fields[r].label)??"_";return mi(i)&&(i=`(${i})`),`${i}: ${bt(n)}`}).join(", ")})`}case"Function":return e.funcName?`<fn ${e.funcName}>`:e.type.typeName?`<fn ${e.type.typeName}>`:"<fn>";case"Module":return`${e.type.typeName??"_"}(${e.fields.map((t,n)=>{let r=e.type.fields[n].label;return mi(r)&&(r=`(${r})`),`${r}: ${bt(t)}`}).join(", ")})`;case"Trait":return`${e.type.typeName??"_"}(${e.fields.map((t,n)=>{let r=e.type.fields[n].label;return mi(r)&&(r=`(${r})`),`${r}: ${bt(t)}`}).join(", ")})`;case"Unit":return"()";case"Expr":return`quote(${A(e.value)})`;case"Unknown":return e.variableName?e.variableName:`<comptime ${O(e.type)}>`;case"Ptr":{let t=e.targetValue[0];return qr(t)?`<ptr to ${bt(t.elements[e.targetIndex])}>`:`<ptr to ${bt(t)}>`}default:throw new Error("valueToString: Unsupported value")}}function X(e){return(e==null?void 0:e.tag)==="Type"}function Gr(e){return(e==null?void 0:e.tag)==="ComptimeInt"}function Qc(e){return(e==null?void 0:e.tag)==="ComptimeFloat"}function pt(e){return(e==null?void 0:e.tag)==="ComptimeString"}function Jr(e){return(e==null?void 0:e.tag)==="ComptimeList"}function JT(e){return Jr(e)&&Pn(e.type.childType)}function Mt(e){return(e==null?void 0:e.tag)==="ComptimeInt"||(e==null?void 0:e.tag)==="ComptimeFloat"||(e==null?void 0:e.tag)==="U8"||(e==null?void 0:e.tag)==="I8"||(e==null?void 0:e.tag)==="U16"||(e==null?void 0:e.tag)==="I16"||(e==null?void 0:e.tag)==="U32"||(e==null?void 0:e.tag)==="I32"||(e==null?void 0:e.tag)==="U64"||(e==null?void 0:e.tag)==="I64"||(e==null?void 0:e.tag)==="F32"||(e==null?void 0:e.tag)==="F64"||(e==null?void 0:e.tag)==="Usize"||(e==null?void 0:e.tag)==="Isize"}function Ut(e){return(e==null?void 0:e.tag)==="Bool"}function Ie(e){return(e==null?void 0:e.tag)==="Function"}function Ge(e){return(e==null?void 0:e.tag)==="Unknown"}function kr(e){return(e==null?void 0:e.tag)==="Tuple"}function qn(e){return(e==null?void 0:e.tag)==="Struct"}function qr(e){return(e==null?void 0:e.tag)==="Array"}function Ma(e){return(e==null?void 0:e.tag)==="Slice"}function Sn(e){return(e==null?void 0:e.tag)==="Enum"}function Rt(e){return(e==null?void 0:e.tag)==="Module"}function on(e){return(e==null?void 0:e.tag)==="Trait"}function bi(e){return(e==null?void 0:e.tag)==="Ptr"}function rr(e){return(e==null?void 0:e.tag)==="Expr"}function xe(e){return{tag:"Type",type:In(e),value:e}}function Gn(e){return{tag:"ComptimeString",type:Wn(),value:e}}function wr(e,t){return{tag:"ComptimeList",type:Ao(e),elements:t}}function mr(e,t){let n;if(e==="ComptimeInt")n=po();else if(e==="ComptimeFloat")n=xs();else if(e==="U8")n=Ds();else if(e==="I8")n=Vs();else if(e==="U16")n=Ms();else if(e==="I16")n=Rs();else if(e==="U32")n=Os();else if(e==="I32")n=la();else if(e==="U64")n=Ps();else if(e==="I64")n=Us();else if(e==="F32")n=zs();else if(e==="F64")n=ua();else if(e==="Usize")n=Mn();else if(e==="Isize")n=Ns();else throw new Error(`createNumberValue: Unsupported tag: ${e}`);return{tag:e,type:n,value:t}}function Vi(e){return mr("ComptimeInt",e)}function Jc(e){return mr("ComptimeFloat",e)}function pn(e){return{tag:"Bool",type:tn(),value:e}}function Ee(e,{variableName:t,recursiveTypeRef:n,env:r,context:i}){if(Lt(e)&&e.level===0){if(!t)throw console.trace("!variableName bug found in createUnknownValue"),new Error(`createUnknownValue expects a variable name for type ${O(e)}`);let o=Zr(e,t,{recursiveTypeRef:n,env:r,context:i});return xe(o)}if(_e(e)&&t){let o=e;if(o.return.isCompileTimeOnly&&Lt(o.return.type)&&o.return.type.level===0&&o.parameters.every(s=>s.isCompileTimeOnly)){let s=Zr(o.return.type,t,{recursiveTypeRef:n,env:r,context:i});return s.kindFunctionType=o,xe(s)}}return{tag:"Unknown",type:e,variableName:t}}function Mi(e,t){return{tag:"Struct",type:e,fields:t}}function ZT(e,t,n){return{tag:"Module",type:e,fields:t,moduleLevelInitExprs:n&&n.length>0?n:void 0}}function Ss(e,t){return{tag:"Trait",type:e,fields:t}}function Zc(e,t){return{tag:"Tuple",type:e,fields:t}}function Ra(e,t,n){return{tag:"Enum",type:e,variantName:t,fields:n}}function aa(e,t){return{tag:"Array",type:e,elements:t}}function As(e,t,n,r){return{tag:"Slice",type:e,sourceArray:t,startIndex:n,endIndex:r}}function vr(e){return{tag:"Expr",type:ir(),value:e}}function sa(e,t,n=0){return{tag:"Ptr",type:e,targetValue:t,targetIndex:n}}function Un(e,t){let n=e.value,r=t.value;if(n===r)return!0;if(!n||!r)return!1;if(n.tag==="Type"&&r.tag==="Type")return Ce({type:n.value,env:e.env},{type:r.value,env:t.env},!0);if(pt(n)&&pt(r))return n.value===r.value;if(Jr(n)&&Jr(r)){if(n.elements.length!==r.elements.length)return!1;for(let i=0;i<n.elements.length;i++)if(!Un({value:n.elements[i],env:e.env},{value:r.elements[i],env:t.env}))return!1;return!0}else if(Mt(n)&&Mt(r)){let i=n.value,o=r.value;if(typeof i==typeof o)return i===o;let a=typeof i=="bigint"?i:BigInt(i),s=typeof o=="bigint"?o:BigInt(o);return a===s}else{if(Ut(n)&&Ut(r))return n.value===r.value;if(qr(n)&&qr(r)){if(n.elements.length!==r.elements.length)return!1;for(let i=0;i<n.elements.length;i++)if(!Un({value:n.elements[i],env:e.env},{value:r.elements[i],env:t.env}))return!1;return!0}else if(Ma(n)&&Ma(r)){let i=n.endIndex-n.startIndex,o=r.endIndex-r.startIndex;if(i!==o)return!1;for(let a=0;a<i;a++){let s=n.sourceArray[0].elements[n.startIndex+a],l=r.sourceArray[0].elements[r.startIndex+a];if(!Un({value:s,env:e.env},{value:l,env:t.env}))return!1}return!0}else if(kr(n)&&kr(r)){if(n.fields.length!==r.fields.length)return!1;for(let i=0;i<n.fields.length;i++)if(!Un({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(qn(n)&&qn(r)){if(n.fields.length!==r.fields.length||!Ce({type:n.type,env:e.env},{type:r.type,env:t.env},!0))return!1;for(let i=0;i<n.fields.length;i++)if(!Un({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(Sn(n)&&Sn(r)){if(n.fields.length!==r.fields.length||!Ce({type:n.type,env:e.env},{type:r.type,env:t.env},!0)||n.variantName!==r.variantName)return!1;for(let i=0;i<n.fields.length;i++)if(!Un({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(Rt(n)&&Rt(r)){if(n.fields.length!==r.fields.length||!Ce({type:n.type,env:e.env},{type:r.type,env:t.env},!0))return!1;for(let i=0;i<n.fields.length;i++)if(!Un({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else if(on(n)&&on(r)){if(n.fields.length!==r.fields.length||!Ce({type:n.type,env:e.env},{type:r.type,env:t.env},!0))return!1;for(let i=0;i<n.fields.length;i++)if(!Un({value:n.fields[i],env:e.env},{value:r.fields[i],env:t.env}))return!1;return!0}else{if(rr(n)&&rr(r))return n.value===r.value||ef(n.value,r.value);if(Ge(n)&&Ge(r)){let i,o;if(n.variableName){let a=ve(e.env,n.variableName);if(a.length>0){let s=a[a.length-1];s.value&&!Ge(s.value[0])&&(i=s.value[0])}}if(r.variableName){let a=ve(t.env,r.variableName);if(a.length>0){let s=a[a.length-1];s.value&&!Ge(s.value[0])&&(o=s.value[0])}}return i&&o?Un({value:i,env:e.env},{value:o,env:t.env}):i||o?!1:Ce({type:n.type,env:e.env},{type:r.type,env:t.env},!0)}else if(Ge(n)&&!Ge(r)){if(n.variableName){let i=ve(e.env,n.variableName);if(i.length>0){let o=i[i.length-1];if(o.value&&!Ge(o.value[0]))return Un({value:o.value[0],env:e.env},{value:r,env:t.env})}}return!1}else if(!Ge(n)&&Ge(r)){if(r.variableName){let i=ve(t.env,r.variableName);if(i.length>0){let o=i[i.length-1];if(o.value&&!Ge(o.value[0]))return Un({value:n,env:e.env},{value:o.value[0],env:t.env})}}return!1}else return bi(n)&&bi(r)?n.targetValue===r.targetValue&&n.targetIndex===r.targetIndex:!1}}}function yo(e,t){return e?Oa(e,t):!1}function go(e,t){return e?RS(e,t):!1}function Oa(e,t){return Zi(e,t)&&!Do(e,t)}function RS(e,t){let n=Zi(e,t),r=Do(e,t);return!n&&r}function mt(e,t=[]){if(!e||t.includes(e)||(t.push(e),e.isExtern))return!1;if(Ar(e))return!0;switch(e.tag){case"Array":return mt(e.childType,t);case"Tuple":return e.fields.some(n=>mt(n.type,t));case"Union":return e.fields.some(n=>mt(n.type,t));case"Struct":return e.fields.some(n=>mt(n.type,t));case"Enum":return e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(i=>mt(i.type,t))});case"Iso":return mt(e.childType,t);case"Module":return!1;case"Function":return!1;case"SomeType":{let n=e;return yt(n)?!0:n.resolvedConcreteType?mt(n.resolvedConcreteType,t):!0}default:return!1}}function Xe(e,t=[]){if(!e||t.includes(e))return!1;if(t.push(e),H(e))return e.isExtern?!1:e.resolvedConcreteType?Xe(e.resolvedConcreteType,t):!(ur(e)||yt(e));switch(e.tag){case"Array":return Xe(e.childType,t);case"Tuple":return e.fields.some(n=>Xe(n.type,t));case"Struct":return e.fields.some(n=>!n.isEffectParam&&Xe(n.type,t));case"Enum":return e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(i=>Xe(i.type,t))});case"Union":return e.fields.some(n=>Xe(n.type,t));case"Function":{let n=e;return n.forallParameters.length>0||n.parameters.some(r=>Xe(r.type,t))||Xe(n.return.type,t)}case"Module":return e.fields.some(n=>Xe(n.type,t));case"Ptr":return Xe(e.childType,t);case"Slice":return Xe(e.childType,t);case"TypeApplication":return!0;default:return!1}}function xo(e,t=new Set){return t.has(e.id)?!1:(t.add(e.id),ft(e)?Ge(e.length)?!0:xo(e.childType,t):et(e)||Vt(e)?xo(e.childType,t):Tt(e)?e.fields.some(n=>xo(n.type,t)):Oe(e)?e.fields.some(n=>xo(n.type,t)):Ye(e)?e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(i=>xo(i.type,t))}):Ht(e)?e.fields.some(n=>xo(n.type,t)):!1)}function Yd(e){let t=new Set,n=new Set;function r(i){if(!(i&&n.has(i))){if(i&&n.add(i),H(i)){if(t.has(i))return;i.resolvedConcreteType||t.add(i)}switch(i.tag){case"Array":r(i.childType);break;case"Tuple":i.fields.forEach(o=>r(o.type));break;case"Struct":i.fields.forEach(o=>r(o.type));break;case"Enum":i.variants.forEach(o=>{var a;(a=o.fields)==null||a.forEach(s=>r(s.type))});break;case"Union":i.fields.forEach(o=>r(o.type));break;case"Module":i.fields.forEach(o=>r(o.type));break;case"Ptr":r(i.childType);break;default:break}}}return r(e),t}function qs(e){if(!e)return!1;switch(e.tag){case"Array":{let t=e;return Ge(t.length)||qs(t.childType)}case"SomeType":return!0;case"Module":return!1;case"Trait":{let t=e;return t.isFn?qs(t.isFn.callType):!1}default:return!1}}function hn({type:e,expectedType:t,expr:n,env:r}){let i;if(yn(e))i=la();else if(On(e))i=ua();else if(gn(e))t&&(et(t)&&(Yi(t.childType)||Is(t.childType))||Vt(t))&&(i=t),i||(i=rE(r));else return e;return i&&(n!=null&&n.$)&&(n.$.convertedRuntimeType=i),i??e}function Hd(e,t=new Set){let n=e.label;e.isQuote?n=`quote(${n})`:e.isImplicit||e.isCompileTimeOnly&&(n=`comptime(${n})`);let r=O(e.type,t),i=e.exprs.defaultValueExpr?A(e.exprs.defaultValueExpr):"";return n===""?r:i?`(${n} : ${r}) ?= ${i}`:`${n} : ${r}`}function Bs(e,t=new Set){let n=e.label;mi(n)&&(n=`(${n})`);let r=e.defaultValue?bt(e.defaultValue):"",i=e.assignedValue?bt(e.assignedValue):"";return r?`(${n}: ${O(e.type,t)}) ?= ${r}`:i?`(${n}: ${O(e.type,t)}) = ${i}`:`${n}: ${O(e.type,t)}`}function eE(e,t=new Set){let n=e.label;mi(n)&&(n=`(${n})`);let r=e.defaultValue?bt(e.defaultValue):"",i=e.assignedValue?bt(e.assignedValue):"";return r?`(${n} : ${O(e.type,t)}) ?= ${r}`:i?`(${n} : ${O(e.type,t)}) = ${i}`:`${n} : ${O(e.type,t)}`}function tE(e,t=new Set){var f;let n=e.parameters.map(_=>Hd(_,t)).join(", "),r=e.forallParameters.length>0?`forall(${e.forallParameters.map(_=>Hd(_,t)).join(", ")})`:"",i="";e.variadicParameter&&(e.variadicParameter.label==="..."?i="...":e.variadicParameter.isQuote?i=`...(quote(${e.variadicParameter.label}))`:e.variadicParameter.isCompileTimeOnly?i=`...(comptime(${e.variadicParameter.label}))`:i=`...(${e.variadicParameter.label})`);let o=O(e.return.type,t),a=o;e.return.isUnquote?e.return.label?a=`(unquote(${e.return.label}) : ${o})`:a=`unquote(${o})`:e.return.isCompileTimeOnly&&(e.return.label?a=`(comptime(${e.return.label}) : ${o})`:a=`comptime(${o})`);let s=e.implicitParameters.length>0?`using(${e.implicitParameters.map(_=>_.isEffectRowSpread?`...(${_.label})`:Hd(_,t)).join(", ")})`:"",l=[r,n,s,i].filter(_=>!!_).join(", "),u=(f=e.SelfType)==null?void 0:f.typeName;return`${u?`(${u}) `:""}fn(${l}) -> ${a}`}function O(e,t=new Set){if(e.id&&t.has(e.id))return e.typeName||`<circular:${e.tag}>`;e.id&&t.add(e.id);try{return OS(e,t)}finally{e.id&&t.delete(e.id)}}function OS(e,t){if(!e)return"unknown";switch(e.tag){case"unit":return"unit";case"bool":return"bool";case"usize":return"usize";case"isize":return"isize";case"u8":return"u8";case"i8":return"i8";case"u16":return"u16";case"i16":return"i16";case"u32":return"u32";case"i32":return"i32";case"u64":return"u64";case"i64":return"i64";case"f32":return"f32";case"f64":return"f64";case"Type":return"level"in e&&typeof e.level=="number"&&e.level>0?`Type(${e.level})`:"Type";case"Array":return`[${O(e.childType,t)}; ${bt(e.length)}]`;case"Slice":return`[${O(e.childType,t)}]`;case"Tuple":return e.fields.length===0?"()":`(${e.fields.map(n=>Bs(n,t)).join(", ")}${e.fields.length===1?",":""})`;case"Struct":{let n=e;return n.typeName?n.typeName:`${n.typeName?`(${n.typeName}) `:""}${n.isAtomicRc?"atomic ":""}${n.isReferenceSemantics?"object":n.isNewtype?"newtype":"struct"}(${n.fields.map(r=>Bs(r,t)).join(", ")})`}case"Enum":{let n=e;if(n.typeName){let r=n.typeName;return n.requiredVariantNames??n.selectedVariantName?`${r} (${n.requiredVariantNames?`${n.requiredVariantNames.map(i=>`.${i}`).join(" | ")} required`:`.${n.selectedVariantName} selected`})`:r}return`${n.typeName?`(${n.typeName}) `:""}enum(${n.variants.map(r=>`${r.name}${r.fields?`(${r.fields.map(i=>Bs(i,t)).join(", ")})`:""}`).join(", ")})`}case"Union":{let n=e;if(n.typeName)return n.typeName;let r=n.fields;return`${n.typeName?`(${n.typeName}) `:""}${n.typeName?"union":n.id}(${r.map(i=>Bs(i,t)).join(", ")})`}case"Module":{let n=e,r;return n.typeName?r=n.typeName:r=`${n.typeName?`(${n.typeName}) `:""}module(${n.fields.map(i=>eE(i,t)).join(", ")})`,r}case"Trait":{let n=e;if(Dn(n))return`Fn${tE(n.isFn.callType,t).slice(2)}`;if(dr(n)){let i=[O(n.isFuture.outputType,t)];for(let o of n.isFuture.effects)o.isEffectRowSpread?i.push(`...(${o.label})`):i.push(O(o.type,t));return`Future(${i.join(", ")})`}let r;return n.typeName?r=n.typeName:r=`${n.typeName?`(${n.typeName}) `:""}trait(${n.fields.map(i=>eE(i,t)).join(", ")})`,n.receiverType&&(r=`(${O(n.receiverType,t)} <: ${r})`),r}case"Function":{let n=e;return n.typeName?n.typeName:tE(n,t)}case"SomeType":{let n=e;if(n.typeName)return n.typeName;if(n.functionApplication)return A(n.functionApplication);let r=[];if(n.requiredTraits&&n.requiredTraits.length>0)for(let i of n.requiredTraits)r.push(O(i.traitType,t));if(n.negativeTraits&&n.negativeTraits.length>0)for(let i of n.negativeTraits)r.push(`!(${O(i.traitType,t)})`);return r.length>0?`${n.name||"Impl"}(${r.join(", ")})`:n.name||"Impl()"}case"Ptr":return`*(${O(e.childType,t)})`;case"Iso":return`Iso(${O(e.childType,t)})`;case"Expr":return"Expr";case"ComptimeList":return`ComptimeList(${O(e.childType)})`;case"EffectsRow":{let n=e;return n.implicitParameters.length===0?"EffectsRow()":`EffectsRow(${n.implicitParameters.map(r=>`${r.label} : ${O(r.type,t)}`).join(", ")})`}case"Dyn":{let n=e;if(n.typeName)return n.typeName;let r=[];for(let{traitType:i}of n.requiredTraits)r.push(O(i,t));if(n.negativeTraits&&n.negativeTraits.length>0)for(let{traitType:i}of n.negativeTraits)r.push(`!(${O(i,t)})`);return`Dyn(${r.join(", ")})`}case"TypeApplication":{let n=e,r=O(n.constructor,t),i=n.args.map(o=>O(o,t)).join(", ");return`${r}(${i})`}default:return`${e.tag}`}}var nE=64;function Qi(){return nE}function tf(){return nE/8}function PS(e){let t=fa(e.childType);if(t===null)return null;if(t===-1)return-1;let n=e.length;if(Mt(n)){let r=BigInt(n.value);if(r<0)throw new Error("Array length cannot be negative");return Number(r)*t}return null}function US(e){let t=0,n=1;for(let r of e.fields){let i=fa(r.type);if(i===null)return null;if(i===-1)return-1;let o=Xi(r.type);if(o===null)return null;let a=Math.ceil(i/8);t=Math.ceil(t/o)*o,t+=a,n=Math.max(n,o)}return t=Math.ceil(t/n)*n,t*8}function zS(e){let t=0,n=1;for(let r of e.fields){let i=fa(r.type);if(i===null)return null;if(i===-1)return-1;let o=Xi(r.type);if(o===null)return null;let a=Math.ceil(i/8);t=Math.ceil(t/o)*o,t+=a,n=Math.max(n,o)}return t=Math.ceil(t/n)*n,t*8}function BS(e){let t=0,n=0;for(let d of e.variants){let v=0,y=1;if(d.fields)for(let g of d.fields){let T=fa(g.type);if(T===null)return null;if(T===-1)return-1;let E=Xi(g.type);if(E===null)return null;let $=Math.ceil(T/8);v=Math.ceil(v/E)*E,v+=$,y=Math.max(y,E),n=Math.max(n,E*8)}v=Math.ceil(v/y)*y;let h=v*8;t=Math.max(t,h)}let r=Math.ceil(Math.ceil(Math.log2(e.variants.length))/8)*8,i=32,o=Math.max(n,8),a=Math.max(i,o),s=r/8,l=o/8,u=(l-s%l)%l*8,c=r+u+t,f=c/8,_=a/8,p=(_-f%_)%_*8;return c+p}function qS(e){let t=0;for(let n of e.fields){let r=fa(n.type);if(r===null)return null;if(r===-1)return-1;t=Math.max(t,r)}return t}function Xi(e){if(H(e))return null;if(Ke(e)||Lt(e)||yn(e)||On(e)||gn(e)||vn(e)||rt(e)||_t(e)||Pn(e))return 1;if(Mr(e))return 1;if(Pl(e)||Ul(e))return tf();if(Yi(e)||zl(e))return 1;if(Bl(e)||ql(e))return 2;if(Gl(e)||Wl(e))return 4;if(jl(e)||Hl(e))return 8;if(Yl(e))return 4;if(Kl(e))return 8;if(ft(e))return Xi(e.childType);if(Tt(e)){let t=1;for(let n of e.fields){let r=Xi(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else if(Oe(e)){if(e.isReferenceSemantics)return tf();if(e.isNewtype)return Xi(e.fields[0].type);let t=1;for(let n of e.fields){let r=Xi(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else if(Ye(e)){let t=1;for(let n of e.variants)if(n.fields)for(let r of n.fields){let i=Xi(r.type);if(i===null)return null;t=Math.max(t,i)}return t}else if(Ht(e)){let t=1;for(let n of e.fields){let r=Xi(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else{if(_e(e))return tf();if(et(e))return tf()}return null}function fa(e){return H(e)?null:Ke(e)||Lt(e)||yn(e)||On(e)||gn(e)||vn(e)||rt(e)||_t(e)||Pn(e)?0:Mr(e)?8:Pl(e)||Ul(e)?Qi():Yi(e)||zl(e)?8:Bl(e)||ql(e)?16:Gl(e)||Wl(e)?32:jl(e)||Hl(e)?64:Yl(e)?32:Kl(e)?64:ft(e)?PS(e):Tt(e)?US(e):Oe(e)?e.isReferenceSemantics?Qi():e.isNewtype?fa(e.fields[0].type):zS(e):Ye(e)?BS(e):Ht(e)?qS(e):_e(e)||et(e)?Qi():null}function No(e,t){if(So(e))throw _n([{token:t,errorMessage:`Cannot use 'void' type here.
80
80
  Please consider use 'unit' type instead.
81
- `}])}function Ji(e,t,n){if(!dn(e)||Pa(e,n))return!1;if(t.has(e.id))return!0;t.add(e.id);try{for(let r of e.fields)if(ca(r.type,e,t,n))return!0;return!1}finally{t.delete(e.id)}}function ca(e,t,n,r){if(Oe(e)&&e.id===t.id)return!0;if(Oe(e)&&e.isReferenceSemantics)return Ji(e,new Set(n),r);if(Oe(e)&&!e.isReferenceSemantics){for(let i of e.fields)if(ca(i.type,t,n,r))return!0}if(Ye(e)){for(let i of e.variants)if(i.fields){for(let o of i.fields)if(ca(o.type,t,n,r))return!0}}if(H(e))return Pa(e,r)?!1:e.resolvedConcreteType?ca(e.resolvedConcreteType,t,n,r):!0;if(ft(e)||Vt(e))return ca(e.childType,t,n,r);if(Tt(e)){for(let i of e.fields)if(ca(i.type,t,n,r))return!0}if(Ht(e)){for(let i of e.fields)if(ca(i.type,t,n,r))return!0}return ht(e)?!0:(et(e),!1)}function mo(e,t){return t?e.id===t.id?!0:ft(e)||Vt(e)||et(e)?mo(e.childType,t):Tt(e)?e.fields.some(n=>mo(n.type,t)):Oe(e)?e.fields.some(n=>mo(n.type,t)):Ht(e)?e.fields.some(n=>mo(n.type,t)):Ye(e)?e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(i=>mo(i.type,t))}):_e(e)?mo(e.return.type,t):!1:!1}var Xd=require("crypto");function Gs(e){return"yo"+(0,Xd.createHash)("sha1").update(e).digest("hex").slice(0,8)}var nf=new Map;function xt(e){let t=nf.get(e);return t===void 0&&(t=0),nf.set(e,t+1),`${Gs(e)}_id_${t}`}function rf(e){nf.delete(e)}var iE=1;function oE(e){return`_${Gs(e)}_temp_`}function of(e){return`${oE(e)}${iE++}`}function un(e,t){return t.startsWith(oE(e))}var Kd=new Map;function kn(e,t){let n="";for(let o=0;o<t.length;o++)if(Rl(t[o])){let a=Gd.indexOf(t[o]);n+=`${a}`}else n+=t[o];let r=Gs(e)+"_"+n,i=Kd.get(r);return i===void 0?i=0:i++,Kd.set(r,i),r+(i==0?"":`_${i}`)}function Qd(e){return(0,Xd.createHash)("sha1").update(e).digest("hex").slice(0,10)}function Jd(){nf.clear(),Kd.clear(),iE=1}var Zd;function aE(e){Zd=e}function U({expr:e,env:t,context:n}){if(!Zd)throw new Error("Internal Error: evaluateExpression function is not set.");return Zd({expr:e,env:t,context:n})}var Rn="__yo_self";function Ua(e,t,n){if(Oe(e)){if(e.isReferenceSemantics)return!1;if(n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>Ua(i.type,t,n));return n.delete(e.id),r}if(Tt(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>Ua(i.type,t,n));return n.delete(e.id),r}if(Ye(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.variants.every(i=>(i.fields??[]).every(o=>Ua(o.type,t,n)));return n.delete(e.id),r}return ft(e)||Vt(e)||et(e)?Ua(e.childType,t,n):Zi(e,t)}function za(e,t,n){if(Oe(e)){if(e.isReferenceSemantics||n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>za(i.type,t,n));return n.delete(e.id),r}if(Tt(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>za(i.type,t,n));return n.delete(e.id),r}if(Ye(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.variants.every(i=>(i.fields??[]).every(o=>za(o.type,t,n)));return n.delete(e.id),r}return ft(e)||Vt(e)||et(e)?za(e.childType,t,n):Do(e,t)}function sE(e,t,n,r){let i=Qt(e),o=U({expr:i,env:n,context:{...r,SelfType:t,forceCompileTimeBindings:!1}});if(!o.$)throw new Error(`Failed to evaluate auto-generated expression: ${A(i)}`);return{expr:o,env:o.$.env}}function Ws({label:e,functionSignature:t,SelfType:n,env:r,context:i}){let{expr:o,env:a}=sE(t,n,r,i);if(S(o)&&o.$&&o.$.value&&X(o.$.value)&&_e(o.$.value.value)){let s=o.$.value.value,l={label:e,type:s,assignedValue:void 0,exprs:{expr:o,labelExpr:o.args[0],typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:void 0}};if(n.trait){let u=n.trait.fields.findIndex(c=>c.label===e);u>=0?n.trait.fields[u]=l:n.trait.fields.push(l)}}return a}function Ri({label:e,functionCode:t,SelfType:n,env:r,context:i}){let{expr:o,env:a}=sE(t,n,r,i);if(S(o)&&o.$&&o.$.value&&Se(o.$.value)){o.$.value.funcId+=e,o.$.value.funcName=e;let s={label:e,type:o.$.type,assignedValue:o.$.value,exprs:{expr:o,labelExpr:o.args[0],typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:o}};if(n.trait){let l=n.trait.fields.findIndex(u=>u.label===e);l>=0?n.trait.fields[l]=s:n.trait.fields.push(s)}}return a}var em=`(fn(${Rn} : Self) -> unit)`,af=`(fn(${Rn} : Self) -> unit)`,sf=`(fn(${Rn} : Self) -> Self)`;function GS(e){return e.replace(/[^a-zA-Z0-9_]/g,t=>`_u${t.charCodeAt(0)}_`)}function WS(e){return/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e)}function tm(e,t){if(e.length===0)return{destructuringExpr:"",callsExpr:""};let n=[],r=[];for(let i of e)if(WS(i)){let o=xt("field_"+i);n.push(`${i} : ${o}`),r.push(`(${t})(${o});`)}else{let o=xt("field_"+GS(i));n.push(`(${i}) : ${o}`),r.push(`(${t})(${o});`)}return{destructuringExpr:`{ ${n.join(", ")} } := ${Rn};`,callsExpr:r.join(`
81
+ `}])}function Ji(e,t,n){if(!dn(e)||Pa(e,n))return!1;if(t.has(e.id))return!0;t.add(e.id);try{for(let r of e.fields)if(ca(r.type,e,t,n))return!0;return!1}finally{t.delete(e.id)}}function ca(e,t,n,r){if(Oe(e)&&e.id===t.id)return!0;if(Oe(e)&&e.isReferenceSemantics)return Ji(e,new Set(n),r);if(Oe(e)&&!e.isReferenceSemantics){for(let i of e.fields)if(ca(i.type,t,n,r))return!0}if(Ye(e)){for(let i of e.variants)if(i.fields){for(let o of i.fields)if(ca(o.type,t,n,r))return!0}}if(H(e))return Pa(e,r)?!1:e.resolvedConcreteType?ca(e.resolvedConcreteType,t,n,r):!0;if(ft(e)||Vt(e))return ca(e.childType,t,n,r);if(Tt(e)){for(let i of e.fields)if(ca(i.type,t,n,r))return!0}if(Ht(e)){for(let i of e.fields)if(ca(i.type,t,n,r))return!0}return ht(e)?!0:(et(e),!1)}function mo(e,t){return t?e.id===t.id?!0:ft(e)||Vt(e)||et(e)?mo(e.childType,t):Tt(e)?e.fields.some(n=>mo(n.type,t)):Oe(e)?e.fields.some(n=>mo(n.type,t)):Ht(e)?e.fields.some(n=>mo(n.type,t)):Ye(e)?e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(i=>mo(i.type,t))}):_e(e)?mo(e.return.type,t):!1:!1}var Xd=require("crypto");function Gs(e){return"yo"+(0,Xd.createHash)("sha1").update(e).digest("hex").slice(0,8)}var nf=new Map;function xt(e){let t=nf.get(e);return t===void 0&&(t=0),nf.set(e,t+1),`${Gs(e)}_id_${t}`}function rf(e){nf.delete(e)}var iE=1;function oE(e){return`_${Gs(e)}_temp_`}function of(e){return`${oE(e)}${iE++}`}function un(e,t){return t.startsWith(oE(e))}var Kd=new Map;function kn(e,t){let n="";for(let o=0;o<t.length;o++)if(Rl(t[o])){let a=Gd.indexOf(t[o]);n+=`${a}`}else n+=t[o];let r=Gs(e)+"_"+n,i=Kd.get(r);return i===void 0?i=0:i++,Kd.set(r,i),r+(i==0?"":`_${i}`)}function Qd(e){return(0,Xd.createHash)("sha1").update(e).digest("hex").slice(0,10)}function Jd(){nf.clear(),Kd.clear(),iE=1}var Zd;function aE(e){Zd=e}function U({expr:e,env:t,context:n}){if(!Zd)throw new Error("Internal Error: evaluateExpression function is not set.");return Zd({expr:e,env:t,context:n})}var Rn="__yo_self";function Ua(e,t,n){if(Oe(e)){if(e.isReferenceSemantics)return!1;if(n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>Ua(i.type,t,n));return n.delete(e.id),r}if(Tt(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>Ua(i.type,t,n));return n.delete(e.id),r}if(Ye(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.variants.every(i=>(i.fields??[]).every(o=>Ua(o.type,t,n)));return n.delete(e.id),r}return ft(e)||Vt(e)||et(e)?Ua(e.childType,t,n):Zi(e,t)}function za(e,t,n){if(Oe(e)){if(e.isReferenceSemantics||n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>za(i.type,t,n));return n.delete(e.id),r}if(Tt(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.fields.every(i=>za(i.type,t,n));return n.delete(e.id),r}if(Ye(e)){if(n.has(e.id))return!0;n.add(e.id);let r=e.variants.every(i=>(i.fields??[]).every(o=>za(o.type,t,n)));return n.delete(e.id),r}return ft(e)||Vt(e)||et(e)?za(e.childType,t,n):Do(e,t)}function sE(e,t,n,r){let i=Qt(e),o=U({expr:i,env:n,context:{...r,SelfType:t,forceCompileTimeBindings:!1}});if(!o.$)throw new Error(`Failed to evaluate auto-generated expression: ${A(i)}`);return{expr:o,env:o.$.env}}function Ws({label:e,functionSignature:t,SelfType:n,env:r,context:i}){let{expr:o,env:a}=sE(t,n,r,i);if(S(o)&&o.$&&o.$.value&&X(o.$.value)&&_e(o.$.value.value)){let s=o.$.value.value,l={label:e,type:s,assignedValue:void 0,exprs:{expr:o,labelExpr:o.args[0],typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:void 0}};if(n.trait){let u=n.trait.fields.findIndex(c=>c.label===e);u>=0?n.trait.fields[u]=l:n.trait.fields.push(l)}}return a}function Ri({label:e,functionCode:t,SelfType:n,env:r,context:i}){let{expr:o,env:a}=sE(t,n,r,i);if(S(o)&&o.$&&o.$.value&&Ie(o.$.value)){o.$.value.funcId+=e,o.$.value.funcName=e;let s={label:e,type:o.$.type,assignedValue:o.$.value,exprs:{expr:o,labelExpr:o.args[0],typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:o}};if(n.trait){let l=n.trait.fields.findIndex(u=>u.label===e);l>=0?n.trait.fields[l]=s:n.trait.fields.push(s)}}return a}var em=`(fn(${Rn} : Self) -> unit)`,af=`(fn(${Rn} : Self) -> unit)`,sf=`(fn(${Rn} : Self) -> Self)`;function GS(e){return e.replace(/[^a-zA-Z0-9_]/g,t=>`_u${t.charCodeAt(0)}_`)}function WS(e){return/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e)}function tm(e,t){if(e.length===0)return{destructuringExpr:"",callsExpr:""};let n=[],r=[];for(let i of e)if(WS(i)){let o=xt("field_"+i);n.push(`${i} : ${o}`),r.push(`(${t})(${o});`)}else{let o=xt("field_"+GS(i));n.push(`(${i}) : ${o}`),r.push(`(${t})(${o});`)}return{destructuringExpr:`{ ${n.join(", ")} } := ${Rn};`,callsExpr:r.join(`
82
82
  `)}}function jS(e){let t=em;if(!Ar(e))return{signature:t,code:`(${t} ())`};let n=e.fields.filter(a=>mt(a.type)).map(a=>a.label);if(!n.length)return{signature:t,code:`(${t} ())`};let{destructuringExpr:r,callsExpr:i}=tm(n,F.___drop[0]),o=`
83
83
  ${r}
84
84
  ${i}
@@ -154,14 +154,14 @@ Given: "${O(t.type)}"`)}}}return{expectedEnv:e.env,givenEnv:t.env}}function om(e
154
154
  `)}function RE(e){let t={moduleDoc:null,declarations:[]},n=[],r=null,i="",o=0;for(;o<e.length;){let a=e[o];if(v0(a))if(r===null&&(r=a.position,i=a.modulePath),a.type==="inner_doc_line_comment"){for(n.push(lm(a.value)),o++;o<e.length&&e[o].type==="whitespace";){if(e[o].value.includes(`
155
155
  `)){let s=o+1;for(;s<e.length&&e[s].type==="whitespace";)s++;if(s<e.length&&e[s].type==="inner_doc_line_comment"){o=s;break}else break}o++}continue}else{n.push(VE(a.value)),o++;continue}if(a.type==="doc_line_comment"){let s=[],l=a.position,u=a.modulePath;for(s.push(lm(a.value)),o++;o<e.length;){let p=o;for(;p<e.length&&e[p].type==="whitespace";)p++;if(p<e.length&&e[p].type==="doc_line_comment")s.push(lm(e[p].value)),o=p+1;else break}let c={content:s.join(`
156
156
  `),inner:!1,position:l,modulePath:u},{name:f,position:_}=ME(e,o);t.declarations.push({comment:c,declarationName:f,declarationPosition:_});continue}if(a.type==="doc_block_comment"){let s={content:VE(a.value),inner:!1,position:a.position,modulePath:a.modulePath};o++;let{name:l,position:u}=ME(e,o);t.declarations.push({comment:s,declarationName:l,declarationPosition:u});continue}o++}return n.length>0&&r!==null&&(t.moduleDoc={content:n.join(`
157
- `),inner:!0,position:r,modulePath:i}),t}function ME(e,t){let n=t;for(;n<e.length;){let r=e[n];if(T0(r)||h0(r)){n++;continue}if(r.type==="identifier")return{name:r.value,position:r.position};if(r.type==="("){n++;continue}return{name:"",position:null}}return{name:"",position:null}}function qf(e){var t;return b(e,["->","=>"])?!!(((t=e.$)==null?void 0:t.isAnonymousFunctionDefinition)===!0||S(e)&&S(e.func)&&(b(e.func,B.fn)||b(e.func,B.unsafe_fn)||b(e.func,B.Fn))||!e.$):!1}function Gf(e,t){if(!S(e))return!1;if(t(e.func))return!0;for(let n of e.args)if(S(n)&&b(n,"=>")){for(let r of n.args)if(t(r))return!0}else if(t(n))return!0;return!1}function eo(e){var t,n,r;if(Q(e))return Tn(e,B.escape);if(S(e)){if((t=e.$)!=null&&t.macroExpansion)return eo(e.$.macroExpansion);if(b(e,B.cond)||b(e,B.match))return Gf(e,eo);if(qf(e)||S(e.func)&&((n=e.func.$)==null?void 0:n.value)!==void 0&&X(e.func.$.value)&&_e(e.func.$.value.value)||S(e.func)&&((r=e.func.$)==null?void 0:r.value)!==void 0&&X(e.func.$.value)&&ur(e.func.$.value.value))return!1;if(eo(e.func))return!0;for(let i of e.args)if(eo(i))return!0}return!1}function Hs(e){var t,n,r;if(Q(e))return Tn(e,B.return)||Tn(e,B.escape);if(S(e)){if(b(e,B.return)||b(e,B.escape))return!0;if((t=e.$)!=null&&t.macroExpansion)return Hs(e.$.macroExpansion);if(b(e,B.cond)||b(e,B.match))return Gf(e,Hs);if(qf(e)||S(e.func)&&((n=e.func.$)==null?void 0:n.value)!==void 0&&X(e.func.$.value)&&_e(e.func.$.value.value)||S(e.func)&&((r=e.func.$)==null?void 0:r.value)!==void 0&&X(e.func.$.value)&&ur(e.func.$.value.value))return!1;if(Hs(e.func))return!0;for(let i of e.args)if(Hs(i))return!0}return!1}function Fr(e){var t,n,r,i,o,a,s;if(S(e)){if(((n=(t=e.func.$)==null?void 0:t.type)==null?void 0:n.ioBuiltin)==="io_await")return!0;if((r=e.$)!=null&&r.macroExpansion)return Fr(e.$.macroExpansion);if(b(e,B.cond)||b(e,B.match))return Gf(e,Fr);if(((o=(i=e.func.$)==null?void 0:i.type)==null?void 0:o.ioBuiltin)==="io_async"||qf(e)||X((a=e.func.$)==null?void 0:a.value)&&_e(e.func.$.value.value)||S(e.func)&&((s=e.func.$)==null?void 0:s.value)!==void 0&&X(e.func.$.value)&&ur(e.func.$.value.value))return!1;if(Fr(e.func))return!0;for(let l of e.args)if(Fr(l))return!0}return!1}function Ys(e){var t,n,r;if(Q(e))return Tn(e,B.break)||Tn(e,B.return)||Tn(e,B.escape);if(S(e)){if(b(e,B.return)||b(e,B.escape))return!0;if((t=e.$)!=null&&t.macroExpansion)return Ys(e.$.macroExpansion);if(b(e,B.cond)||b(e,B.match))return Gf(e,Ys);if(qf(e)||S(e.func)&&((n=e.func.$)==null?void 0:n.value)!==void 0&&X(e.func.$.value)&&_e(e.func.$.value.value)||S(e.func)&&((r=e.func.$)==null?void 0:r.value)!==void 0&&X(e.func.$.value)&&ur(e.func.$.value.value))return!1;if(Ys(e.func))return!0;for(let i of e.args)if(Ys(i))return!0}return!1}var ke={tag:"Unit",type:Ci()};function tu(e){if(e&&e.tag==="FnCall"&&b(e,":=")){let t=e.args[0];if(t&&t.tag==="Atom"&&t.token.type==="identifier"&&t.$){let n=t.token.value,r=ve(t.$.env,n);if(r.length>0)return r[r.length-1].id}}}function Wf(e,t){var a;let n=[],r=new Map,i=new Map,o=new Map;if(vo(e,n,r,i,o,t),(a=e.$)!=null&&a.deferredDropExpressions)for(let s of e.$.deferredDropExpressions)vo(s,n,r,i,o,t);return n.length===0&&r.clear(),{suspensionPoints:n,capturedVariables:Array.from(r.values()),hasSuspensions:n.length>0,variableIdRemapping:o}}function vo(e,t,n,r,i,o,a){var s,l;switch(e.tag){case"Atom":if(e.$&&e.token.type==="identifier"){let u=e.token.value,c=e.$.type,f=ve(e.$.env,u);if(f.length>0){let _=f[f.length-1];if(_&&!n.has(_.id)&&!_.isCompileTimeOnly){let p=`${_.name}:${_.frameLevel}`,d=r.get(p);if(d&&d!==_.id)i.set(_.id,d);else if(_.isOwningTheSameRcValueAs){let v=_.isOwningTheSameRcValueAs;if(!n.has(v.id)){let y={id:v.id,name:v.name,type:v.type,isOwningTheSameRcValueAs:void 0};n.set(v.id,y);let h=`${v.name}:${v.frameLevel}`;r.has(h)||r.set(h,v.id)}}else n.set(_.id,{id:_.id,name:u,type:c,isOwningTheSameRcValueAs:void 0}),r.has(p)||r.set(p,_.id)}}}break;case"FnCall":{if(b(e,B.while)){let u=t.length;vo(e.func,t,n,r,i,o,e);for(let f of e.args)vo(f,t,n,r,i,o,e);let c=t.length;if(c>u)for(let f=u;f<c;f++)t[f].isInsideWhile=!0,t[f].whileNestingDepth=(t[f].whileNestingDepth??0)+1,t[f].enclosingWhileExpr||(t[f].enclosingWhileExpr=e);break}if(b(e,B.cond)){OE(e,t,n,r,i,o);break}if(b(e,B.match)){OE(e,t,n,r,i,o);break}if(o.detect(e,a,t),o.shouldSkipBody(e)){if((s=e.$)!=null&&s.deferredDupExpressions)for(let u of e.$.deferredDupExpressions)vo(u,t,n,r,i,o,e);break}vo(e.func,t,n,r,i,o,e);for(let u of e.args)vo(u,t,n,r,i,o,e);if((l=e.$)!=null&&l.deferredDropExpressions)for(let u of e.$.deferredDropExpressions)vo(u,t,n,r,i,o,e);break}}}function OE(e,t,n,r,i,o){if(e.tag!=="FnCall")return;let a=t.length;vo(e.func,t,n,r,i,o,e);let s=new Map(r),l=[];for(let c of e.args){let f=t.length;vo(c,t,n,r,i,o,e),l.push(t.slice(f))}r.clear();for(let[c,f]of s)r.set(c,f);let u=Math.max(...l.map(c=>c.length),0);if(u>0){t.splice(a);let c=a;for(let f=0;f<u;f++){let _;for(let p of l)if(f<p.length){_=p[f];break}_&&(_.index=t.length,_.isInsideCond=!0,f===0&&(_.needsOwnCondBranchField=!0),f>0&&(_.condBranchSourceIndex=c),t.push(_))}}}function PE(e){let n=Wf(e,{detect(i,o,a){var s;if(i.tag==="FnCall"&&Or(i)){let l=i.args[0];if(!l)return;let u=(s=l.$)==null?void 0:s.type;if(u&&yt(u)){let c=jn(u);if(!c)return;let f=c.isFuture.outputType,_;if(l.tag==="Atom"&&l.token.type==="identifier"&&l.$){let d=l.token.value,v=ve(l.$.env,d);if(v.length>0){let y=v[v.length-1];y.isOwningTheSameRcValueAs?_=y.isOwningTheSameRcValueAs.id:_=y.id}}let p=tu(o);a.push({index:a.length,expr:i,resultType:f,futureType:c,targetVariableId:p,futureVariableId:_})}}},shouldSkipBody(i){return Qn(i)}}),r=n.capturedVariables.map(i=>({id:i.id,name:i.name,type:i.type,kind:"local",isOwningTheSameRcValueAs:void 0}));return{awaitPoints:n.suspensionPoints,capturedVariables:r,hasAwaits:n.hasSuspensions,variableIdRemapping:n.variableIdRemapping}}function Qn(e){var t,n;return e.tag!=="FnCall"?!1:((n=(t=e.func.$)==null?void 0:t.type)==null?void 0:n.ioBuiltin)==="io_async"}function Or(e){var t,n;return e.tag!=="FnCall"?!1:((n=(t=e.func.$)==null?void 0:t.type)==null?void 0:n.ioBuiltin)==="io_await"}function UE(e){var t,n;return e.tag!=="FnCall"?!1:((n=(t=e.func.$)==null?void 0:t.type)==null?void 0:n.ioBuiltin)==="io_state"}function jf(e){var t,n;return e.tag!=="FnCall"?!1:((n=(t=e.func.$)==null?void 0:t.type)==null?void 0:n.ioBuiltin)==="io_spawn"}function zE(e){var t,n;return e.tag!=="FnCall"?!1:((n=(t=e.func.$)==null?void 0:t.type)==null?void 0:n.ioBuiltin)==="join_handle_await"}function Wt(e){return Q(e)&&e.token.type==="identifier"||e.token.type==="operator"}function nu(e,t,n){var a;if(!((a=e.$)!=null&&a.variableName))return;let r=ve(t,e.$.variableName);if(!r.length)return;let i=r[r.length-1],o=new Set;for(;i&&i.isOwningTheSameRcValueAs;){if(o.has(i.id))return;o.add(i.id),i=i.isOwningTheSameRcValueAs}if(i&&i.isOwningTheRcValue)return i}function pa(e){var r,i;let t=(r=e.$)==null?void 0:r.env;if(!t)return;let n;if((i=e.$)!=null&&i.pathCollection)for(let o of e.$.pathCollection)o.length>0&&typeof o[0]=="string"&&(n=o[0]);else Q(e)&&(n=e.token.value);if(n){let o=ve(t,n),a=o[o.length-1];if(a!=null&&a.isImplicit)throw m({token:e.token,errorMessage:`Cannot use implicit variable "${a.name}" in assignment. Implicit variables must be passed via using() parameters.`})}}var Hf=!0;function um({variablesToDrop:e,env:t,context:n}){let r=[],i=t;for(let o of e){let a=Qt(`${F.___drop[0]}(${o.name})`),s=U({expr:a,env:i,context:{...n,expectedType:{env:i,type:ke.type}}});r.push(s),s.$&&s.$.env&&(i=s.$.env)}return{deferredDropExpressions:r.length>0?r:void 0,env:i}}function ru(e,t,n){var s,l;if(S(e)&&Qn(e))return;if((s=e.$)!=null&&s.deferredDupExpressions)for(let u of e.$.deferredDupExpressions)ru(u,t,n);if(S(e)&&S(e.func)&&b(e.func,".",2)&&Q(e.func.args[0])&&Q(e.func.args[1])&&e.func.args[1].token.value===F.___dup[0]&&e.args.length===0&&((l=e.$)!=null&&l.env)){let u=e.func.args[0].token.value,c=ve(e.$.env,u);if(c.length>0){let f=c[c.length-1];t.has(f.id)||t.set(f.id,[]),t.get(f.id).push(e)}return}if(S(e)&&b(e,B.while))return;function i(u){var c,f;if(an((c=u.$)==null?void 0:c.controlFlow))return!0;if(S(u)&&b(u,B.begin)){let _=u.args[u.args.length-1];if(an((f=_==null?void 0:_.$)==null?void 0:f.controlFlow)||S(_)&&b(_,B.return))return!0}return!!(S(u)&&b(u,B.return))}function o(u){if(S(u)&&b(u,B.tuple,0))return!0;if(S(u)&&b(u,B.begin)){if(u.args.length===0)return!0;if(u.args.length===1){let c=u.args[0];if(S(c)&&b(c,B.tuple,0))return!0}}return!1}function a(u,c){let f=[],_=[],p=[];for(let v=c;v<u.args.length;v++){let y=u.args[v];if(S(y)&&b(y,"=>",2)){let h=y.args[1],g=BE(h);f.push(g),_.push(i(h)),p.push(o(h))}}let d=new Set;for(let v of f){for(let y of v.dupCalls.keys())d.add(y);for(let y of v.varsWithPartialBranchDups)n.add(y)}if(f.length>0)for(let v of d){let y=[],h=[];for(let g=0;g<f.length;g++){let T=f[g],E=T.dupCalls.has(v),$=_[g];if(E){let k=T.dupCalls.get(v);$?y.push(...k):h.push(...k)}}for(let g of y)t.has(v)||t.set(v,[]),g.__isEarlyReturnDup=!0,t.get(v).push(g);if(h.length>0){let g=0,T=0;for(let E=0;E<f.length;E++)_[E]||(g++,f[E].dupCalls.has(v)&&T++);if(T===g){t.has(v)||t.set(v,[]);for(let E of h)t.get(v).push(E)}else n.add(v)}}}if(S(e)&&b(e,B.cond)){a(e,0);return}if(S(e)&&b(e,B.match)){e.args[0]&&ru(e.args[0],t,n),a(e,1);return}if(S(e)){ru(e.func,t,n);for(let u of e.args)ru(u,t,n)}}function BE(e){let t=new Map,n=new Set;return ru(e,t,n),{dupCalls:t,varsWithPartialBranchDups:n}}function Yf(e){return S(e)&&b(e,B.tuple,0)}function cm(e,t){var n;if((n=e.$)!=null&&n.deferredDupExpressions&&(e.$.deferredDupExpressions=e.$.deferredDupExpressions.filter(r=>!t.has(r)),e.$.deferredDupExpressions.length===0&&(e.$.deferredDupExpressions=void 0)),S(e)){cm(e.func,t);for(let r of e.args)cm(r,t)}}function E0(e,t){var i,o,a,s,l,u;let n=new Set,r=e.args;for(let c=0;c<r.length;c++){let f=r[c];if(!S(f)||!b(f,B.while))continue;let _=f.args[f.args.length-1];if(!(!_||!S(_)||!b(_,B.begin)))for(let p of _.args){if(!S(p)||!b(p,B.match))continue;let d=p.args[0];if(!d||!Q(d))continue;let v=d.token.value,y,h,g;for(let L=1;L<p.args.length;L++){let x=p.args[L];if(!S(x)||!b(x,"=>",2))continue;let V=x.args[1];if(!(!S(V)||!b(V,B.begin))){for(let M of V.args)if(S(M)&&b(M,"=",2)){let q=M.args[0];if(Q(q)&&q.token.value===v){y=M.args[1],h=M,g=V;break}}if(y)break}}if(!y||!h||!g||!((i=y.$)!=null&&i.deferredDupExpressions)||y.$.deferredDupExpressions.length===0)continue;let T;for(let L=0;L<c;L++){let x=r[L];if(S(x)&&b(x,"=",2)){let V=x.args[0];if(Q(V)&&V.token.value===v){T=x.args[1];break}if(S(V)&&V.args.length>0&&Q(V.args[0])&&V.args[0].token.value===v){T=x.args[1];break}}}if(!T)continue;let E=(o=T.$)==null?void 0:o.variableName;if(!E||!((a=T.$)!=null&&a.env))continue;let $=ve(T.$.env,E);if($.length===0||$[$.length-1].isOwningTheRcValue||!((s=T.$)!=null&&s.deferredDupExpressions)||T.$.deferredDupExpressions.length===0)continue;let C=!1;for(let L=c+1;L<r.length;L++)if(fm(r[L],v)){C=!0;break}if(C)continue;T.$.deferredDupExpressions=void 0,y.$.deferredDupExpressions=void 0;let w=(l=h.$)==null?void 0:l.variableName;w&&((u=g.$)!=null&&u.deferredDropExpressions)&&(g.$.deferredDropExpressions=g.$.deferredDropExpressions.filter(L=>$0(L)!==w),g.$.deferredDropExpressions.length===0&&(g.$.deferredDropExpressions=void 0)),h.$&&(h.$.variableName=void 0);let I=ve(t,v);if(I.length>0){let L=I[I.length-1];t=zt(t,L,{...L,consumedAtToken:L.token})}n.add(v)}}return{optimizedVarNames:n,env:t}}function $0(e){if(S(e)&&e.args.length===0&&S(e.func)&&b(e.func,".",2)&&Q(e.func.args[1])&&e.func.args[1].token.value===F.___drop[0]&&Q(e.func.args[0]))return e.func.args[0].token.value;if(S(e)&&b(e,F.___drop)&&e.args.length>=1&&Q(e.args[0]))return e.args[0].token.value}function fm(e,t){if(Q(e)&&e.token.value===t)return!0;if(S(e)){if(fm(e.func,t))return!0;for(let n of e.args)if(fm(n,t))return!0}return!1}function En({expr:e,env:t,context:n,variablesToAdd:r=[],isEvaluatingFunctionBodyBeginBlock:i=!1}){var k,C,w,I,L,x,V,M,q;if(S(e)&&b(e,"_")&&!b(e,B.begin)){let P=e;P.args.some(te=>S(te)&&b(te,":"))||(P.func={...P.func,token:{...P.func.token,value:B.begin[0]}})}if(!S(e)||!b(e,B.begin)){let P={tag:"FnCall",func:{tag:"Atom",token:{...e.token,value:B.begin[0]}},args:[Et(e)],token:{...e.token,value:B.begin[0]}};To(e,P),e=e}let o=e.args,a=n.expectedType;if(o.length===0)return e.$={env:t,type:ke.type,value:ke,pathCollection:[]},e;t=vt(t,void 0,!0);for(let P=0;P<r.length;P++){let R=r[P],{env:te}=je({env:t,variable:R});t=te}let s=o[o.length-1],l,u=!1;for(let P=0;P<o.length;P++){let R=o[P];if(Q(R)&&Tn(R,B.return)||S(R)&&b(R,B.return)){if(P!==o.length-1&&!(P===o.length-2&&Yf(o[o.length-1])))throw m({token:R.token,errorMessage:'The "return" keyword can only be used as the last expression.'});if(S(R)&&it(R,B.return,1),!n.isEvaluatingFunctionBodyOrAsyncBlock)throw m({token:R.token,errorMessage:'The "return" keyword can only be used inside a function body or async block.'});if(l=R,Q(R)){R.$={env:t,type:ke.type,value:ke,pathCollection:[],controlFlow:da("return")},s=R;break}else{it(R,B.return,1);let te=R.args[0],j=U({expr:te,env:t,context:{...n,expectedType:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?{type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t}:n.expectedType}});if(!j.$)throw m({token:te.token,errorMessage:`Return expression is not evaluated correctly:
157
+ `),inner:!0,position:r,modulePath:i}),t}function ME(e,t){let n=t;for(;n<e.length;){let r=e[n];if(T0(r)||h0(r)){n++;continue}if(r.type==="identifier")return{name:r.value,position:r.position};if(r.type==="("){n++;continue}return{name:"",position:null}}return{name:"",position:null}}function qf(e){var t,n;return b(e,["->","=>"])?!!(((t=e.$)==null?void 0:t.isAnonymousFunctionDefinition)===!0||((n=e.$)==null?void 0:n.value)!==void 0&&Ie(e.$.value)||S(e)&&S(e.func)&&(b(e.func,B.fn)||b(e.func,B.unsafe_fn)||b(e.func,B.Fn))||!e.$):!1}function Gf(e,t){if(!S(e))return!1;if(t(e.func))return!0;for(let n of e.args)if(S(n)&&b(n,"=>")){for(let r of n.args)if(t(r))return!0}else if(t(n))return!0;return!1}function eo(e){var t,n,r;if(Q(e))return Tn(e,B.escape);if(S(e)){if((t=e.$)!=null&&t.macroExpansion)return eo(e.$.macroExpansion);if(b(e,B.cond)||b(e,B.match))return Gf(e,eo);if(qf(e)||S(e.func)&&((n=e.func.$)==null?void 0:n.value)!==void 0&&X(e.func.$.value)&&_e(e.func.$.value.value)||S(e.func)&&((r=e.func.$)==null?void 0:r.value)!==void 0&&X(e.func.$.value)&&ur(e.func.$.value.value))return!1;if(eo(e.func))return!0;for(let i of e.args)if(eo(i))return!0}return!1}function Hs(e){var t,n,r;if(Q(e))return Tn(e,B.return)||Tn(e,B.escape);if(S(e)){if(b(e,B.return)||b(e,B.escape))return!0;if((t=e.$)!=null&&t.macroExpansion)return Hs(e.$.macroExpansion);if(b(e,B.cond)||b(e,B.match))return Gf(e,Hs);if(qf(e)||S(e.func)&&((n=e.func.$)==null?void 0:n.value)!==void 0&&X(e.func.$.value)&&_e(e.func.$.value.value)||S(e.func)&&((r=e.func.$)==null?void 0:r.value)!==void 0&&X(e.func.$.value)&&ur(e.func.$.value.value))return!1;if(Hs(e.func))return!0;for(let i of e.args)if(Hs(i))return!0}return!1}function Fr(e){var t,n,r,i,o,a,s;if(S(e)){if(((n=(t=e.func.$)==null?void 0:t.type)==null?void 0:n.ioBuiltin)==="io_await")return!0;if((r=e.$)!=null&&r.macroExpansion)return Fr(e.$.macroExpansion);if(b(e,B.cond)||b(e,B.match))return Gf(e,Fr);if(((o=(i=e.func.$)==null?void 0:i.type)==null?void 0:o.ioBuiltin)==="io_async"||qf(e)||X((a=e.func.$)==null?void 0:a.value)&&_e(e.func.$.value.value)||S(e.func)&&((s=e.func.$)==null?void 0:s.value)!==void 0&&X(e.func.$.value)&&ur(e.func.$.value.value))return!1;if(Fr(e.func))return!0;for(let l of e.args)if(Fr(l))return!0}return!1}function Ys(e){var t,n,r;if(Q(e))return Tn(e,B.break)||Tn(e,B.return)||Tn(e,B.escape);if(S(e)){if(b(e,B.return)||b(e,B.escape))return!0;if((t=e.$)!=null&&t.macroExpansion)return Ys(e.$.macroExpansion);if(b(e,B.cond)||b(e,B.match))return Gf(e,Ys);if(qf(e)||S(e.func)&&((n=e.func.$)==null?void 0:n.value)!==void 0&&X(e.func.$.value)&&_e(e.func.$.value.value)||S(e.func)&&((r=e.func.$)==null?void 0:r.value)!==void 0&&X(e.func.$.value)&&ur(e.func.$.value.value))return!1;if(Ys(e.func))return!0;for(let i of e.args)if(Ys(i))return!0}return!1}var ke={tag:"Unit",type:Ci()};function tu(e){if(e&&e.tag==="FnCall"&&b(e,":=")){let t=e.args[0];if(t&&t.tag==="Atom"&&t.token.type==="identifier"&&t.$){let n=t.token.value,r=ve(t.$.env,n);if(r.length>0)return r[r.length-1].id}}}function Wf(e,t){var a;let n=[],r=new Map,i=new Map,o=new Map;if(vo(e,n,r,i,o,t),(a=e.$)!=null&&a.deferredDropExpressions)for(let s of e.$.deferredDropExpressions)vo(s,n,r,i,o,t);return n.length===0&&r.clear(),{suspensionPoints:n,capturedVariables:Array.from(r.values()),hasSuspensions:n.length>0,variableIdRemapping:o}}function vo(e,t,n,r,i,o,a){var s,l;switch(e.tag){case"Atom":if(e.$&&e.token.type==="identifier"){let u=e.token.value,c=e.$.type,f=ve(e.$.env,u);if(f.length>0){let _=f[f.length-1];if(_&&!n.has(_.id)&&!_.isCompileTimeOnly){let p=`${_.name}:${_.frameLevel}`,d=r.get(p);if(d&&d!==_.id)i.set(_.id,d);else if(_.isOwningTheSameRcValueAs){let v=_.isOwningTheSameRcValueAs;if(!n.has(v.id)){let y={id:v.id,name:v.name,type:v.type,isOwningTheSameRcValueAs:void 0};n.set(v.id,y);let h=`${v.name}:${v.frameLevel}`;r.has(h)||r.set(h,v.id)}}else n.set(_.id,{id:_.id,name:u,type:c,isOwningTheSameRcValueAs:void 0}),r.has(p)||r.set(p,_.id)}}}break;case"FnCall":{if(b(e,B.while)){let u=t.length;vo(e.func,t,n,r,i,o,e);for(let f of e.args)vo(f,t,n,r,i,o,e);let c=t.length;if(c>u)for(let f=u;f<c;f++)t[f].isInsideWhile=!0,t[f].whileNestingDepth=(t[f].whileNestingDepth??0)+1,t[f].enclosingWhileExpr||(t[f].enclosingWhileExpr=e);break}if(b(e,B.cond)){OE(e,t,n,r,i,o);break}if(b(e,B.match)){OE(e,t,n,r,i,o);break}if(o.detect(e,a,t),o.shouldSkipBody(e)){if((s=e.$)!=null&&s.deferredDupExpressions)for(let u of e.$.deferredDupExpressions)vo(u,t,n,r,i,o,e);break}vo(e.func,t,n,r,i,o,e);for(let u of e.args)vo(u,t,n,r,i,o,e);if((l=e.$)!=null&&l.deferredDropExpressions)for(let u of e.$.deferredDropExpressions)vo(u,t,n,r,i,o,e);break}}}function OE(e,t,n,r,i,o){if(e.tag!=="FnCall")return;let a=t.length;vo(e.func,t,n,r,i,o,e);let s=new Map(r),l=[];for(let c of e.args){let f=t.length;vo(c,t,n,r,i,o,e),l.push(t.slice(f))}r.clear();for(let[c,f]of s)r.set(c,f);let u=Math.max(...l.map(c=>c.length),0);if(u>0){t.splice(a);let c=a;for(let f=0;f<u;f++){let _;for(let p of l)if(f<p.length){_=p[f];break}_&&(_.index=t.length,_.isInsideCond=!0,f===0&&(_.needsOwnCondBranchField=!0),f>0&&(_.condBranchSourceIndex=c),t.push(_))}}}function PE(e){let n=Wf(e,{detect(i,o,a){var s;if(i.tag==="FnCall"&&Or(i)){let l=i.args[0];if(!l)return;let u=(s=l.$)==null?void 0:s.type;if(u&&yt(u)){let c=jn(u);if(!c)return;let f=c.isFuture.outputType,_;if(l.tag==="Atom"&&l.token.type==="identifier"&&l.$){let d=l.token.value,v=ve(l.$.env,d);if(v.length>0){let y=v[v.length-1];y.isOwningTheSameRcValueAs?_=y.isOwningTheSameRcValueAs.id:_=y.id}}let p=tu(o);a.push({index:a.length,expr:i,resultType:f,futureType:c,targetVariableId:p,futureVariableId:_})}}},shouldSkipBody(i){return Qn(i)}}),r=n.capturedVariables.map(i=>({id:i.id,name:i.name,type:i.type,kind:"local",isOwningTheSameRcValueAs:void 0}));return{awaitPoints:n.suspensionPoints,capturedVariables:r,hasAwaits:n.hasSuspensions,variableIdRemapping:n.variableIdRemapping}}function Qn(e){var t,n;return e.tag!=="FnCall"?!1:((n=(t=e.func.$)==null?void 0:t.type)==null?void 0:n.ioBuiltin)==="io_async"}function Or(e){var t,n;return e.tag!=="FnCall"?!1:((n=(t=e.func.$)==null?void 0:t.type)==null?void 0:n.ioBuiltin)==="io_await"}function UE(e){var t,n;return e.tag!=="FnCall"?!1:((n=(t=e.func.$)==null?void 0:t.type)==null?void 0:n.ioBuiltin)==="io_state"}function jf(e){var t,n;return e.tag!=="FnCall"?!1:((n=(t=e.func.$)==null?void 0:t.type)==null?void 0:n.ioBuiltin)==="io_spawn"}function zE(e){var t,n;return e.tag!=="FnCall"?!1:((n=(t=e.func.$)==null?void 0:t.type)==null?void 0:n.ioBuiltin)==="join_handle_await"}function Wt(e){return Q(e)&&e.token.type==="identifier"||e.token.type==="operator"}function nu(e,t,n){var a;if(!((a=e.$)!=null&&a.variableName))return;let r=ve(t,e.$.variableName);if(!r.length)return;let i=r[r.length-1],o=new Set;for(;i&&i.isOwningTheSameRcValueAs;){if(o.has(i.id))return;o.add(i.id),i=i.isOwningTheSameRcValueAs}if(i&&i.isOwningTheRcValue)return i}function pa(e){var r,i;let t=(r=e.$)==null?void 0:r.env;if(!t)return;let n;if((i=e.$)!=null&&i.pathCollection)for(let o of e.$.pathCollection)o.length>0&&typeof o[0]=="string"&&(n=o[0]);else Q(e)&&(n=e.token.value);if(n){let o=ve(t,n),a=o[o.length-1];if(a!=null&&a.isImplicit)throw m({token:e.token,errorMessage:`Cannot use implicit variable "${a.name}" in assignment. Implicit variables must be passed via using() parameters.`})}}var Hf=!0;function um({variablesToDrop:e,env:t,context:n}){let r=[],i=t;for(let o of e){let a=Qt(`${F.___drop[0]}(${o.name})`),s=U({expr:a,env:i,context:{...n,expectedType:{env:i,type:ke.type}}});r.push(s),s.$&&s.$.env&&(i=s.$.env)}return{deferredDropExpressions:r.length>0?r:void 0,env:i}}function ru(e,t,n){var s,l;if(S(e)&&Qn(e))return;if((s=e.$)!=null&&s.deferredDupExpressions)for(let u of e.$.deferredDupExpressions)ru(u,t,n);if(S(e)&&S(e.func)&&b(e.func,".",2)&&Q(e.func.args[0])&&Q(e.func.args[1])&&e.func.args[1].token.value===F.___dup[0]&&e.args.length===0&&((l=e.$)!=null&&l.env)){let u=e.func.args[0].token.value,c=ve(e.$.env,u);if(c.length>0){let f=c[c.length-1];t.has(f.id)||t.set(f.id,[]),t.get(f.id).push(e)}return}if(S(e)&&b(e,B.while))return;function i(u){var c,f;if(an((c=u.$)==null?void 0:c.controlFlow))return!0;if(S(u)&&b(u,B.begin)){let _=u.args[u.args.length-1];if(an((f=_==null?void 0:_.$)==null?void 0:f.controlFlow)||S(_)&&b(_,B.return))return!0}return!!(S(u)&&b(u,B.return))}function o(u){if(S(u)&&b(u,B.tuple,0))return!0;if(S(u)&&b(u,B.begin)){if(u.args.length===0)return!0;if(u.args.length===1){let c=u.args[0];if(S(c)&&b(c,B.tuple,0))return!0}}return!1}function a(u,c){let f=[],_=[],p=[];for(let v=c;v<u.args.length;v++){let y=u.args[v];if(S(y)&&b(y,"=>",2)){let h=y.args[1],g=BE(h);f.push(g),_.push(i(h)),p.push(o(h))}}let d=new Set;for(let v of f){for(let y of v.dupCalls.keys())d.add(y);for(let y of v.varsWithPartialBranchDups)n.add(y)}if(f.length>0)for(let v of d){let y=[],h=[];for(let g=0;g<f.length;g++){let T=f[g],E=T.dupCalls.has(v),$=_[g];if(E){let k=T.dupCalls.get(v);$?y.push(...k):h.push(...k)}}for(let g of y)t.has(v)||t.set(v,[]),g.__isEarlyReturnDup=!0,t.get(v).push(g);if(h.length>0){let g=0,T=0;for(let E=0;E<f.length;E++)_[E]||(g++,f[E].dupCalls.has(v)&&T++);if(T===g){t.has(v)||t.set(v,[]);for(let E of h)t.get(v).push(E)}else n.add(v)}}}if(S(e)&&b(e,B.cond)){a(e,0);return}if(S(e)&&b(e,B.match)){e.args[0]&&ru(e.args[0],t,n),a(e,1);return}if(S(e)){ru(e.func,t,n);for(let u of e.args)ru(u,t,n)}}function BE(e){let t=new Map,n=new Set;return ru(e,t,n),{dupCalls:t,varsWithPartialBranchDups:n}}function Yf(e){return S(e)&&b(e,B.tuple,0)}function cm(e,t){var n;if((n=e.$)!=null&&n.deferredDupExpressions&&(e.$.deferredDupExpressions=e.$.deferredDupExpressions.filter(r=>!t.has(r)),e.$.deferredDupExpressions.length===0&&(e.$.deferredDupExpressions=void 0)),S(e)){cm(e.func,t);for(let r of e.args)cm(r,t)}}function E0(e,t){var i,o,a,s,l,u;let n=new Set,r=e.args;for(let c=0;c<r.length;c++){let f=r[c];if(!S(f)||!b(f,B.while))continue;let _=f.args[f.args.length-1];if(!(!_||!S(_)||!b(_,B.begin)))for(let p of _.args){if(!S(p)||!b(p,B.match))continue;let d=p.args[0];if(!d||!Q(d))continue;let v=d.token.value,y,h,g;for(let L=1;L<p.args.length;L++){let x=p.args[L];if(!S(x)||!b(x,"=>",2))continue;let V=x.args[1];if(!(!S(V)||!b(V,B.begin))){for(let M of V.args)if(S(M)&&b(M,"=",2)){let q=M.args[0];if(Q(q)&&q.token.value===v){y=M.args[1],h=M,g=V;break}}if(y)break}}if(!y||!h||!g||!((i=y.$)!=null&&i.deferredDupExpressions)||y.$.deferredDupExpressions.length===0)continue;let T;for(let L=0;L<c;L++){let x=r[L];if(S(x)&&b(x,"=",2)){let V=x.args[0];if(Q(V)&&V.token.value===v){T=x.args[1];break}if(S(V)&&V.args.length>0&&Q(V.args[0])&&V.args[0].token.value===v){T=x.args[1];break}}}if(!T)continue;let E=(o=T.$)==null?void 0:o.variableName;if(!E||!((a=T.$)!=null&&a.env))continue;let $=ve(T.$.env,E);if($.length===0||$[$.length-1].isOwningTheRcValue||!((s=T.$)!=null&&s.deferredDupExpressions)||T.$.deferredDupExpressions.length===0)continue;let C=!1;for(let L=c+1;L<r.length;L++)if(fm(r[L],v)){C=!0;break}if(C)continue;T.$.deferredDupExpressions=void 0,y.$.deferredDupExpressions=void 0;let w=(l=h.$)==null?void 0:l.variableName;w&&((u=g.$)!=null&&u.deferredDropExpressions)&&(g.$.deferredDropExpressions=g.$.deferredDropExpressions.filter(L=>$0(L)!==w),g.$.deferredDropExpressions.length===0&&(g.$.deferredDropExpressions=void 0)),h.$&&(h.$.variableName=void 0);let I=ve(t,v);if(I.length>0){let L=I[I.length-1];t=zt(t,L,{...L,consumedAtToken:L.token})}n.add(v)}}return{optimizedVarNames:n,env:t}}function $0(e){if(S(e)&&e.args.length===0&&S(e.func)&&b(e.func,".",2)&&Q(e.func.args[1])&&e.func.args[1].token.value===F.___drop[0]&&Q(e.func.args[0]))return e.func.args[0].token.value;if(S(e)&&b(e,F.___drop)&&e.args.length>=1&&Q(e.args[0]))return e.args[0].token.value}function fm(e,t){if(Q(e)&&e.token.value===t)return!0;if(S(e)){if(fm(e.func,t))return!0;for(let n of e.args)if(fm(n,t))return!0}return!1}function En({expr:e,env:t,context:n,variablesToAdd:r=[],isEvaluatingFunctionBodyBeginBlock:i=!1}){var k,C,w,I,L,x,V,M,q;if(S(e)&&b(e,"_")&&!b(e,B.begin)){let P=e;P.args.some(te=>S(te)&&b(te,":"))||(P.func={...P.func,token:{...P.func.token,value:B.begin[0]}})}if(!S(e)||!b(e,B.begin)){let P={tag:"FnCall",func:{tag:"Atom",token:{...e.token,value:B.begin[0]}},args:[Et(e)],token:{...e.token,value:B.begin[0]}};To(e,P),e=e}let o=e.args,a=n.expectedType;if(o.length===0)return e.$={env:t,type:ke.type,value:ke,pathCollection:[]},e;t=vt(t,void 0,!0);for(let P=0;P<r.length;P++){let R=r[P],{env:te}=je({env:t,variable:R});t=te}let s=o[o.length-1],l,u=!1;for(let P=0;P<o.length;P++){let R=o[P];if(Q(R)&&Tn(R,B.return)||S(R)&&b(R,B.return)){if(P!==o.length-1&&!(P===o.length-2&&Yf(o[o.length-1])))throw m({token:R.token,errorMessage:'The "return" keyword can only be used as the last expression.'});if(S(R)&&it(R,B.return,1),!n.isEvaluatingFunctionBodyOrAsyncBlock)throw m({token:R.token,errorMessage:'The "return" keyword can only be used inside a function body or async block.'});if(l=R,Q(R)){R.$={env:t,type:ke.type,value:ke,pathCollection:[],controlFlow:da("return")},s=R;break}else{it(R,B.return,1);let te=R.args[0],j=U({expr:te,env:t,context:{...n,expectedType:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?{type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t}:n.expectedType}});if(!j.$)throw m({token:te.token,errorMessage:`Return expression is not evaluated correctly:
158
158
  ${A(te)}`});if(((k=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:k.kind)==="function-body"&&H(n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type)&&n.functionReturnImplConcreteType){let Y=j.$.type;if(n.functionReturnImplConcreteType.length>0){let le=n.functionReturnImplConcreteType[0];if(!Ce({type:le.concreteType,env:le.env},{type:Y,env:t}))throw _n([{token:R.token,errorMessage:`All return statements must return the same concrete type for Impl(...).
159
159
  Impl(...) uses static dispatch and requires the same concrete type across all returns.
160
160
  Consider using Dyn(...) for dynamic dispatch if different concrete types are needed.`},{token:le.token,errorMessage:`First return has concrete type: ${O(le.concreteType)}`},{token:R.token,errorMessage:`Conflicting return has concrete type: ${O(Y)}`}])}else n.functionReturnImplConcreteType.push({concreteType:Y,env:t,token:R.token})}Gt(j,!0),t=j.$.env,R.$={env:t,type:j.$.type,value:j.$.value,pathCollection:j.$.pathCollection,variableName:j.$.variableName,controlFlow:da("return")},s=R;break}}else if(Q(R)&&Tn(R,B.break)){if(P!==o.length-1&&!(P===o.length-2&&Yf(o[o.length-1])))throw m({token:R.token,errorMessage:'The "break" keyword can only be used as the last expression.'});if(!n.isEvaluatingLoopBody)throw m({token:R.token,errorMessage:'The "break" keyword can only be used inside a loop.'});R.$={env:t,type:ke.type,value:ke,pathCollection:[],controlFlow:da("break")},s=R;break}else if(Q(R)&&Tn(R,B.continue)){if(P!==o.length-1&&!(P===o.length-2&&Yf(o[o.length-1])))throw m({token:R.token,errorMessage:'The "continue" keyword can only be used as the last expression.'});if(!n.isEvaluatingLoopBody)throw m({token:R.token,errorMessage:'The "continue" keyword can only be used inside a loop.'});R.$={env:t,type:ke.type,value:ke,pathCollection:[],controlFlow:da("continue")},s=R;break}else if(S(R)&&b(R,B.escape)){if(P!==o.length-1&&!(P===o.length-2&&Yf(o[o.length-1])))throw m({token:R.token,errorMessage:'The "escape" keyword can only be used as the last expression.'});if(!n.enclosingFunctionReturnType)throw m({token:R.token,errorMessage:'The "escape" keyword can only be used inside a function that has an enclosing function.'});l=R,it(R,B.escape,1);let te=R.args[0],j=U({expr:te,env:t,context:{...n,expectedType:{type:n.enclosingFunctionReturnType,env:t}}});if(!j.$)throw m({token:te.token,errorMessage:`Escape expression is not evaluated correctly:
161
161
  ${A(te)}`});if(R.args[0]=j,!H(n.enclosingFunctionReturnType)&&!Ce({type:n.enclosingFunctionReturnType,env:t},{type:j.$.type,env:t}))throw m({token:te.token,errorMessage:`Incompatible type for \`escape\` argument:
162
162
  - Expected (enclosing function return type): ${O(n.enclosingFunctionReturnType)}
163
163
  - Got: ${O(j.$.type)}`});Gt(j,!0),t=j.$.env,R.$={env:t,type:j.$.type,value:j.$.value,pathCollection:j.$.pathCollection,variableName:j.$.variableName,controlFlow:da("escape")},s=R;break}else{let te=U({expr:R,env:t,context:{...n,expectedType:P===o.length-1?a:void 0}});if((C=te.$)!=null&&C.env&&(t=(w=te.$)==null?void 0:w.env),P<o.length-1&&!u&&(((I=te.$)==null?void 0:I.value)===void 0||S(te)&&(b(te,"=")||b(te,":="))&&!te.$.isCompileTimeOnlyAssignment)&&(u=!0),an((L=te.$)==null?void 0:L.controlFlow)){s=te;break}}}if(!s.$)throw m({token:s.token,errorMessage:`Last expression in "begin" is not evaluated correctly:
164
- ${A(s)}`});let c=s.$.type;if(nn(s.$.controlFlow,"return")){if(((x=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:x.kind)==="function-body")try{Kt({type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t},{type:c,env:t})}catch{if(!Ce({type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t},{type:c,env:t}))throw m({token:s.token,errorMessage:`Return type mismatch. Expected type "${O(n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type)}", but got "${O(c)}".`})}else if(((V=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:V.kind)==="async-block"&&n.expectedType)try{Kt({type:n.expectedType.type,env:n.expectedType.env},{type:c,env:t})}catch{if(!Ce({type:n.expectedType.type,env:n.expectedType.env},{type:c,env:t}))throw m({token:s.token,errorMessage:`Return type mismatch. Expected type "${O(n.expectedType.type)}", but got "${O(c)}".`})}}if(l){let P=S(l)&&b(l,B.return,1)?l.args[0]:l;pa(P)}else pa(s);let f,_=s;S(s)&&b(s,B.return,1)&&(_=s.args[0]);let p=_?(M=_.$)==null?void 0:M.variableName:void 0;if(p){let P=ve(t,p);P.length&&(f=P[P.length-1])}let d,v=n.isEvaluatingFunctionBodyOrAsyncBlock,y=(f==null?void 0:f.isOwningTheRcValue)&&!f.consumedAtToken&&(v==null?void 0:v.kind)==="function-body"&&v.type.parameters.some(P=>P.label===f.name&&P.isOwningTheRcValue);f!=null&&f.isOwningTheRcValue&&(f.frameLevel===t.frames.length-1||y)&&!f.consumedAtToken?(mt(f.type)&&!(H(f.type)&&!f.type.resolvedConcreteType&&f.type.requiredTraits.length===0)&&(d=f),t=zt(t,f,{...f,consumedAtToken:s.token})):f&&_&&(cr(_,n),t=_.$.env);let h=Ks(t),g=[];if(Hf){if(i&&t.frames.length>=2){let ce={...t,frames:t.frames.slice(0,-1)},Te=Ks(ce);h=[...h,...Te]}if(S(e)){let ce=E0(e,t);ce.optimizedVarNames.size>0&&(t=ce.env,h=h.filter(Te=>!ce.optimizedVarNames.has(Te.name)))}let P=new Map,R=new Set,te=new Map,j=-1;if(S(e))for(let ce=0;ce<e.args.length;ce++){let Te=e.args[ce];j<0&&Hs(Te)&&(j=ce);let Ie=BE(Te);for(let[ge,be]of Ie.dupCalls){P.has(ge)||P.set(ge,[]);let De=P.get(ge);for(let ze of be)De.includes(ze)||(De.push(ze),te.set(ze,ce))}for(let ge of Ie.varsWithPartialBranchDups)R.add(ge)}let Y=new Set,le=new Map,Z=t.frames[t.frames.length-1];if(Z){for(let ce of Z.variables)if(ce.consumedAtToken&&ce.isOwningTheSameRcValueAs&&mt(ce.type)){let Te=ce;for(;Te.isOwningTheSameRcValueAs;)Te=Te.isOwningTheSameRcValueAs;le.set(Te.id,(le.get(Te.id)??0)+1)}}for(let ce of h){let Te=ce;for(;Te.isOwningTheSameRcValueAs;)Te=Te.isOwningTheSameRcValueAs;let Ie=Te.id,ge=P.get(Ie),be=!dn(Te.type)&&mt(Te.type),De=R.has(Ie),ze=!1;if(j>=0&&ge&&ge.length>0)for(let We of ge){if(We.__isEarlyReturnDup)continue;let fe=te.get(We);if(fe!==void 0&&fe>j){ze=!0;break}}if(ge&&ge.length>0&&!be&&!De&&!ze){let We=0,pe=[],fe=[];for(let Me of ge){let Ze=Me;Ze.__isEarlyReturnDup?pe.push(Me):Ze.__branchGroup?(We++,fe.push(Ze.__branchGroup)):(We++,pe.push(Me))}let $e=le.get(Ie)??0,Le=!1;if(Te!==ce&&Z){for(let Me of Z.variables)if(Me.id===Ie&&Me.consumedAtToken){Le=!0;break}}if($e>0||Le)g.push(ce);else if(We<=1){for(let Me of fe)for(let Ze of Me)Y.add(Ze);for(let Me of pe)Y.add(Me);ge.length=0,t=zt(t,ce,{...ce,consumedAtToken:s.token})}else g.push(ce)}else g.push(ce)}if(S(e))for(let ce of e.args)cm(ce,Y)}let T,E;if((Hf?g:h).length>0){let P=um({variablesToDrop:Hf?g:h,env:t,context:{...n,expectedType:void 0}});T=P.deferredDropExpressions,t=P.env}if(Hf&&d){let P=zt(t,d,{...d,consumedAtToken:void 0});try{E=um({variablesToDrop:[d],env:P,context:{...n,expectedType:void 0}}).deferredDropExpressions}catch{}}if(l&&!i&&(v==null?void 0:v.kind)==="function-body"){let P=[];for(let R of v.type.parameters)if(R.isOwningTheRcValue&&R.label){let te=ve(t,R.label),j=te[te.length-1];j&&!j.consumedAtToken&&j.isOwningTheRcValue&&mt(j.type)&&P.push(j)}if(P.length>0)try{let te=um({variablesToDrop:P,env:t,context:{...n,expectedType:void 0}}).deferredDropExpressions;te&&te.length>0&&(T=T?[...T,...te]:te)}catch{}}l&&l.$&&(l.$.deferredDropExpressions=T);let $=t.frames[t.frames.length-1];return t=Zt(t),e.$={env:t,type:s.$.type,value:u?void 0:s.$.value,pathCollection:[],controlFlow:s.$.controlFlow,deferredDropExpressions:T,consumedVariableDropExpressions:E,poppedEnvFrame:$,comptimeRef:s.$.comptimeRef},f&&((q=_==null?void 0:_.$)!=null&&q.deferredDupExpressions)&&_.$.deferredDupExpressions.length>0?Gt(e,!0,f):f!=null&&f.consumedAtToken?Gt(e,!0,f):Gt(e,!0),e}function Kf({beginExprs:e,env:t,context:n,allowPartialModule:r=!1,registerPartialModule:i}){var u,c,f,_,p,d,v,y;let o=Bf(t),a=[],s={tag:"Module",type:o,fields:[],isLoading:!0};i&&i(s);let l;t=vt(t);for(let h=0;h<e.length;h++){let g=e[h];try{if(S(g)&&b(g,B.export)){let T=g.args;for(let E=0;E<T.length;E++){let $=T[E];if(S($)&&b($,"...")){let k=$.args[0],C=$.args[1],w=U({expr:k,env:t,context:{...n}});if(!w.$)throw m({token:k.token,errorMessage:`Failed to evaluate the extended struct expression:
164
+ ${A(s)}`});let c=s.$.type;if(nn(s.$.controlFlow,"return")){if(((x=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:x.kind)==="function-body")try{Kt({type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t},{type:c,env:t})}catch{if(!Ce({type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t},{type:c,env:t}))throw m({token:s.token,errorMessage:`Return type mismatch. Expected type "${O(n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type)}", but got "${O(c)}".`})}else if(((V=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:V.kind)==="async-block"&&n.expectedType)try{Kt({type:n.expectedType.type,env:n.expectedType.env},{type:c,env:t})}catch{if(!Ce({type:n.expectedType.type,env:n.expectedType.env},{type:c,env:t}))throw m({token:s.token,errorMessage:`Return type mismatch. Expected type "${O(n.expectedType.type)}", but got "${O(c)}".`})}}if(l){let P=S(l)&&b(l,B.return,1)?l.args[0]:l;pa(P)}else pa(s);let f,_=s;S(s)&&b(s,B.return,1)&&(_=s.args[0]);let p=_?(M=_.$)==null?void 0:M.variableName:void 0;if(p){let P=ve(t,p);P.length&&(f=P[P.length-1])}let d,v=n.isEvaluatingFunctionBodyOrAsyncBlock,y=(f==null?void 0:f.isOwningTheRcValue)&&!f.consumedAtToken&&(v==null?void 0:v.kind)==="function-body"&&v.type.parameters.some(P=>P.label===f.name&&P.isOwningTheRcValue);f!=null&&f.isOwningTheRcValue&&(f.frameLevel===t.frames.length-1||y)&&!f.consumedAtToken?(mt(f.type)&&!(H(f.type)&&!f.type.resolvedConcreteType&&f.type.requiredTraits.length===0)&&(d=f),t=zt(t,f,{...f,consumedAtToken:s.token})):f&&_&&(cr(_,n),t=_.$.env);let h=Ks(t),g=[];if(Hf){if(i&&t.frames.length>=2){let ce={...t,frames:t.frames.slice(0,-1)},Te=Ks(ce);h=[...h,...Te]}if(S(e)){let ce=E0(e,t);ce.optimizedVarNames.size>0&&(t=ce.env,h=h.filter(Te=>!ce.optimizedVarNames.has(Te.name)))}let P=new Map,R=new Set,te=new Map,j=-1;if(S(e))for(let ce=0;ce<e.args.length;ce++){let Te=e.args[ce];j<0&&Hs(Te)&&(j=ce);let Se=BE(Te);for(let[ge,be]of Se.dupCalls){P.has(ge)||P.set(ge,[]);let De=P.get(ge);for(let ze of be)De.includes(ze)||(De.push(ze),te.set(ze,ce))}for(let ge of Se.varsWithPartialBranchDups)R.add(ge)}let Y=new Set,le=new Map,Z=t.frames[t.frames.length-1];if(Z){for(let ce of Z.variables)if(ce.consumedAtToken&&ce.isOwningTheSameRcValueAs&&mt(ce.type)){let Te=ce;for(;Te.isOwningTheSameRcValueAs;)Te=Te.isOwningTheSameRcValueAs;le.set(Te.id,(le.get(Te.id)??0)+1)}}for(let ce of h){let Te=ce;for(;Te.isOwningTheSameRcValueAs;)Te=Te.isOwningTheSameRcValueAs;let Se=Te.id,ge=P.get(Se),be=!dn(Te.type)&&mt(Te.type),De=R.has(Se),ze=!1;if(j>=0&&ge&&ge.length>0)for(let We of ge){if(We.__isEarlyReturnDup)continue;let fe=te.get(We);if(fe!==void 0&&fe>j){ze=!0;break}}if(ge&&ge.length>0&&!be&&!De&&!ze){let We=0,pe=[],fe=[];for(let Me of ge){let Ze=Me;Ze.__isEarlyReturnDup?pe.push(Me):Ze.__branchGroup?(We++,fe.push(Ze.__branchGroup)):(We++,pe.push(Me))}let $e=le.get(Se)??0,Le=!1;if(Te!==ce&&Z){for(let Me of Z.variables)if(Me.id===Se&&Me.consumedAtToken){Le=!0;break}}if($e>0||Le)g.push(ce);else if(We<=1){for(let Me of fe)for(let Ze of Me)Y.add(Ze);for(let Me of pe)Y.add(Me);ge.length=0,t=zt(t,ce,{...ce,consumedAtToken:s.token})}else g.push(ce)}else g.push(ce)}if(S(e))for(let ce of e.args)cm(ce,Y)}let T,E;if((Hf?g:h).length>0){let P=um({variablesToDrop:Hf?g:h,env:t,context:{...n,expectedType:void 0}});T=P.deferredDropExpressions,t=P.env}if(Hf&&d){let P=zt(t,d,{...d,consumedAtToken:void 0});try{E=um({variablesToDrop:[d],env:P,context:{...n,expectedType:void 0}}).deferredDropExpressions}catch{}}if(l&&!i&&(v==null?void 0:v.kind)==="function-body"){let P=[];for(let R of v.type.parameters)if(R.isOwningTheRcValue&&R.label){let te=ve(t,R.label),j=te[te.length-1];j&&!j.consumedAtToken&&j.isOwningTheRcValue&&mt(j.type)&&P.push(j)}if(P.length>0)try{let te=um({variablesToDrop:P,env:t,context:{...n,expectedType:void 0}}).deferredDropExpressions;te&&te.length>0&&(T=T?[...T,...te]:te)}catch{}}l&&l.$&&(l.$.deferredDropExpressions=T);let $=t.frames[t.frames.length-1];return t=Zt(t),e.$={env:t,type:s.$.type,value:u?void 0:s.$.value,pathCollection:[],controlFlow:s.$.controlFlow,deferredDropExpressions:T,consumedVariableDropExpressions:E,poppedEnvFrame:$,comptimeRef:s.$.comptimeRef},f&&((q=_==null?void 0:_.$)!=null&&q.deferredDupExpressions)&&_.$.deferredDupExpressions.length>0?Gt(e,!0,f):f!=null&&f.consumedAtToken?Gt(e,!0,f):Gt(e,!0),e}function Kf({beginExprs:e,env:t,context:n,allowPartialModule:r=!1,registerPartialModule:i}){var u,c,f,_,p,d,v,y;let o=Bf(t),a=[],s={tag:"Module",type:o,fields:[],isLoading:!0};i&&i(s);let l;t=vt(t);for(let h=0;h<e.length;h++){let g=e[h];try{if(S(g)&&b(g,B.export)){let T=g.args;for(let E=0;E<T.length;E++){let $=T[E];if(S($)&&b($,"...")){let k=$.args[0],C=$.args[1],w=U({expr:k,env:t,context:{...n}});if(!w.$)throw m({token:k.token,errorMessage:`Failed to evaluate the extended struct expression:
165
165
  ${A(k)}`});let I=w.$.type;if(!rt(I))throw m({token:k.token,errorMessage:`Expected struct type for export, got:
166
166
  ${O(I)}`});let L=w.$.value,x=new Set;if(C)if(S(C)&&b(C,":",2)&&Tn(C.args[0],"exclude")&&(C=C.args[1]),Q(C)){let V=C.token.value,M=I.fields.find(q=>q.label===V);if(!M)throw m({token:C.token,errorMessage:`Label "${V}" is not found in the extended module type.`});x.add(V),C.$={env:t,type:M.type,value:M.assignedValue,pathCollection:[]}}else if(S(C)&&b(C,B.tuple))for(let V of C.args){if(!Q(V))throw m({token:V.token,errorMessage:`Expected identifier for excluded label, got:
167
167
  ${A(V)}`});let M=V.token.value,q=I.fields.find(P=>P.label===M);if(!q)throw m({token:V.token,errorMessage:`Label "${M}" is not found in the extended module type.`});x.add(M),V.$={env:t,type:q.type,value:q.assignedValue,pathCollection:[]}}else throw m({token:C.token,errorMessage:`Expected identifier or tuple for excluded labels, got:
@@ -172,14 +172,14 @@ ${A(x)}`});if(k=x.token.value,!Q(V))throw m({token:V.token,errorMessage:`Expecte
172
172
  ${A(V)}`});if(!Wt(V))throw m({token:V.token,errorMessage:`Expected identifier for export, got:
173
173
  ${A(V)}`});C=V.token.value}let w=ve(t,C);if(w.length===0)throw m({token:$.token,errorMessage:`Variable "${C}" is not defined in the module.`});let I=w[w.length-1];if(o.fields.findIndex(x=>x.label===C)>=0)throw m({token:$.token,errorMessage:`Variable "${C}" is already exported in the module.`});if(!I.isCompileTimeOnly)throw m({token:$.token,errorMessage:`Variable "${C}" is not a compile-time variable and cannot be exported.`});o.fields.push({label:k,type:I.type,assignedValue:I.isCompileTimeOnly?(u=I.value)==null?void 0:u[0]:void 0,defaultValue:void 0,exprs:{expr:$,labelExpr:void 0,typeExpr:void 0,assignedValueExpr:void 0,defaultValueExpr:void 0}}),s.fields.push((c=I.value)==null?void 0:c[0]),$.$={env:t,type:I.type,value:(f=I.value)==null?void 0:f[0],pathCollection:[]}}}}else{let T=U({expr:g,env:t,context:{...n,expectedType:void 0}});if((_=T.$)!=null&&_.env&&(t=(p=T.$)==null?void 0:p.env),S(T)){if(b(T,":=",2)){let E=T.args[0];Q(E)&&((d=E.$)!=null&&d.type)&&!E.$.value&&a.push(T)}else if(b(T,"=",2)){let E=T.args[0],$;if(Q(E))$=E.token.value;else if(S(E)&&b(E,":",2)){let k=E.args[0];Q(k)&&($=k.token.value)}if($){let k=ve(t,$),C=k.length>0?k[k.length-1]:void 0;C!=null&&C.isModuleLevel&&a.push(T)}}}if(S(T)&&b(T,":",2)){let E=T.args[0];if(Q(E)&&((v=E.$)!=null&&v.env)){let $=E.token.value,k=ve(t,$),C=k.length>0?k[k.length-1]:void 0;if(C!=null&&C.isModuleLevel)throw m({token:E.token,errorMessage:`Uninitialized runtime variable "${$}" at module scope.
174
174
  Use \`${$} := value;\` or \`(${$} : ${((y=T.args[1])==null?void 0:y.token.value)??"Type"}) = value;\` instead.`})}}}}catch(T){if(r){l=T;break}else throw T}}try{l||(t=Zt(t))}catch(h){if(r)l=h;else throw h}return s.isLoading=!1,s.moduleLevelInitExprs=a.length>0?a:void 0,{moduleValue:s,moduleType:o,env:t,partialModuleError:l}}function Qf({functionType:e,specializedEnv:t,SelfType:n}){var h;let r=t.frames[t.frames.length-1],i=new Set(r.variables.map(g=>g.name)),o=vt(e.env,r),a=o,s=e.parametersFrame.variables.filter(g=>e.forallParameters.some(T=>T.label===g.name)&&!i.has(g.name));if(s.length>0){a=vt(o);for(let g of s){let{env:T}=je({env:a,variable:{...g},allowVariableShadowing:!0});a=T}}let l=e.parameters.map(g=>{var $;if(!g.exprs.typeExpr)return g;let T=Et(g.exprs.typeExpr),E=U({expr:T,env:a,context:{isEvaluatingGenericImplSpecialization:!0,stdPath:"",isEvaluatingFunctionType:!0,SelfType:n}});return X(($=E.$)==null?void 0:$.value)?{...g,type:E.$.value.value,exprs:{...g.exprs}}:g}),u=e.return.type,c=Et(e.return.typeExpr),f=U({expr:c,env:a,context:{isEvaluatingGenericImplSpecialization:!0,stdPath:"",isEvaluatingFunctionType:!0,SelfType:n}});X((h=f.$)==null?void 0:h.value)&&(u=f.$.value.value);let _=e.SelfType;n&&(_=n);let p=e.forallParameters.filter(g=>!i.has(g.label)),d={...e.parametersFrame,variables:e.parametersFrame.variables.map(g=>{let T=l.find($=>$.label===g.name),E=T?T.type:g.type;return E!==g.type?{...g,type:E}:g})},v=t,y=new Set;for(let g of t.frames)for(let T of g.variables)y.add(T.name);for(let g of e.env.frames)for(let T of g.variables)if(!y.has(T.name)){let{env:E}=je({env:v,variable:{...T},allowVariableShadowing:!0});v=E,y.add(T.name)}return{...e,env:v,forallParameters:p,parameters:l,parametersFrame:d,return:{...e.return,type:u},SelfType:_}}var Xs=new Map;function b0({traitExpr:e,traitType:t}){if(!e||!S(e))return{};let n=e.func;if(S(n)){let r=n.args.map(o=>Et(o)),i;if(t.functionValue&&_e(t.functionValue.type)){let o=t.functionValue.type;o.parameters.length>0?i=o.parameters.map(a=>a.label):o.forallParameters.length>0&&(i=o.forallParameters.map(a=>a.label))}if(i){for(let o of e.args)if(S(o)&&b(o,":",2)){let a=o.args[0],s=o.args[1];if(Q(a)){let l=a.token.value,u=t.fields.find(c=>c.label===l);u&&!_e(u.type)&&(r.push(Et(s)),i.push(l))}}}return{traitTypeArgExprs:r,traitFunctionParamNames:i}}if(!t.functionValue){let r=[],i=[];for(let o of e.args)if(S(o)&&b(o,":",2)){let a=o.args[0],s=o.args[1];if(Q(a)){let l=a.token.value,u=t.fields.find(c=>c.label===l);u&&!_e(u.type)&&(r.push(Et(s)),i.push(l))}}if(r.length>0)return{traitTypeArgExprs:r,traitFunctionParamNames:i}}return{}}function qE({fieldExprs:e,env:t,context:n,receiverType:r}){var u,c;let i=[],o=Ot(t),a=[],s=!1,l=r==null?void 0:r.trait;r!=null&&r.trait&&(r.trait={...r.trait,fields:[...r.trait.fields]}),t=vt(t);for(let f of e){if(S(f)&&b(f,B.begin))throw m({token:f.token,errorMessage:'impl receiverType, ... no longer accepts begin blocks. Use "impl { ... }" for anonymous modules.'});if(S(f)&&(b(f,"::",2)||b(f,":=",2)))throw m({token:f.token,errorMessage:'impl fields must use ":". "::" and ":=" are not allowed here.'});if(S(f)&&b(f,":",2)){let p=f.args[0],d=f.args[1];if(!Q(p)||!Wt(p))throw m({token:p.token,errorMessage:`Expected identifier for impl field name, got:
175
- ${A(p)}`});let v=p.token.value,y=U({expr:d,env:t,context:{...n,expectedType:void 0,SelfType:r}});if(!((u=y.$)!=null&&u.type))throw m({token:d.token,errorMessage:`Failed to evaluate impl field value for "${v}".`});t=y.$.env;let h=y.$.type,g=y.$.value;if(!g)throw m({token:d.token,errorMessage:`impl field "${v}" must be a compile-time value.`});Se(g)&&!g.funcName&&(g.funcName=v,g.funcId+=`_${v}`);let{env:T}=je({env:t,variable:{name:v,type:h,isCompileTimeOnly:!0,value:[g],token:p.token,initializedAtToken:p.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=T;let E=(c=n.docCommentLookup)==null?void 0:c.get(Rr(p.token));o.fields.push({label:v,type:h,assignedValue:g,defaultValue:void 0,exprs:{expr:f},docComment:E}),a.push(g),s=!0,r!=null&&r.trait&&r.trait.fields.push({label:v,type:h,assignedValue:g,defaultValue:void 0,exprs:{expr:f},docComment:E});continue}let _=U({expr:f,env:t,context:{...n,expectedType:void 0,ReceiverType:r}});if(!_.$||!on(_.$.value))throw m({token:f.token,errorMessage:`Expected trait value in impl field list, got:
175
+ ${A(p)}`});let v=p.token.value,y=U({expr:d,env:t,context:{...n,expectedType:void 0,SelfType:r}});if(!((u=y.$)!=null&&u.type))throw m({token:d.token,errorMessage:`Failed to evaluate impl field value for "${v}".`});t=y.$.env;let h=y.$.type,g=y.$.value;if(!g)throw m({token:d.token,errorMessage:`impl field "${v}" must be a compile-time value.`});Ie(g)&&!g.funcName&&(g.funcName=v,g.funcId+=`_${v}`);let{env:T}=je({env:t,variable:{name:v,type:h,isCompileTimeOnly:!0,value:[g],token:p.token,initializedAtToken:p.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=T;let E=(c=n.docCommentLookup)==null?void 0:c.get(Rr(p.token));o.fields.push({label:v,type:h,assignedValue:g,defaultValue:void 0,exprs:{expr:f},docComment:E}),a.push(g),s=!0,r!=null&&r.trait&&r.trait.fields.push({label:v,type:h,assignedValue:g,defaultValue:void 0,exprs:{expr:f},docComment:E});continue}let _=U({expr:f,env:t,context:{...n,expectedType:void 0,ReceiverType:r}});if(!_.$||!on(_.$.value))throw m({token:f.token,errorMessage:`Expected trait value in impl field list, got:
176
176
  ${A(f)}`});t=_.$.env,i.push({traitValue:_.$.value,sourceExpr:f,isAnonymousTrait:!1})}if(t=Zt(t),r&&(r.trait=l),s){let f=Ss({...o,receiverType:r},a);i.unshift({traitValue:f,sourceExpr:void 0,isAnonymousTrait:!0})}return{env:t,traitEntries:i}}var Oi=new Map,iu=0,Jf=new Map,Ha=new Map;function ou(e){for(let[t,n]of Oi.entries()){let r=n.filter(i=>i.sourceModulePath!==e);r.length===0?Oi.delete(t):Oi.set(t,r)}iu++,Jf.clear()}function C0(e){for(let[t,n]of Ha.entries()){let r=n.filter(i=>i.modulePath!==e);r.length===0?Ha.delete(t):Ha.set(t,r)}}function e_(){Xs.clear(),Oi.clear(),Ha.clear(),Jf.clear(),iu=0}function Zf(e){return e.functionValue?e.functionValue.funcId:e.typeName||e.id}function GE(e){if("functionValue"in e){let t=e.functionValue;if(t)return t.funcId}return e.id}function WE(e,t){if(!t.traitType.typeName){let r=t.traitType.fields.filter(i=>i.label&&_e(i.type)).map(i=>i.label);if(r.length>0){let i=GE(t.receiverTypePattern);if(i){for(let[o,a]of Oi.entries())for(let s of a)if(!(s.traitType.typeName||GE(s.receiverTypePattern)!==i)){for(let u of s.traitType.fields)if(u.label&&_e(u.type)&&r.includes(u.label))throw m({token:t.expr.token,errorMessage:`Method "${u.label}" is already defined for type "${O(t.receiverTypePattern)}".
177
177
  Cannot define duplicate method names across impl blocks. Use a different name (e.g., "comptime_${u.label}") for the comptime variant.`})}}}}let n=Oi.get(e);n||(n=[],Oi.set(e,n)),n.push(t),iu++}function k0({receiverType:e,traitType:t,currentModulePath:n,expr:r}){let i=e.id,a=(Ha.get(i)||[]).find(s=>s.traitTypeId===t.id);if(a)throw m({token:r.token,errorMessage:`Trait "${t.typeName??t.id}" is already implemented for type "${O(e)}".
178
178
  First implementation was in: ${a.modulePath||"unknown"}`})}function w0({receiverType:e,traitType:t,currentModulePath:n,expr:r}){let i=e.id,o=Ha.get(i);o||(o=[],Ha.set(i,o)),o.push({traitTypeId:t.id,traitTypeName:t.typeName,modulePath:n||"unknown",expr:r})}function F0({receiverType:e,traitType:t,currentModulePath:n,expr:r}){if(!n)return;let i=t.definedInModulePath===n,o=e.definedInModulePath===n,a=n.replace(/\\/g,"/");if(!(a.includes("prelude.yo")||a.includes("std/"))&&!i&&!o)throw m({token:r.token,errorMessage:`Orphan impl: Cannot implement foreign trait "${t.typeName??t.id}" for foreign type "${O(e)}".
179
179
  At least one of the trait or the type must be defined in this module.
180
180
  Trait defined in: ${t.definedInModulePath||"unknown"}
181
181
  Type defined in: ${e.definedInModulePath||"unknown"}
182
- Current module: ${n}`})}function t_({concreteType:e,traitType:t,env:n}){let r=Zf(t),i=Oi.get(r);if(!(!i||i.length===0)){for(let o of i)if(au({concreteType:e,impl:o,env:n}).matched)return o}}function ki({concreteType:e,methodName:t,env:n}){if(H(e)){let l=Xn(n,e);H(l)||(e=l)}if(!H(e)){let l=e.id+"\0"+t,u=Jf.get(l);if(u&&u.version===iu)return u.result}let r=[],i=[];for(let[l,u]of Oi.entries())for(let c of u){let f=au({concreteType:e,impl:c,env:n});if(!f.matched)continue;let _=c.traitType,p=c.traitValue,d=!_.typeName,v=_.fields.findIndex(y=>y.label===t&&_e(y.type));if(v>=0){let y=_.fields[v];if(_e(y.type)){let h=p.fields[v],g=xo(e),T=[...f.substitutions].some(([k,C])=>k!=="Self"&&H(C)),E=c.forallParameters.some(k=>k.kind==="type"&&!f.substitutions.has(k.name)),$=Se(h)&&(f.valueSubstitutions.size>0||f.substitutions.size>0)&&!g&&!T&&!E;if(E)continue;if($){let k=c.definitionEnv,C=vt(k);for(let[V,M]of f.substitutions){let{env:q}=je({env:C,variable:{name:V,type:en(),isCompileTimeOnly:!0,value:[xe(M)],token:Ue,initializedAtToken:Ue,consumedAtToken:void 0,isOwningTheRcValue:!1}});C=q}for(let[V,M]of f.valueSubstitutions){let{env:q}=je({env:C,variable:{name:V,type:M.type,isCompileTimeOnly:!0,value:[M],token:Ue,initializedAtToken:Ue,consumedAtToken:void 0,isOwningTheRcValue:!1}});C=q}if(c.traitTypeArgExprs&&c.traitFunctionParamNames&&c.traitTypeArgExprs.length===c.traitFunctionParamNames.length)for(let V=0;V<c.traitTypeArgExprs.length;V++){let M=c.traitTypeArgExprs[V],q=c.traitFunctionParamNames[V],P=U({expr:Et(M),env:C,context:{isEvaluatingGenericImplSpecialization:!0,stdPath:""}});if(P.$&&X(P.$.value)){let{env:R}=je({env:C,variable:{name:q,type:en(),isCompileTimeOnly:!0,value:[P.$.value],token:Ue,initializedAtToken:Ue,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});C=R}}let w=Qf({functionType:y.type,specializedEnv:C,SelfType:f.substitutions.get("Self")});C=vt(C,w.parametersFrame);let I=Et(h.body),L=En({expr:I,env:C,context:{isEvaluatingGenericImplSpecialization:!0,expectedType:{type:w.return.type,env:C},stdPath:"",isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:w,value:h,evaluationEnv:C},functionReturnImplConcreteType:[],SelfType:f.substitutions.get("Self")},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),x={...h,specializedType:w,body:L,funcId:`${h.funcId}_specialized_${[...f.substitutions.entries()].map(([V,M])=>`${V}_${O(M)}`).join("_")}_${[...f.valueSubstitutions.entries()].map(([V,M])=>`${V}_${bt(M)}`).join("_")}`,funcName:h.funcName?`${h.funcName}_specialized`:void 0};r.push({type:w,value:x}),i.push(d)}else if(g||T){let k=c.definitionEnv,C=vt(k);for(let[I,L]of f.substitutions){let{env:x}=je({env:C,variable:{name:I,type:en(),isCompileTimeOnly:!0,value:[xe(L)],token:Ue,initializedAtToken:Ue,consumedAtToken:void 0,isOwningTheRcValue:!1}});C=x}for(let[I,L]of f.valueSubstitutions){let{env:x}=je({env:C,variable:{name:I,type:L.type,isCompileTimeOnly:!0,value:[L],token:Ue,initializedAtToken:Ue,consumedAtToken:void 0,isOwningTheRcValue:!1}});C=x}let w=Qf({functionType:y.type,specializedEnv:C,SelfType:f.substitutions.get("Self")});r.push({type:w,value:void 0}),i.push(d)}else if(Se(h)){let k={...h,specializedType:y.type};r.push({type:y.type,value:k}),i.push(d)}else if(!Se(h)&&(f.substitutions.size>0||f.valueSubstitutions.size>0)){let k=c.definitionEnv,C=vt(k);for(let[I,L]of f.substitutions){let{env:x}=je({env:C,variable:{name:I,type:en(),isCompileTimeOnly:!0,value:[xe(L)],token:Ue,initializedAtToken:Ue,consumedAtToken:void 0,isOwningTheRcValue:!1}});C=x}for(let[I,L]of f.valueSubstitutions){let{env:x}=je({env:C,variable:{name:I,type:L.type,isCompileTimeOnly:!0,value:[L],token:Ue,initializedAtToken:Ue,consumedAtToken:void 0,isOwningTheRcValue:!1}});C=x}let w=Qf({functionType:y.type,specializedEnv:C,SelfType:f.substitutions.get("Self")});r.push({type:w,value:h}),i.push(d)}else r.push({type:y.type,value:h}),i.push(d)}}}let o=i.some(l=>l),a=i.some(l=>!l),s=r;if(o&&a&&(s=r.filter((l,u)=>i[u])),!H(e)){let l=e.id+"\0"+t;Jf.set(l,{result:s,version:iu})}return s}function jE({concreteType:e,env:t}){if(H(e)){let i=Xn(t,e);H(i)||(e=i)}let n=[],r=new Set;for(let[i,o]of Oi.entries())for(let a of o){let s;try{s=au({concreteType:e,impl:a,env:t})}catch{continue}if(s.matched)for(let l of a.traitType.fields)l.label&&_e(l.type)&&!r.has(l.label)&&(r.add(l.label),n.push({name:l.label,type:l.type}))}return n}function n_({concreteType:e,propertyName:t,env:n}){if(H(e)){let r=Xn(n,e);H(r)||(e=r)}for(let[r,i]of Oi.entries())for(let o of i){let a;try{a=au({concreteType:e,impl:o,env:n})}catch{continue}if(!a.matched)continue;let s=o.traitType,l=s.fields.findIndex(f=>f.label===t&&!_e(f.type));if(l<0)continue;if(o.traitTypeArgExprs&&o.traitFunctionParamNames&&o.traitTypeArgExprs.length===o.traitFunctionParamNames.length){let f=o.definitionEnv,_=vt(f);for(let[p,d]of a.substitutions){let{env:v}=je({env:_,variable:{name:p,type:en(),isCompileTimeOnly:!0,value:[xe(d)],token:Ue,initializedAtToken:Ue,consumedAtToken:void 0,isOwningTheRcValue:!1}});_=v}for(let p=0;p<o.traitTypeArgExprs.length;p++){let d=o.traitTypeArgExprs[p];if(o.traitFunctionParamNames[p]===t)try{let y=Et(d),h=U({expr:y,env:_,context:{stdPath:"",isEvaluatingGenericImplSpecialization:!0}});if(h.$&&X(h.$.value))return{type:h.$.value.type,value:h.$.value}}catch{}}}let u=s.fields[l],c=o.traitValue.fields[l]??u.assignedValue;if(!(!c||!X(c))){if(!H(c.value))return{type:c.type,value:c};for(let f of o.forallParameters)if(f.kind==="type"&&f.someType===c.value){let _=a.substitutions.get(f.name);if(_){let p=xe(_);return{type:p.type,value:p}}}}}}function HE({concreteType:e,traitType:t,methodName:n,env:r}){let i=Zf(t),o=Oi.get(i);if(!(!o||o.length===0))for(let a of o){let s=au({concreteType:e,impl:a,env:r});if(!s.matched)continue;let l=a.traitType,u=a.traitValue,c=l.fields.findIndex(f=>f.label===n&&_e(f.type));if(c>=0){let f=l.fields[c];if(_e(f.type)){let _=u.fields[c];if(Se(_)&&(s.valueSubstitutions.size>0||s.substitutions.size>0)){let p=a.definitionEnv,d=vt(p);for(let[T,E]of s.substitutions){let{env:$}=je({env:d,variable:{name:T,type:en(),isCompileTimeOnly:!0,value:[xe(E)],token:Ue,initializedAtToken:Ue,consumedAtToken:void 0,isOwningTheRcValue:!1}});d=$}for(let[T,E]of s.valueSubstitutions){let{env:$}=je({env:d,variable:{name:T,type:E.type,isCompileTimeOnly:!0,value:[E],token:Ue,initializedAtToken:Ue,consumedAtToken:void 0,isOwningTheRcValue:!1}});d=$}let v=Qf({functionType:f.type,specializedEnv:d,SelfType:s.substitutions.get("Self")});d=vt(d,v.parametersFrame);let y=Et(_.body),h=En({expr:y,env:d,context:{isEvaluatingGenericImplSpecialization:!0,expectedType:{type:v.return.type,env:d},stdPath:"",isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:v,value:_,evaluationEnv:d},functionReturnImplConcreteType:[],SelfType:s.substitutions.get("Self")},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),g={..._,specializedType:v,body:h,funcId:`${_.funcId}_specialized_${[...s.substitutions.entries()].map(([T,E])=>`${T}_${O(E)}`).join("_")}_${[...s.valueSubstitutions.entries()].map(([T,E])=>`${T}_${bt(E)}`).join("_")}`,funcName:_.funcName?`${_.funcName}_specialized`:void 0};return{type:v,value:g}}else if(Se(_)){let p={..._,specializedType:f.type};return{type:f.type,value:p}}else return{type:f.type,value:_}}}}}function au({concreteType:e,impl:t,env:n}){let r={matched:!1,substitutions:new Map,valueSubstitutions:new Map};if(H(e)){let o=Xn(n,e);if(H(o))return r;e=o}let i=vt(n);for(let o of t.forallParameters)if(o.kind==="type"){let{env:a}=je({env:i,variable:{name:o.name,type:en(),isCompileTimeOnly:!0,value:[xe(o.someType)],token:Ue,initializedAtToken:Ue,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});i=a}else{let{env:a}=je({env:i,variable:{name:o.name,type:o.type,isCompileTimeOnly:!0,value:[o.unknownValue],token:Ue,initializedAtToken:Ue,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});i=a}try{let{expectedEnv:o}=Kt({type:t.receiverTypePattern,env:i},{type:e,env:n});if(Oe(e))for(let l of t.forallParameters){if(l.kind!=="type")continue;let u=Xf(o,l.someType);if(H(u)){let c=Xf(e.env,l.someType);if(!H(c))for(let f=o.frames.length-1;f>=0;f--){let _=o.frames[f],p=_.variables.findIndex(d=>d.name===l.name);if(p>=0){let d=o.frames.slice(),v=_.variables.slice();v[p]={...v[p],value:[xe(c)]},d[f]={..._,variables:v},o={...o,frames:d};break}}}}for(let{someType:l,traitType:u,traitExpr:c}of t.whereConstraints){let f=Xf(o,l);if(!f)return r;let _=u;if(c)try{let p=Et(c),d=U({expr:p,env:o,context:{stdPath:"",isEvaluatingGenericImplSpecialization:!0}});d.$&&X(d.$.value)&&_t(d.$.value.value)&&(_=d.$.value.value)}catch{}if(_.isNegatedConstraint){if(H(f)){if(!I0(f,_,n))return r;continue}if(zn({targetType:f,traitType:_,env:n}))return r;continue}if(H(f)){if(!L0(f,_,n))return r;continue}if(!zn({targetType:f,traitType:_,env:o}))return r}let a=new Map,s=new Map;for(let l of t.forallParameters)if(l.kind==="type"){let u=Xf(o,l.someType);u&&(!H(u)||u!==l.someType)&&a.set(l.name,u)}else{let u=ve(o,l.name),c=u[u.length-1];if(c&&c.value&&!Ge(c.value[0])){let f={...c.value[0],type:l.type};s.set(l.name,f)}}return a.set("Self",e),{matched:!0,substitutions:a,valueSubstitutions:s}}catch{return r}}function L0(e,t,n){if(!t.typeName)return!1;for(let o of e.requiredTraits)if(o.traitType.id===t.id)return!0;let i=ai(n,e);if(i){for(let o of i.requiredTraits)if(o.id===t.id)return!0}for(let o of e.trait.fields)if(on(o.assignedValue)&&o.assignedValue.type.id===t.id)return!0;return!1}function I0(e,t,n){if(!t.typeName)return!1;if(e.negativeTraits){for(let o of e.negativeTraits)if(o.traitType.id===t.id)return!0}let i=ai(n,e);if(i){for(let o of i.negativeTraits)if(o.id===t.id)return!0}return!1}function S0({receiverTypePattern:e,traitType:t,whereConstraints:n,env:r,errorToken:i}){if(t.selfConstraints&&t.selfConstraints.length>0)for(let o of t.selfConstraints){if(zn({targetType:e,traitType:o,env:r}))continue;let a=new Set;for(let s of n)s.traitType.typeName===o.typeName&&!s.traitType.isNegatedConstraint&&a.add(s.someType.name);throw m({token:i,errorMessage:`Generic impl receiver type "${O(e)}" does not satisfy constraint "${o.typeName??O(o)}" required by trait "${t.typeName??O(t)}".
182
+ Current module: ${n}`})}function t_({concreteType:e,traitType:t,env:n}){let r=Zf(t),i=Oi.get(r);if(!(!i||i.length===0)){for(let o of i)if(au({concreteType:e,impl:o,env:n}).matched)return o}}function ki({concreteType:e,methodName:t,env:n}){if(H(e)){let l=Xn(n,e);H(l)||(e=l)}if(!H(e)){let l=e.id+"\0"+t,u=Jf.get(l);if(u&&u.version===iu)return u.result}let r=[],i=[];for(let[l,u]of Oi.entries())for(let c of u){let f=au({concreteType:e,impl:c,env:n});if(!f.matched)continue;let _=c.traitType,p=c.traitValue,d=!_.typeName,v=_.fields.findIndex(y=>y.label===t&&_e(y.type));if(v>=0){let y=_.fields[v];if(_e(y.type)){let h=p.fields[v],g=xo(e),T=[...f.substitutions].some(([k,C])=>k!=="Self"&&H(C)),E=c.forallParameters.some(k=>k.kind==="type"&&!f.substitutions.has(k.name)),$=Ie(h)&&(f.valueSubstitutions.size>0||f.substitutions.size>0)&&!g&&!T&&!E;if(E)continue;if($){let k=c.definitionEnv,C=vt(k);for(let[V,M]of f.substitutions){let{env:q}=je({env:C,variable:{name:V,type:en(),isCompileTimeOnly:!0,value:[xe(M)],token:Ue,initializedAtToken:Ue,consumedAtToken:void 0,isOwningTheRcValue:!1}});C=q}for(let[V,M]of f.valueSubstitutions){let{env:q}=je({env:C,variable:{name:V,type:M.type,isCompileTimeOnly:!0,value:[M],token:Ue,initializedAtToken:Ue,consumedAtToken:void 0,isOwningTheRcValue:!1}});C=q}if(c.traitTypeArgExprs&&c.traitFunctionParamNames&&c.traitTypeArgExprs.length===c.traitFunctionParamNames.length)for(let V=0;V<c.traitTypeArgExprs.length;V++){let M=c.traitTypeArgExprs[V],q=c.traitFunctionParamNames[V],P=U({expr:Et(M),env:C,context:{isEvaluatingGenericImplSpecialization:!0,stdPath:""}});if(P.$&&X(P.$.value)){let{env:R}=je({env:C,variable:{name:q,type:en(),isCompileTimeOnly:!0,value:[P.$.value],token:Ue,initializedAtToken:Ue,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});C=R}}let w=Qf({functionType:y.type,specializedEnv:C,SelfType:f.substitutions.get("Self")});C=vt(C,w.parametersFrame);let I=Et(h.body),L=En({expr:I,env:C,context:{isEvaluatingGenericImplSpecialization:!0,expectedType:{type:w.return.type,env:C},stdPath:"",isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:w,value:h,evaluationEnv:C},functionReturnImplConcreteType:[],SelfType:f.substitutions.get("Self")},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),x={...h,specializedType:w,body:L,funcId:`${h.funcId}_specialized_${[...f.substitutions.entries()].map(([V,M])=>`${V}_${O(M)}`).join("_")}_${[...f.valueSubstitutions.entries()].map(([V,M])=>`${V}_${bt(M)}`).join("_")}`,funcName:h.funcName?`${h.funcName}_specialized`:void 0};r.push({type:w,value:x}),i.push(d)}else if(g||T){let k=c.definitionEnv,C=vt(k);for(let[I,L]of f.substitutions){let{env:x}=je({env:C,variable:{name:I,type:en(),isCompileTimeOnly:!0,value:[xe(L)],token:Ue,initializedAtToken:Ue,consumedAtToken:void 0,isOwningTheRcValue:!1}});C=x}for(let[I,L]of f.valueSubstitutions){let{env:x}=je({env:C,variable:{name:I,type:L.type,isCompileTimeOnly:!0,value:[L],token:Ue,initializedAtToken:Ue,consumedAtToken:void 0,isOwningTheRcValue:!1}});C=x}let w=Qf({functionType:y.type,specializedEnv:C,SelfType:f.substitutions.get("Self")});r.push({type:w,value:void 0}),i.push(d)}else if(Ie(h)){let k={...h,specializedType:y.type};r.push({type:y.type,value:k}),i.push(d)}else if(!Ie(h)&&(f.substitutions.size>0||f.valueSubstitutions.size>0)){let k=c.definitionEnv,C=vt(k);for(let[I,L]of f.substitutions){let{env:x}=je({env:C,variable:{name:I,type:en(),isCompileTimeOnly:!0,value:[xe(L)],token:Ue,initializedAtToken:Ue,consumedAtToken:void 0,isOwningTheRcValue:!1}});C=x}for(let[I,L]of f.valueSubstitutions){let{env:x}=je({env:C,variable:{name:I,type:L.type,isCompileTimeOnly:!0,value:[L],token:Ue,initializedAtToken:Ue,consumedAtToken:void 0,isOwningTheRcValue:!1}});C=x}let w=Qf({functionType:y.type,specializedEnv:C,SelfType:f.substitutions.get("Self")});r.push({type:w,value:h}),i.push(d)}else r.push({type:y.type,value:h}),i.push(d)}}}let o=i.some(l=>l),a=i.some(l=>!l),s=r;if(o&&a&&(s=r.filter((l,u)=>i[u])),!H(e)){let l=e.id+"\0"+t;Jf.set(l,{result:s,version:iu})}return s}function jE({concreteType:e,env:t}){if(H(e)){let i=Xn(t,e);H(i)||(e=i)}let n=[],r=new Set;for(let[i,o]of Oi.entries())for(let a of o){let s;try{s=au({concreteType:e,impl:a,env:t})}catch{continue}if(s.matched)for(let l of a.traitType.fields)l.label&&_e(l.type)&&!r.has(l.label)&&(r.add(l.label),n.push({name:l.label,type:l.type}))}return n}function n_({concreteType:e,propertyName:t,env:n}){if(H(e)){let r=Xn(n,e);H(r)||(e=r)}for(let[r,i]of Oi.entries())for(let o of i){let a;try{a=au({concreteType:e,impl:o,env:n})}catch{continue}if(!a.matched)continue;let s=o.traitType,l=s.fields.findIndex(f=>f.label===t&&!_e(f.type));if(l<0)continue;if(o.traitTypeArgExprs&&o.traitFunctionParamNames&&o.traitTypeArgExprs.length===o.traitFunctionParamNames.length){let f=o.definitionEnv,_=vt(f);for(let[p,d]of a.substitutions){let{env:v}=je({env:_,variable:{name:p,type:en(),isCompileTimeOnly:!0,value:[xe(d)],token:Ue,initializedAtToken:Ue,consumedAtToken:void 0,isOwningTheRcValue:!1}});_=v}for(let p=0;p<o.traitTypeArgExprs.length;p++){let d=o.traitTypeArgExprs[p];if(o.traitFunctionParamNames[p]===t)try{let y=Et(d),h=U({expr:y,env:_,context:{stdPath:"",isEvaluatingGenericImplSpecialization:!0}});if(h.$&&X(h.$.value))return{type:h.$.value.type,value:h.$.value}}catch{}}}let u=s.fields[l],c=o.traitValue.fields[l]??u.assignedValue;if(!(!c||!X(c))){if(!H(c.value))return{type:c.type,value:c};for(let f of o.forallParameters)if(f.kind==="type"&&f.someType===c.value){let _=a.substitutions.get(f.name);if(_){let p=xe(_);return{type:p.type,value:p}}}}}}function HE({concreteType:e,traitType:t,methodName:n,env:r}){let i=Zf(t),o=Oi.get(i);if(!(!o||o.length===0))for(let a of o){let s=au({concreteType:e,impl:a,env:r});if(!s.matched)continue;let l=a.traitType,u=a.traitValue,c=l.fields.findIndex(f=>f.label===n&&_e(f.type));if(c>=0){let f=l.fields[c];if(_e(f.type)){let _=u.fields[c];if(Ie(_)&&(s.valueSubstitutions.size>0||s.substitutions.size>0)){let p=a.definitionEnv,d=vt(p);for(let[T,E]of s.substitutions){let{env:$}=je({env:d,variable:{name:T,type:en(),isCompileTimeOnly:!0,value:[xe(E)],token:Ue,initializedAtToken:Ue,consumedAtToken:void 0,isOwningTheRcValue:!1}});d=$}for(let[T,E]of s.valueSubstitutions){let{env:$}=je({env:d,variable:{name:T,type:E.type,isCompileTimeOnly:!0,value:[E],token:Ue,initializedAtToken:Ue,consumedAtToken:void 0,isOwningTheRcValue:!1}});d=$}let v=Qf({functionType:f.type,specializedEnv:d,SelfType:s.substitutions.get("Self")});d=vt(d,v.parametersFrame);let y=Et(_.body),h=En({expr:y,env:d,context:{isEvaluatingGenericImplSpecialization:!0,expectedType:{type:v.return.type,env:d},stdPath:"",isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:v,value:_,evaluationEnv:d},functionReturnImplConcreteType:[],SelfType:s.substitutions.get("Self")},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),g={..._,specializedType:v,body:h,funcId:`${_.funcId}_specialized_${[...s.substitutions.entries()].map(([T,E])=>`${T}_${O(E)}`).join("_")}_${[...s.valueSubstitutions.entries()].map(([T,E])=>`${T}_${bt(E)}`).join("_")}`,funcName:_.funcName?`${_.funcName}_specialized`:void 0};return{type:v,value:g}}else if(Ie(_)){let p={..._,specializedType:f.type};return{type:f.type,value:p}}else return{type:f.type,value:_}}}}}function au({concreteType:e,impl:t,env:n}){let r={matched:!1,substitutions:new Map,valueSubstitutions:new Map};if(H(e)){let o=Xn(n,e);if(H(o))return r;e=o}let i=vt(n);for(let o of t.forallParameters)if(o.kind==="type"){let{env:a}=je({env:i,variable:{name:o.name,type:en(),isCompileTimeOnly:!0,value:[xe(o.someType)],token:Ue,initializedAtToken:Ue,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});i=a}else{let{env:a}=je({env:i,variable:{name:o.name,type:o.type,isCompileTimeOnly:!0,value:[o.unknownValue],token:Ue,initializedAtToken:Ue,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});i=a}try{let{expectedEnv:o}=Kt({type:t.receiverTypePattern,env:i},{type:e,env:n});if(Oe(e))for(let l of t.forallParameters){if(l.kind!=="type")continue;let u=Xf(o,l.someType);if(H(u)){let c=Xf(e.env,l.someType);if(!H(c))for(let f=o.frames.length-1;f>=0;f--){let _=o.frames[f],p=_.variables.findIndex(d=>d.name===l.name);if(p>=0){let d=o.frames.slice(),v=_.variables.slice();v[p]={...v[p],value:[xe(c)]},d[f]={..._,variables:v},o={...o,frames:d};break}}}}for(let{someType:l,traitType:u,traitExpr:c}of t.whereConstraints){let f=Xf(o,l);if(!f)return r;let _=u;if(c)try{let p=Et(c),d=U({expr:p,env:o,context:{stdPath:"",isEvaluatingGenericImplSpecialization:!0}});d.$&&X(d.$.value)&&_t(d.$.value.value)&&(_=d.$.value.value)}catch{}if(_.isNegatedConstraint){if(H(f)){if(!I0(f,_,n))return r;continue}if(zn({targetType:f,traitType:_,env:n}))return r;continue}if(H(f)){if(!L0(f,_,n))return r;continue}if(!zn({targetType:f,traitType:_,env:o}))return r}let a=new Map,s=new Map;for(let l of t.forallParameters)if(l.kind==="type"){let u=Xf(o,l.someType);u&&(!H(u)||u!==l.someType)&&a.set(l.name,u)}else{let u=ve(o,l.name),c=u[u.length-1];if(c&&c.value&&!Ge(c.value[0])){let f={...c.value[0],type:l.type};s.set(l.name,f)}}return a.set("Self",e),{matched:!0,substitutions:a,valueSubstitutions:s}}catch{return r}}function L0(e,t,n){if(!t.typeName)return!1;for(let o of e.requiredTraits)if(o.traitType.id===t.id)return!0;let i=ai(n,e);if(i){for(let o of i.requiredTraits)if(o.id===t.id)return!0}for(let o of e.trait.fields)if(on(o.assignedValue)&&o.assignedValue.type.id===t.id)return!0;return!1}function I0(e,t,n){if(!t.typeName)return!1;if(e.negativeTraits){for(let o of e.negativeTraits)if(o.traitType.id===t.id)return!0}let i=ai(n,e);if(i){for(let o of i.negativeTraits)if(o.id===t.id)return!0}return!1}function S0({receiverTypePattern:e,traitType:t,whereConstraints:n,env:r,errorToken:i}){if(t.selfConstraints&&t.selfConstraints.length>0)for(let o of t.selfConstraints){if(zn({targetType:e,traitType:o,env:r}))continue;let a=new Set;for(let s of n)s.traitType.typeName===o.typeName&&!s.traitType.isNegatedConstraint&&a.add(s.someType.name);throw m({token:i,errorMessage:`Generic impl receiver type "${O(e)}" does not satisfy constraint "${o.typeName??O(o)}" required by trait "${t.typeName??O(t)}".
183
183
  Consider adding "where(T <: ${o.typeName??O(o)})" to the impl.`})}if(t.negativeSelfConstraints&&t.negativeSelfConstraints.length>0){for(let o of t.negativeSelfConstraints)if(zn({targetType:e,traitType:o,env:r}))throw m({token:i,errorMessage:`Generic impl receiver type "${O(e)}" implements "${o.typeName??O(o)}" but trait "${t.typeName??O(t)}" requires it to NOT implement this trait.
184
184
  Consider adding "where(T <: !(${o.typeName??O(o)}))" to the impl.`})}}function Xf(e,t){for(let n=e.frames.length-1;n>=0;n--){let r=e.frames[n];for(let i of r.variables)if(i.name===t.name&&i.value&&X(i.value[0]))return i.value[0].value}return t}function su(e){let t=Xs.get(e);if(t){for(let n of t)n.fields=n.fields.filter(r=>r.sourceModulePath!==e);Xs.delete(e),C0(e)}}function YE(){let e=new Map;for(let t of Xs.values())for(let n of t)e.has(n)||e.set(n,[...n.fields]);return e}function A0(e,t){let n=Xs.get(e);n||(n=new Set,Xs.set(e,n)),n.add(t)}function x0(e,t,n){let r=e.type.receiverType;if(!(!r||!r.trait))if(e.type.typeName&&(F0({receiverType:r,traitType:e.type,currentModulePath:n,expr:t}),k0({receiverType:r,traitType:e.type,currentModulePath:n,expr:t}),w0({receiverType:r,traitType:e.type,currentModulePath:n,expr:t})),n&&A0(n,r.trait),e.type.typeName){let i={label:"",type:Br(1),assignedValue:e,sourceModulePath:n,exprs:{expr:t}};r.trait.fields.push(i)}else for(let i=0;i<e.type.fields.length;i++){let o=e.type.fields[i],a=e.fields[i];if(o.label&&_e(o.type)&&r.trait.fields.find(u=>u.label===o.label&&_e(u.type)))throw m({token:t.token,errorMessage:`Method "${o.label}" is already defined for type "${O(r)}".
185
185
  Cannot define duplicate method names across impl blocks. Use a different name (e.g., "comptime_${o.label}") for the comptime variant.`});let s={label:o.label,type:o.type,assignedValue:a,sourceModulePath:n,docComment:o.docComment,exprs:{expr:t}};r.trait.fields.push(s)}}function KE({expr:e,env:t,context:n}){var E,$;if(!b(e,B.impl))throw m({token:e.token,errorMessage:`Expected "impl", got:
@@ -190,7 +190,7 @@ This typically happens when a struct/enum/array/tuple contains fields with confl
190
190
  - Runtime only fields (e.g., *(T), [T], void, C-compatible types)
191
191
 
192
192
  Consider restructuring the type to avoid mixing incompatible field types.`})}function Lr(e,t=!0,n){switch(e.tag){case"ComptimeInt":case"ComptimeFloat":case"U8":case"I8":case"U16":case"I16":case"U32":case"I32":case"U64":case"I64":case"F32":case"F64":case"Usize":case"Isize":return e;case"Bool":return e;case"Unit":return e;case"ComptimeString":return e;case"Type":return e;case"Function":return e;case"Expr":return e;case"Unknown":return e;case"Ptr":{if(t)return e;let r=e;if(n){let a=n.get(r.targetValue);if(a)return{...r,targetValue:a,targetIndex:r.targetIndex}}let o=[Lr(r.targetValue[0],t,n)];return n&&n.set(r.targetValue,o),{...r,targetValue:o,targetIndex:r.targetIndex}}case"Tuple":{let r=e;return{...r,fields:r.fields.map(i=>Lr(i,t,n))}}case"Struct":{let r=e;return{...r,fields:r.fields.map(i=>Lr(i,t,n))}}case"Enum":{let r=e;return{...r,fields:r.fields.map(i=>Lr(i,t,n))}}case"Array":{let r=e;return{...r,elements:r.elements.map(i=>Lr(i,t,n))}}case"Slice":{if(t)return e;let r=e;if(n){let a=n.get(r.sourceArray);if(a)return{...r,sourceArray:a}}let o=[Lr(r.sourceArray[0],t,n)];return n&&n.set(r.sourceArray,o),{...r,sourceArray:o}}case"ComptimeList":{let r=e;return{...r,elements:r.elements.map(i=>Lr(i,t,n))}}case"Module":{let r=e;return{...r,fields:r.fields.map(i=>i?Lr(i,t,n):void 0)}}case"Trait":{let r=e;return{...r,fields:r.fields.map(i=>i?Lr(i,t,n):void 0)}}default:return e}}function mm({modulePath:e,inputString:t}){return{functionDeclarationFrameLevel:-1,frames:[],modulePath:e,inputString:t}}function cn(){let e=mm({modulePath:"",inputString:""});return vt(e)}function ym(e){let t=new Map,n=[...e.frames.flatMap(o=>o.variables)];for(let o of n)if(o.value&&!t.has(o.value)){let a=Lr(o.value[0],!1,t);t.has(o.value)||t.set(o.value,[a])}let r=o=>{if(!o.value)return{...o};let a=t.get(o.value);if(a)return{...o,value:a};let s=Lr(o.value[0],!1,t);return{...o,value:[s]}},i=o=>({...o,variables:o.variables.map(r),whereClauseConstraints:N0(o.whereClauseConstraints)});return{...e,frames:e.frames.map(i)}}function N0(e){let t=new Map;for(let[n,r]of e)t.set(n,{someType:r.someType,requiredTraits:[...r.requiredTraits],negativeTraits:[...r.negativeTraits]});return t}function to({env:e,someType:t,traitType:n,isNegated:r}){let i=e.frames.length-1,o=e.frames[i];if(!o)return e;let a=t.id,s=o.whereClauseConstraints.get(a);s||(s={someType:t,requiredTraits:[],negativeTraits:[]},o.whereClauseConstraints.set(a,s));let l=r?s.negativeTraits:s.requiredTraits;return l.some(u=>u.id===n.id)||l.push(n),e}function ai(e,t){var l;let n=[],r=[],i=new Set,o=new Set,a=!1,s=new Set;for(let u of e.frames)for(let c of u.variables){let f=(l=c.value)==null?void 0:l[0];X(f)&&H(f.value)&&f.value.id===t.id&&s.add(c.name)}for(let u of e.frames)for(let c of u.whereClauseConstraints.values())if(!(c.someType.id!==t.id&&!s.has(c.someType.name))){a=!0;for(let f of c.requiredTraits)i.has(f.id)||(i.add(f.id),n.push(f));for(let f of c.negativeTraits)o.has(f.id)||(o.add(f.id),r.push(f))}if(a)return{requiredTraits:n,negativeTraits:r}}function t$(e){return`typeapp:${e.constructor.id}:${e.args.map(t=>t.id).join(",")}`}function n$({env:e,typeApp:t,traitType:n,isNegated:r}){let i=e.frames.length-1,o=e.frames[i];if(!o)return e;let a=t$(t),s=o.whereClauseConstraints.get(a);s||(s={someType:t.constructor,requiredTraits:[],negativeTraits:[]},o.whereClauseConstraints.set(a,s));let l=r?s.negativeTraits:s.requiredTraits;return l.some(u=>u.id===n.id)||l.push(n),e}function D0(e,t){let n=t$(t),r=[],i=[],o=new Set,a=new Set,s=!1;for(let l of e.frames){let u=l.whereClauseConstraints.get(n);if(u){s=!0;for(let c of u.requiredTraits)o.has(c.id)||(o.add(c.id),r.push(c));for(let c of u.negativeTraits)a.has(c.id)||(a.add(c.id),i.push(c))}}if(s)return{requiredTraits:r,negativeTraits:i}}var r$=null;function i$(e){r$=e}function gm(){r$=null}var V0="__yo_self";function je({env:e,variable:t,deltaFrame:n,variableId:r,addToBeginBlockFrame:i,allowVariableShadowing:o}){let a=e.frames.length-1+(n??0),s=un(e.modulePath,t.name);if(i){let d=P0(e);d>=0&&(a=d)}if(t.name!==V0&&!s){let d=ve(e,t.name);if(d.length>0&&!o){let v=d[d.length-1];throw _n([{token:t.token,errorMessage:`Failed to define variable "${t.name}":`},{token:v.token,errorMessage:`Variable "${t.name}" is already defined here (variable shadowing is not allowed):`}])}}let l=e.frames[a];if(!l)throw console.trace(`Frame at level ${a} does not exist in the environment.`),new Error(`Frame at level ${a} does not exist in the environment.`);let u=s?t.name:r??kn(e.modulePath,t.name),c={...t,frameLevel:a,id:u},f=s?R0(l,c):M0({frame:l,variable:c}),_=e.frames.slice();return _[a]=f,{env:{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,frames:_,modulePath:e.modulePath,inputString:e.inputString},variable:c}}function M0({frame:e,variable:t}){if(t.name==="_")return e;if(e.variables.some(r=>r.name===t.name))throw _n([{token:t.token,errorMessage:`Failed to define variable "${t.name}":`},{token:e.variables.find(r=>r.name===t.name).token,errorMessage:`Variable "${t.name}" is already defined here in the same scope:`}]);let n=e.variables.findIndex(r=>r.name===t.name&&!r.initializedAtToken);if(n>-1){let r=e.variables.slice();return r[n]=t,{id:e.id,variables:r,isBeginBlockFrame:e.isBeginBlockFrame,whereClauseConstraints:new Map(e.whereClauseConstraints)}}return{id:e.id,variables:[...e.variables,t],isBeginBlockFrame:e.isBeginBlockFrame,whereClauseConstraints:new Map(e.whereClauseConstraints)}}function R0(e,t){return{id:e.id,variables:[...e.variables,t],isBeginBlockFrame:e.isBeginBlockFrame,whereClauseConstraints:e.whereClauseConstraints}}function O0(e,t,n){let r=e.variables.filter(i=>i.name===t);return n?r.filter(n):r}function ve(e,t,n){let r=[];for(let i=0;i<e.frames.length;i++){let o=e.frames[i],a=O0(o,t,n);r.push(...a)}return n?r.filter(n):r}function Pr(e,t){let n=[];for(let r=0;r<e.frames.length;r++){let o=e.frames[r].variables.filter(t);n.push(...o)}return n}function lu(e,t){for(let n=e.frames.length-1;n>=0;n--)if(e.frames[n].variables.some(t))return n;return-1}function vt(e,t={id:kn(e.modulePath,"frame"),variables:[],isBeginBlockFrame:!1,whereClauseConstraints:new Map},n){let r=n?{...t,isBeginBlockFrame:!0}:t;return{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,frames:[...e.frames,r],modulePath:e.modulePath,inputString:e.inputString}}function Zt(e,t=!1){let n=e.frames.length-1,r=e.frames[n];if(!t){let i=Ks(e),o=r.variables.filter(a=>!a.initializedAtToken);if(i.length>0)throw _n(i.map(a=>({token:a.token,errorMessage:`Variable "${a.name}" was not consumed. It is supposed to be consumed before going out of scope.
193
- Typeof "${a.name}": ${O(a.type)}`})));if(o.length>0)throw _n(o.map(a=>({token:a.token,errorMessage:`Variable "${a.name}" is undefined.`})))}return{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,frames:e.frames.slice(0,-1),modulePath:e.modulePath,inputString:e.inputString}}function zt(e,t,n){let r=e.frames.map(i=>{let o=i.variables.map(a=>a.id===t.id?n:a);return{...i,variables:o}});return{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,frames:r,modulePath:e.modulePath,inputString:e.inputString}}function o$(e){var t,n;return{id:e.id,name:e.name,type:O(e.type),typeId:e.type.id,value:bt((t=e.value)==null?void 0:t[0]),isCompileTimeOnly:e.isCompileTimeOnly,isUndefined:!e.initializedAtToken,isOwningTheRcValue:!!e.isOwningTheRcValue,isOwningTheSameRcValueAs:(n=e.isOwningTheSameRcValueAs)==null?void 0:n.name,isReassignable:!!e.isReassignable,isConsumed:!!e.consumedAtToken}}function a$({env:e,context:t,methodName:n,type:r}){let i=[];if(!r.trait)return i;let o=r.trait.fields.find(a=>a.label===n&&_e(a.type));if(o&&_e(o.type)){let a=o.assignedValue;Ge(a)&&(a=Ee(o.type,{variableName:o.label,env:e,context:t})),i.push({type:o.type,value:a})}for(let a of r.trait.fields)if(a.label===""&&a.assignedValue&&on(a.assignedValue)){let s=a.assignedValue,l=s.type,u=l.fields.findIndex(c=>c.label===n&&_e(c.type));if(u>=0){let c=l.fields[u];if(_e(c.type)){let f=s.fields[u],_=c.type;Se(f)&&f.specializedType&&(_=f.specializedType),i.push({type:_,value:f})}}}if(i.length===0){let a=ki({concreteType:r,methodName:n,env:e});i.push(...a)}return i}function hm({env:e,context:t,methodName:n,receiverType:r,isInfixOperatorCall:i}){var _,p;let o=[],a=r;for(;et(a);)a=a.childType;function s(d,v){let y=d.fields.find(h=>h.label===n&&(_e(h.type)||_t(h.type)));if(y){let h;if(_e(y.type)){if(Ge(v))h=Ee(y.type,{variableName:y.label,env:e,context:t});else if(on(v)){let g=d.fields.findIndex(T=>T.label===y.label);h=v.fields[g]}o.push({type:y.type,value:h})}else if(rt(y.type)){let g=y.assignedValue;Rt(g)&&l(g)}}if(!y)for(let h of d.fields)_t(h.type)&&h.assignedValue&&s(h.type,h.assignedValue)}function l(d){let v=d.type.fields.findIndex(y=>y.label==="Call");if(v>=0){let y=d.type.fields[v];if(y.assignedValue){let h=y.assignedValue;kr(h)?h.fields.forEach(g=>{o.push({type:g.type,value:g})}):o.push({type:h.type,value:h})}}}function u(d){let v=[];for(let y of d)if(_e(y.type)){if(y.type.parameters.length===0)continue;let g=y.type.parameters[0].type;if(!i&&et(g)){let E=g.childType,$=r;if((yn(r)||On(r)||gn(r))&&($=hn({type:r,expectedType:void 0,expr:void 0,env:e})),Ce({type:E,env:y.type.env},{type:$,env:e},!0)){v.push({type:y.type,value:y.value,needsPointerConversion:!0});continue}}if(Xe(g)){v.push(y);continue}if(Xe(g)&&!Xe(r)){v.push(y);continue}if(H(r)&&r.resolvedConcreteType&&!yt(r)&&!Xe(g)&&Ce({type:g,env:y.type.env},{type:r.resolvedConcreteType,env:e},!0)){v.push(y);continue}if(!Xe(g)&&Xe(r))continue;if(yn(r)||On(r)||gn(r)){let E=hn({type:r,expectedType:void 0,expr:void 0,env:e});if(Ce({type:g,env:y.type.env},{type:E,env:e},!0)){v.push(y);continue}}if(ht(r)&&y.value===void 0){if(y.type.parameters.length>0&&y.type.SelfType){let $=y.type.parameters[0];if($){let k=$.type;if(!dn(k)&&!ht(k)&&!et(k))continue}}let E=y.type.return.type;if(mo(E,y.type.SelfType))continue}Ce({type:g,env:y.type.env},{type:r,env:e},!0)&&v.push(y)}else v.push(y);return v}function c(d,v,y=new Set){if(y.has(d.id))return;y.add(d.id);let h=d.fields.find(g=>g.label===v&&_e(g.type));if(h&&_e(h.type)){let g=h.assignedValue;Ge(g)&&(g=Ee(h.type,{variableName:h.label,env:e,context:t})),o.push({type:h.type,value:g});return}for(let g of d.fields)_t(g.type)&&g.assignedValue&&s(g.type,g.assignedValue)}if(r!==a&&r.trait){let d=r.trait.fields.find(v=>v.label===n&&_e(v.type));if(d&&_e(d.type)){let v=d.assignedValue;Ge(v)&&(v=Ee(d.type,{variableName:d.label,env:e,context:t})),o.push({type:d.type,value:v})}else c(r.trait,n);for(let v of r.trait.fields)if(v.label===""&&v.assignedValue&&on(v.assignedValue)){let y=v.assignedValue,h=y.type,g=h.fields.findIndex(T=>T.label===n&&_e(T.type));if(g>=0){let T=h.fields[g];if(_e(T.type)){let E=y.fields[g],$=T.type;Se(E)&&E.specializedType&&($=E.specializedType),o.push({type:$,value:E})}}}}if(o.length===0&&r!==a){let d=ki({concreteType:r,methodName:n,env:e});o.push(...d)}let f=H(a)&&a.resolvedConcreteType&&!yt(a);if(a.trait&&!ht(a)&&!f){let d=a.trait.fields.find(v=>v.label===n&&(_e(v.type)||rt(v.type)));if(d&&_e(d.type)){let v=d.assignedValue;Ge(v)&&(v=Ee(d.type,{variableName:d.label,env:e,context:t})),o.push({type:d.type,value:v})}else if(d&&rt(d.type)){let v=d.assignedValue;Rt(v)&&l(v)}else c(a.trait,n);for(let v of a.trait.fields)if(v.label===""&&v.assignedValue&&on(v.assignedValue)){let y=v.assignedValue,h=y.type,g=h.fields.findIndex(T=>T.label===n&&_e(T.type));if(g>=0){let T=h.fields[g];if(_e(T.type)){let E=y.fields[g],$=T.type;Se(E)&&E.specializedType&&($=E.specializedType),o.push({type:$,value:E})}}}if(o.length===0){let v=ki({concreteType:a,methodName:n,env:e});o.push(...v)}}if(o.length===0&&Io(a)){let d=D0(e,a);if(d)for(let v of d.requiredTraits)c(v,n)}if(yn(a)||On(a)||gn(a)){let d=hn({type:a,expectedType:void 0,expr:void 0,env:e});if(d.trait){let v=d.trait.fields.find(y=>y.label===n&&_e(y.type));if(v&&_e(v.type)){let y=v.assignedValue;Ge(y)&&(y=Ee(v.type,{variableName:v.label,env:e,context:t})),o.push({type:v.type,value:y})}else c(d.trait,n);for(let y of d.trait.fields)if(y.label===""&&y.assignedValue&&on(y.assignedValue)){let h=y.assignedValue,g=h.type,T=g.fields.findIndex(E=>E.label===n&&_e(E.type));if(T>=0){let E=g.fields[T];if(_e(E.type)){let $=h.fields[T],k=E.type;Se($)&&$.specializedType&&(k=$.specializedType),o.push({type:k,value:$})}}}if(o.length===0){let y=ki({concreteType:d,methodName:n,env:e});o.push(...y)}}}if(H(a)){if((_=a.resolvedConcreteType)!=null&&_.trait&&!yt(a)){let d=a.resolvedConcreteType,v=d.trait,y=v==null?void 0:v.fields.find(h=>h.label===n&&_e(h.type));if(y&&_e(y.type)){let h=y.assignedValue||Ee(y.type,{variableName:y.label,env:e,context:t});o.push({type:y.type,value:h})}if(o.length===0){let h=new Set;if(H(a)){let g=ai(e,a);if(g)for(let T of g.requiredTraits)h.add(T.id)}for(let g of(v==null?void 0:v.fields)??[])if(g.label===""&&g.assignedValue&&on(g.assignedValue)){let T=g.assignedValue,E=T.type;if(h.size>0&&!h.has(E.id))continue;let $=E.fields.findIndex(k=>k.label===n&&_e(k.type));if($>=0){let k=E.fields[$];if(_e(k.type)){let C=T.fields[$],w=k.type;Se(C)&&C.specializedType&&(w=C.specializedType),o.push({type:w,value:C});break}}}}if(o.length===0){let h=ki({concreteType:d,methodName:n,env:e});o.push(...h)}}if(!(o.length>0)){let d=[],v=new Set;for(let h of a.requiredTraits??[])v.has(h.traitType.id)||(v.add(h.traitType.id),d.push(h.traitType));let y=ai(e,a);if(y)for(let h of y.requiredTraits)v.has(h.id)||(v.add(h.id),d.push(h));if(H(a))for(let h=e.frames.length-1;h>=0;h--){let g=e.frames[h];for(let T of g.whereClauseConstraints.values())if(Ce({type:T.someType,env:e},{type:a,env:e},!1))for(let E of T.requiredTraits)v.has(E.id)||(v.add(E.id),d.push(E))}for(let h of d){let g=h.fields.find(T=>T.label===n&&_e(T.type));if(g&&_e(g.type)){let T={...g.type,SelfType:a},E=!1;if(T.parameters.length>0&&et(T.parameters[0].type)){let C=T.parameters[0].type.childType;(H(C)&&C.name==="Self"||Ce({type:C,env:T.env},{type:r,env:e},!0))&&(E=!0)}let $;if(H(a)){let C=a.definitionFrameLevel;if(C!==void 0&&C>=0){let w=e.frames[C];if(w){let I=w.variables.find(L=>L.name===a.name&&L.value&&X(L.value[0]));if(I!=null&&I.value&&X(I.value[0])){let L=I.value[0].value;if(L!==a&&!H(L)&&L.trait){for(let x of L.trait.fields)if(x.label===""&&x.assignedValue&&on(x.assignedValue)&&x.assignedValue.type.id===h.id){let V=x.assignedValue.type.fields.findIndex(M=>M.label===n&&_e(M.type));V>=0&&($=x.assignedValue.fields[V]??((p=x.assignedValue.type.fields[V])==null?void 0:p.assignedValue));break}}}}}}let k=$??Ee(T,{variableName:g.label,env:e,context:t});o.push({type:T,value:k,needsPointerConversion:E})}}if(o.length===0){for(let h of a.trait.fields)if(h.label===""&&h.assignedValue&&X(h.assignedValue)&&_t(h.assignedValue.value)){let T=h.assignedValue.value.fields.find(E=>E.label===n&&_e(E.type));if(T&&_e(T.type)){let E=Ee(T.type,{variableName:T.label,env:e,context:t});o.push({type:T.type,value:E})}}}}}if(ht(a)){let d=a.trait.fields.find(y=>y.label===n&&(_e(y.type)||_t(y.type)));if(d&&_e(d.type)){let y=d.assignedValue||Ee(d.type,{variableName:d.label,env:e,context:t});o.push({type:d.type,value:y})}let v=a.requiredTraits;for(let{traitType:y}of v){let h=y.fields.find(g=>g.label===n&&(_e(g.type)||_t(g.type)));h&&_e(h.type)&&h.type.parameters.length>0&&(Xe(h.type.parameters[0].type)||Xe(r)||Ce({type:h.type.parameters[0].type,env:h.type.env},{type:r,env:e},!0))&&o.push({type:h.type,value:void 0})}}return o.length>0,u(o)}function s$(e){let t=e.frames.map(n=>({...n,variables:n.variables.filter(r=>!r.isImplicit)}));return{...e,frames:t}}function r_(e){let t=e.frames.map((n,r)=>{if(r===0)return n;let i=n.variables.filter(o=>!(!o.isCompileTimeOnly||o.isImplicit));return{...n,variables:i}});return{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,frames:t,modulePath:e.modulePath,inputString:e.inputString}}function Ks(e){return e.frames.length===0?[]:e.frames[e.frames.length-1].variables.filter(r=>{if(r.consumedAtToken||!r.isOwningTheRcValue||!mt(r.type)||r.isModuleLevel)return!1;let i=r.type;return!(H(i)&&!i.resolvedConcreteType&&i.requiredTraits.length===0)}).reverse()}function P0(e){var t;for(let n=e.frames.length-1;n>=0;n--)if((t=e.frames[n])!=null&&t.isBeginBlockFrame)return n;return-1}function da(e){return{[e]:!0}}function nn(e,t){return(e==null?void 0:e[t])===!0}function an(e){return e!==void 0&&(e.return===!0||e.escape===!0||e.break===!0||e.continue===!0)}function uu(e){let t={};for(let n of e)n.return&&(t.return=!0),n.escape&&(t.escape=!0),n.break&&(t.break=!0),n.continue&&(t.continue=!0);return t}function l$(e){let t=[];return e.return&&t.push("return"),e.escape&&t.push("escape"),e.break&&t.push("break"),e.continue&&t.push("continue"),t.join("+")}function Et(e){switch(e.tag){case"Atom":return{...e,$:void 0};case"FnCall":return{...e,func:Et(e.func),args:e.args.map(Et),$:void 0}}}function S(e){return(e==null?void 0:e.tag)==="FnCall"}function Q(e){return(e==null?void 0:e.tag)==="Atom"}function Tn(e,t){return e.tag==="Atom"&&(typeof t=="string"?e.token.value===t:t.includes(e.token.value))}function Qs(e){return e.tag==="Atom"&&e.token.type==="operator"}function b(e,t,n){if(e.tag!=="FnCall"||e.func.tag!=="Atom")return!1;let r=e.func.token.value;return e.tag==="FnCall"&&e.func.tag==="Atom"&&(typeof t=="string"?r===t:t.includes(r))&&(n===void 0||e.args.length===n)}function it(e,t,n){if(!S(e))throw m({token:e.token,errorMessage:`Expected function call, got atom:
193
+ Typeof "${a.name}": ${O(a.type)}`})));if(o.length>0)throw _n(o.map(a=>({token:a.token,errorMessage:`Variable "${a.name}" is undefined.`})))}return{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,frames:e.frames.slice(0,-1),modulePath:e.modulePath,inputString:e.inputString}}function zt(e,t,n){let r=e.frames.map(i=>{let o=i.variables.map(a=>a.id===t.id?n:a);return{...i,variables:o}});return{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,frames:r,modulePath:e.modulePath,inputString:e.inputString}}function o$(e){var t,n;return{id:e.id,name:e.name,type:O(e.type),typeId:e.type.id,value:bt((t=e.value)==null?void 0:t[0]),isCompileTimeOnly:e.isCompileTimeOnly,isUndefined:!e.initializedAtToken,isOwningTheRcValue:!!e.isOwningTheRcValue,isOwningTheSameRcValueAs:(n=e.isOwningTheSameRcValueAs)==null?void 0:n.name,isReassignable:!!e.isReassignable,isConsumed:!!e.consumedAtToken}}function a$({env:e,context:t,methodName:n,type:r}){let i=[];if(!r.trait)return i;let o=r.trait.fields.find(a=>a.label===n&&_e(a.type));if(o&&_e(o.type)){let a=o.assignedValue;Ge(a)&&(a=Ee(o.type,{variableName:o.label,env:e,context:t})),i.push({type:o.type,value:a})}for(let a of r.trait.fields)if(a.label===""&&a.assignedValue&&on(a.assignedValue)){let s=a.assignedValue,l=s.type,u=l.fields.findIndex(c=>c.label===n&&_e(c.type));if(u>=0){let c=l.fields[u];if(_e(c.type)){let f=s.fields[u],_=c.type;Ie(f)&&f.specializedType&&(_=f.specializedType),i.push({type:_,value:f})}}}if(i.length===0){let a=ki({concreteType:r,methodName:n,env:e});i.push(...a)}return i}function hm({env:e,context:t,methodName:n,receiverType:r,isInfixOperatorCall:i}){var _,p;let o=[],a=r;for(;et(a);)a=a.childType;function s(d,v){let y=d.fields.find(h=>h.label===n&&(_e(h.type)||_t(h.type)));if(y){let h;if(_e(y.type)){if(Ge(v))h=Ee(y.type,{variableName:y.label,env:e,context:t});else if(on(v)){let g=d.fields.findIndex(T=>T.label===y.label);h=v.fields[g]}o.push({type:y.type,value:h})}else if(rt(y.type)){let g=y.assignedValue;Rt(g)&&l(g)}}if(!y)for(let h of d.fields)_t(h.type)&&h.assignedValue&&s(h.type,h.assignedValue)}function l(d){let v=d.type.fields.findIndex(y=>y.label==="Call");if(v>=0){let y=d.type.fields[v];if(y.assignedValue){let h=y.assignedValue;kr(h)?h.fields.forEach(g=>{o.push({type:g.type,value:g})}):o.push({type:h.type,value:h})}}}function u(d){let v=[];for(let y of d)if(_e(y.type)){if(y.type.parameters.length===0)continue;let g=y.type.parameters[0].type;if(!i&&et(g)){let E=g.childType,$=r;if((yn(r)||On(r)||gn(r))&&($=hn({type:r,expectedType:void 0,expr:void 0,env:e})),Ce({type:E,env:y.type.env},{type:$,env:e},!0)){v.push({type:y.type,value:y.value,needsPointerConversion:!0});continue}}if(Xe(g)){v.push(y);continue}if(Xe(g)&&!Xe(r)){v.push(y);continue}if(H(r)&&r.resolvedConcreteType&&!yt(r)&&!Xe(g)&&Ce({type:g,env:y.type.env},{type:r.resolvedConcreteType,env:e},!0)){v.push(y);continue}if(!Xe(g)&&Xe(r))continue;if(yn(r)||On(r)||gn(r)){let E=hn({type:r,expectedType:void 0,expr:void 0,env:e});if(Ce({type:g,env:y.type.env},{type:E,env:e},!0)){v.push(y);continue}}if(ht(r)&&y.value===void 0){if(y.type.parameters.length>0&&y.type.SelfType){let $=y.type.parameters[0];if($){let k=$.type;if(!dn(k)&&!ht(k)&&!et(k))continue}}let E=y.type.return.type;if(mo(E,y.type.SelfType))continue}Ce({type:g,env:y.type.env},{type:r,env:e},!0)&&v.push(y)}else v.push(y);return v}function c(d,v,y=new Set){if(y.has(d.id))return;y.add(d.id);let h=d.fields.find(g=>g.label===v&&_e(g.type));if(h&&_e(h.type)){let g=h.assignedValue;Ge(g)&&(g=Ee(h.type,{variableName:h.label,env:e,context:t})),o.push({type:h.type,value:g});return}for(let g of d.fields)_t(g.type)&&g.assignedValue&&s(g.type,g.assignedValue)}if(r!==a&&r.trait){let d=r.trait.fields.find(v=>v.label===n&&_e(v.type));if(d&&_e(d.type)){let v=d.assignedValue;Ge(v)&&(v=Ee(d.type,{variableName:d.label,env:e,context:t})),o.push({type:d.type,value:v})}else c(r.trait,n);for(let v of r.trait.fields)if(v.label===""&&v.assignedValue&&on(v.assignedValue)){let y=v.assignedValue,h=y.type,g=h.fields.findIndex(T=>T.label===n&&_e(T.type));if(g>=0){let T=h.fields[g];if(_e(T.type)){let E=y.fields[g],$=T.type;Ie(E)&&E.specializedType&&($=E.specializedType),o.push({type:$,value:E})}}}}if(o.length===0&&r!==a){let d=ki({concreteType:r,methodName:n,env:e});o.push(...d)}let f=H(a)&&a.resolvedConcreteType&&!yt(a);if(a.trait&&!ht(a)&&!f){let d=a.trait.fields.find(v=>v.label===n&&(_e(v.type)||rt(v.type)));if(d&&_e(d.type)){let v=d.assignedValue;Ge(v)&&(v=Ee(d.type,{variableName:d.label,env:e,context:t})),o.push({type:d.type,value:v})}else if(d&&rt(d.type)){let v=d.assignedValue;Rt(v)&&l(v)}else c(a.trait,n);for(let v of a.trait.fields)if(v.label===""&&v.assignedValue&&on(v.assignedValue)){let y=v.assignedValue,h=y.type,g=h.fields.findIndex(T=>T.label===n&&_e(T.type));if(g>=0){let T=h.fields[g];if(_e(T.type)){let E=y.fields[g],$=T.type;Ie(E)&&E.specializedType&&($=E.specializedType),o.push({type:$,value:E})}}}if(o.length===0){let v=ki({concreteType:a,methodName:n,env:e});o.push(...v)}}if(o.length===0&&Io(a)){let d=D0(e,a);if(d)for(let v of d.requiredTraits)c(v,n)}if(yn(a)||On(a)||gn(a)){let d=hn({type:a,expectedType:void 0,expr:void 0,env:e});if(d.trait){let v=d.trait.fields.find(y=>y.label===n&&_e(y.type));if(v&&_e(v.type)){let y=v.assignedValue;Ge(y)&&(y=Ee(v.type,{variableName:v.label,env:e,context:t})),o.push({type:v.type,value:y})}else c(d.trait,n);for(let y of d.trait.fields)if(y.label===""&&y.assignedValue&&on(y.assignedValue)){let h=y.assignedValue,g=h.type,T=g.fields.findIndex(E=>E.label===n&&_e(E.type));if(T>=0){let E=g.fields[T];if(_e(E.type)){let $=h.fields[T],k=E.type;Ie($)&&$.specializedType&&(k=$.specializedType),o.push({type:k,value:$})}}}if(o.length===0){let y=ki({concreteType:d,methodName:n,env:e});o.push(...y)}}}if(H(a)){if((_=a.resolvedConcreteType)!=null&&_.trait&&!yt(a)){let d=a.resolvedConcreteType,v=d.trait,y=v==null?void 0:v.fields.find(h=>h.label===n&&_e(h.type));if(y&&_e(y.type)){let h=y.assignedValue||Ee(y.type,{variableName:y.label,env:e,context:t});o.push({type:y.type,value:h})}if(o.length===0){let h=new Set;if(H(a)){let g=ai(e,a);if(g)for(let T of g.requiredTraits)h.add(T.id)}for(let g of(v==null?void 0:v.fields)??[])if(g.label===""&&g.assignedValue&&on(g.assignedValue)){let T=g.assignedValue,E=T.type;if(h.size>0&&!h.has(E.id))continue;let $=E.fields.findIndex(k=>k.label===n&&_e(k.type));if($>=0){let k=E.fields[$];if(_e(k.type)){let C=T.fields[$],w=k.type;Ie(C)&&C.specializedType&&(w=C.specializedType),o.push({type:w,value:C});break}}}}if(o.length===0){let h=ki({concreteType:d,methodName:n,env:e});o.push(...h)}}if(!(o.length>0)){let d=[],v=new Set;for(let h of a.requiredTraits??[])v.has(h.traitType.id)||(v.add(h.traitType.id),d.push(h.traitType));let y=ai(e,a);if(y)for(let h of y.requiredTraits)v.has(h.id)||(v.add(h.id),d.push(h));if(H(a))for(let h=e.frames.length-1;h>=0;h--){let g=e.frames[h];for(let T of g.whereClauseConstraints.values())if(Ce({type:T.someType,env:e},{type:a,env:e},!1))for(let E of T.requiredTraits)v.has(E.id)||(v.add(E.id),d.push(E))}for(let h of d){let g=h.fields.find(T=>T.label===n&&_e(T.type));if(g&&_e(g.type)){let T={...g.type,SelfType:a},E=!1;if(T.parameters.length>0&&et(T.parameters[0].type)){let C=T.parameters[0].type.childType;(H(C)&&C.name==="Self"||Ce({type:C,env:T.env},{type:r,env:e},!0))&&(E=!0)}let $;if(H(a)){let C=a.definitionFrameLevel;if(C!==void 0&&C>=0){let w=e.frames[C];if(w){let I=w.variables.find(L=>L.name===a.name&&L.value&&X(L.value[0]));if(I!=null&&I.value&&X(I.value[0])){let L=I.value[0].value;if(L!==a&&!H(L)&&L.trait){for(let x of L.trait.fields)if(x.label===""&&x.assignedValue&&on(x.assignedValue)&&x.assignedValue.type.id===h.id){let V=x.assignedValue.type.fields.findIndex(M=>M.label===n&&_e(M.type));V>=0&&($=x.assignedValue.fields[V]??((p=x.assignedValue.type.fields[V])==null?void 0:p.assignedValue));break}}}}}}let k=$??Ee(T,{variableName:g.label,env:e,context:t});o.push({type:T,value:k,needsPointerConversion:E})}}if(o.length===0){for(let h of a.trait.fields)if(h.label===""&&h.assignedValue&&X(h.assignedValue)&&_t(h.assignedValue.value)){let T=h.assignedValue.value.fields.find(E=>E.label===n&&_e(E.type));if(T&&_e(T.type)){let E=Ee(T.type,{variableName:T.label,env:e,context:t});o.push({type:T.type,value:E})}}}}}if(ht(a)){let d=a.trait.fields.find(y=>y.label===n&&(_e(y.type)||_t(y.type)));if(d&&_e(d.type)){let y=d.assignedValue||Ee(d.type,{variableName:d.label,env:e,context:t});o.push({type:d.type,value:y})}let v=a.requiredTraits;for(let{traitType:y}of v){let h=y.fields.find(g=>g.label===n&&(_e(g.type)||_t(g.type)));h&&_e(h.type)&&h.type.parameters.length>0&&(Xe(h.type.parameters[0].type)||Xe(r)||Ce({type:h.type.parameters[0].type,env:h.type.env},{type:r,env:e},!0))&&o.push({type:h.type,value:void 0})}}return o.length>0,u(o)}function s$(e){let t=e.frames.map(n=>({...n,variables:n.variables.filter(r=>!r.isImplicit)}));return{...e,frames:t}}function r_(e){let t=e.frames.map((n,r)=>{if(r===0)return n;let i=n.variables.filter(o=>!(!o.isCompileTimeOnly||o.isImplicit));return{...n,variables:i}});return{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,frames:t,modulePath:e.modulePath,inputString:e.inputString}}function Ks(e){return e.frames.length===0?[]:e.frames[e.frames.length-1].variables.filter(r=>{if(r.consumedAtToken||!r.isOwningTheRcValue||!mt(r.type)||r.isModuleLevel)return!1;let i=r.type;return!(H(i)&&!i.resolvedConcreteType&&i.requiredTraits.length===0)}).reverse()}function P0(e){var t;for(let n=e.frames.length-1;n>=0;n--)if((t=e.frames[n])!=null&&t.isBeginBlockFrame)return n;return-1}function da(e){return{[e]:!0}}function nn(e,t){return(e==null?void 0:e[t])===!0}function an(e){return e!==void 0&&(e.return===!0||e.escape===!0||e.break===!0||e.continue===!0)}function uu(e){let t={};for(let n of e)n.return&&(t.return=!0),n.escape&&(t.escape=!0),n.break&&(t.break=!0),n.continue&&(t.continue=!0);return t}function l$(e){let t=[];return e.return&&t.push("return"),e.escape&&t.push("escape"),e.break&&t.push("break"),e.continue&&t.push("continue"),t.join("+")}function Et(e){switch(e.tag){case"Atom":return{...e,$:void 0};case"FnCall":return{...e,func:Et(e.func),args:e.args.map(Et),$:void 0}}}function S(e){return(e==null?void 0:e.tag)==="FnCall"}function Q(e){return(e==null?void 0:e.tag)==="Atom"}function Tn(e,t){return e.tag==="Atom"&&(typeof t=="string"?e.token.value===t:t.includes(e.token.value))}function Qs(e){return e.tag==="Atom"&&e.token.type==="operator"}function b(e,t,n){if(e.tag!=="FnCall"||e.func.tag!=="Atom")return!1;let r=e.func.token.value;return e.tag==="FnCall"&&e.func.tag==="Atom"&&(typeof t=="string"?r===t:t.includes(r))&&(n===void 0||e.args.length===n)}function it(e,t,n){if(!S(e))throw m({token:e.token,errorMessage:`Expected function call, got atom:
194
194
  ${A(e)}`});if(!b(e,t))throw m({token:e.token,errorMessage:`Expected function call of ${Array.isArray(t)?t.map(r=>`"${r}"`).join(" or "):`"${t}"`}, got:
195
195
  ${A(e)}`});if(n!==void 0&&e.args.length!==n)throw m({token:e.token,errorMessage:`Expected ${n} arguments, got ${e.args.length}:
196
196
  ${A(e)}`})}function ef(e,t){if(e.tag!==t.tag)return!1;if(e.tag==="Atom"&&t.tag==="Atom")return e.token.value===t.token.value;if(e.tag==="FnCall"&&t.tag==="FnCall"){if(!ef(e.func,t.func)||e.args.length!==t.args.length)return!1;for(let n=0;n<e.args.length;n++)if(!ef(e.args[n],t.args[n]))return!1;return!0}return!1}var B={comptime:["comptime"],runtime:["runtime"],ref:["ref"],forall:["forall","\u2200"],using:["using"],given:["given"],where:["where"],quote:["quote",":"],unquote:["unquote","#"],unquote_splicing:["unquote_splicing","...#"],return:["return"],recur:["recur"],fn:["fn"],unsafe_fn:["unsafe_fn"],escape:["escape"],extern:["extern"],cond:["cond"],type:["type"],match:["match"],test:["test"],atomic:["atomic"],struct:["struct"],object:["object"],newtype:["newtype"],enum:["enum"],union:["union"],module:["module"],trait:["trait"],impl:["impl"],Impl:["Impl"],begin:["begin"],module_begin:["module_begin"],import:["import"],export:["export"],open:["open"],clone:["clone","%"],break:["break"],continue:["continue"],while:["while"],if:["if"],op_and:["&&"],op_or:["||"],gensym:["gensym"],dyn:["dyn"],Dyn:["Dyn"],Fn:["Fn"],c_include:["c_include"],undefined:["undefined"],null:["null"],true:["true"],false:["false"],unique:["unique","^"],Ptr:["*"],Iso:["Iso"],Tuple:["Tuple"],Array:["Array"],Slice:["Slice"],Future:["Future"],Concrete:["Concrete"],Type:["Type"],Module:["Module"],Trait:["Trait"],ComptimeList:["ComptimeList"],tuple:["tuple"],array:["array"],comptime_list:["comptime_list"]},F={comptime_expect_error:["comptime_expect_error"],comptime_assert:["comptime_assert"],comptime_print:["comptime_print"],comptime_fn:["comptime_fn"],va_start:["va_start"],__yo_array_fill:["__yo_array_fill"],typeof:["typeof"],sizeof:["sizeof"],alignof:["alignof"],typeid:["typeid"],downcast:["downcast"],consume:["consume"],macro_expand:["macro_expand"],as:["as"],the:["the"],do:["do"],rc:"rc",__yo_thread_set_maximum_threads:["__yo_thread_set_maximum_threads"],__yo_ptr_add:["__yo_ptr_add"],__yo_ptr_sub:["__yo_ptr_sub"],__yo_ptr_diff:["__yo_ptr_diff"],__yo_ptr_eq:["__yo_ptr_eq"],__yo_ptr_neq:["__yo_ptr_neq"],__yo_ptr_lt:["__yo_ptr_lt"],__yo_ptr_lte:["__yo_ptr_lte"],__yo_ptr_gt:["__yo_ptr_gt"],__yo_ptr_gte:["__yo_ptr_gte"],__yo_address_of:["&"],__yo_ptr_deref:["__yo_ptr_deref"],__yo_ptr_set:["__yo_ptr_set"],__yo_slice_len:["__yo_slice_len"],__yo_slice_new:["__yo_slice_new"],__yo_slice_ptr:["__yo_slice_ptr"],__yo_array_index:["__yo_array_index"],__yo_slice_index:["__yo_slice_index"],__yo_array_index_range:["__yo_array_index_range"],__yo_array_index_range_inclusive:["__yo_array_index_range_inclusive"],__yo_slice_index_range:["__yo_slice_index_range"],__yo_slice_index_range_inclusive:["__yo_slice_index_range_inclusive"],__yo_comptime_array_index:["__yo_comptime_array_index"],__yo_comptime_slice_index:["__yo_comptime_slice_index"],__yo_comptime_array_index_range:["__yo_comptime_array_index_range"],__yo_comptime_array_index_range_inclusive:["__yo_comptime_array_index_range_inclusive"],__yo_comptime_slice_index_range:["__yo_comptime_slice_index_range"],__yo_comptime_slice_index_range_inclusive:["__yo_comptime_slice_index_range_inclusive"],__yo_as:["__yo_as"],__yo_expr_is_atom:["__yo_expr_is_atom"],__yo_expr_is_fn_call:["__yo_expr_is_fn_call"],__yo_expr_get_callee:["__yo_expr_get_callee"],__yo_expr_get_args:["__yo_expr_get_args"],__yo_expr_to_string:["__yo_expr_to_string"],__yo_expr_eq:["__yo_expr_eq"],__yo_comptime_list_car:["__yo_comptime_list_car"],__yo_comptime_list_cdr:["__yo_comptime_list_cdr"],__yo_comptime_list_cons:["__yo_comptime_list_cons"],__yo_comptime_list_append:["__yo_comptime_list_append"],__yo_comptime_list_length:["__yo_comptime_list_length"],__yo_comptime_list_element_type:["__yo_comptime_list_element_type"],__yo_comptime_list_get:["__yo_comptime_list_get"],__yo_comptime_list_index:["__yo_comptime_list_index"],__yo_comptime_list_index_range:["__yo_comptime_list_index_range"],__yo_comptime_list_index_range_inclusive:["__yo_comptime_list_index_range_inclusive"],__yo_comptime_int_add:["__yo_comptime_int_add"],__yo_comptime_int_sub:["__yo_comptime_int_sub"],__yo_comptime_int_mul:["__yo_comptime_int_mul"],__yo_comptime_int_div:["__yo_comptime_int_div"],__yo_comptime_int_mod:["__yo_comptime_int_mod"],__yo_comptime_int_eq:["__yo_comptime_int_eq"],__yo_comptime_int_neq:["__yo_comptime_int_neq"],__yo_comptime_int_lt:["__yo_comptime_int_lt"],__yo_comptime_int_lte:["__yo_comptime_int_lte"],__yo_comptime_int_gt:["__yo_comptime_int_gt"],__yo_comptime_int_gte:["__yo_comptime_int_gte"],__yo_comptime_int_bit_and:["__yo_comptime_int_bit_and"],__yo_comptime_int_bit_or:["__yo_comptime_int_bit_or"],__yo_comptime_int_bit_xor:["__yo_comptime_int_bit_xor"],__yo_comptime_int_shl:["__yo_comptime_int_shl"],__yo_comptime_int_shr:["__yo_comptime_int_shr"],__yo_comptime_int_neg:["__yo_comptime_int_neg"],__yo_comptime_int_bit_not:["__yo_comptime_int_bit_not"],__yo_comptime_int_to_comptime_string:["__yo_comptime_int_to_comptime_string"],__yo_comptime_float_add:["__yo_comptime_float_add"],__yo_comptime_float_sub:["__yo_comptime_float_sub"],__yo_comptime_float_mul:["__yo_comptime_float_mul"],__yo_comptime_float_div:["__yo_comptime_float_div"],__yo_comptime_float_eq:["__yo_comptime_float_eq"],__yo_comptime_float_neq:["__yo_comptime_float_neq"],__yo_comptime_float_lt:["__yo_comptime_float_lt"],__yo_comptime_float_lte:["__yo_comptime_float_lte"],__yo_comptime_float_gt:["__yo_comptime_float_gt"],__yo_comptime_float_gte:["__yo_comptime_float_gte"],__yo_comptime_float_neg:["__yo_comptime_float_neg"],__yo_comptime_float_to_comptime_string:["__yo_comptime_float_to_comptime_string"],__yo_comptime_u8_add:["__yo_comptime_u8_add"],__yo_comptime_u8_sub:["__yo_comptime_u8_sub"],__yo_comptime_u8_mul:["__yo_comptime_u8_mul"],__yo_comptime_u8_div:["__yo_comptime_u8_div"],__yo_comptime_u8_mod:["__yo_comptime_u8_mod"],__yo_comptime_u8_eq:["__yo_comptime_u8_eq"],__yo_comptime_u8_neq:["__yo_comptime_u8_neq"],__yo_comptime_u8_lt:["__yo_comptime_u8_lt"],__yo_comptime_u8_lte:["__yo_comptime_u8_lte"],__yo_comptime_u8_gt:["__yo_comptime_u8_gt"],__yo_comptime_u8_gte:["__yo_comptime_u8_gte"],__yo_comptime_u8_neg:["__yo_comptime_u8_neg"],__yo_comptime_u8_bit_and:["__yo_comptime_u8_bit_and"],__yo_comptime_u8_bit_or:["__yo_comptime_u8_bit_or"],__yo_comptime_u8_bit_xor:["__yo_comptime_u8_bit_xor"],__yo_comptime_u8_bit_not:["__yo_comptime_u8_bit_not"],__yo_comptime_u8_shl:["__yo_comptime_u8_shl"],__yo_comptime_u8_shr:["__yo_comptime_u8_shr"],__yo_comptime_u8_to_comptime_string:["__yo_comptime_u8_to_comptime_string"],__yo_comptime_i8_add:["__yo_comptime_i8_add"],__yo_comptime_i8_sub:["__yo_comptime_i8_sub"],__yo_comptime_i8_mul:["__yo_comptime_i8_mul"],__yo_comptime_i8_div:["__yo_comptime_i8_div"],__yo_comptime_i8_mod:["__yo_comptime_i8_mod"],__yo_comptime_i8_eq:["__yo_comptime_i8_eq"],__yo_comptime_i8_neq:["__yo_comptime_i8_neq"],__yo_comptime_i8_lt:["__yo_comptime_i8_lt"],__yo_comptime_i8_lte:["__yo_comptime_i8_lte"],__yo_comptime_i8_gt:["__yo_comptime_i8_gt"],__yo_comptime_i8_gte:["__yo_comptime_i8_gte"],__yo_comptime_i8_neg:["__yo_comptime_i8_neg"],__yo_comptime_i8_bit_and:["__yo_comptime_i8_bit_and"],__yo_comptime_i8_bit_or:["__yo_comptime_i8_bit_or"],__yo_comptime_i8_bit_xor:["__yo_comptime_i8_bit_xor"],__yo_comptime_i8_bit_not:["__yo_comptime_i8_bit_not"],__yo_comptime_i8_shl:["__yo_comptime_i8_shl"],__yo_comptime_i8_shr:["__yo_comptime_i8_shr"],__yo_comptime_i8_to_comptime_string:["__yo_comptime_i8_to_comptime_string"],__yo_comptime_u16_add:["__yo_comptime_u16_add"],__yo_comptime_u16_sub:["__yo_comptime_u16_sub"],__yo_comptime_u16_mul:["__yo_comptime_u16_mul"],__yo_comptime_u16_div:["__yo_comptime_u16_div"],__yo_comptime_u16_mod:["__yo_comptime_u16_mod"],__yo_comptime_u16_eq:["__yo_comptime_u16_eq"],__yo_comptime_u16_neq:["__yo_comptime_u16_neq"],__yo_comptime_u16_lt:["__yo_comptime_u16_lt"],__yo_comptime_u16_lte:["__yo_comptime_u16_lte"],__yo_comptime_u16_gt:["__yo_comptime_u16_gt"],__yo_comptime_u16_gte:["__yo_comptime_u16_gte"],__yo_comptime_u16_neg:["__yo_comptime_u16_neg"],__yo_comptime_u16_bit_and:["__yo_comptime_u16_bit_and"],__yo_comptime_u16_bit_or:["__yo_comptime_u16_bit_or"],__yo_comptime_u16_bit_xor:["__yo_comptime_u16_bit_xor"],__yo_comptime_u16_bit_not:["__yo_comptime_u16_bit_not"],__yo_comptime_u16_shl:["__yo_comptime_u16_shl"],__yo_comptime_u16_shr:["__yo_comptime_u16_shr"],__yo_comptime_u16_to_comptime_string:["__yo_comptime_u16_to_comptime_string"],__yo_comptime_i16_add:["__yo_comptime_i16_add"],__yo_comptime_i16_sub:["__yo_comptime_i16_sub"],__yo_comptime_i16_mul:["__yo_comptime_i16_mul"],__yo_comptime_i16_div:["__yo_comptime_i16_div"],__yo_comptime_i16_mod:["__yo_comptime_i16_mod"],__yo_comptime_i16_eq:["__yo_comptime_i16_eq"],__yo_comptime_i16_neq:["__yo_comptime_i16_neq"],__yo_comptime_i16_lt:["__yo_comptime_i16_lt"],__yo_comptime_i16_lte:["__yo_comptime_i16_lte"],__yo_comptime_i16_gt:["__yo_comptime_i16_gt"],__yo_comptime_i16_gte:["__yo_comptime_i16_gte"],__yo_comptime_i16_neg:["__yo_comptime_i16_neg"],__yo_comptime_i16_bit_and:["__yo_comptime_i16_bit_and"],__yo_comptime_i16_bit_or:["__yo_comptime_i16_bit_or"],__yo_comptime_i16_bit_xor:["__yo_comptime_i16_bit_xor"],__yo_comptime_i16_bit_not:["__yo_comptime_i16_bit_not"],__yo_comptime_i16_shl:["__yo_comptime_i16_shl"],__yo_comptime_i16_shr:["__yo_comptime_i16_shr"],__yo_comptime_i16_to_comptime_string:["__yo_comptime_i16_to_comptime_string"],__yo_comptime_u32_add:["__yo_comptime_u32_add"],__yo_comptime_u32_sub:["__yo_comptime_u32_sub"],__yo_comptime_u32_mul:["__yo_comptime_u32_mul"],__yo_comptime_u32_div:["__yo_comptime_u32_div"],__yo_comptime_u32_mod:["__yo_comptime_u32_mod"],__yo_comptime_u32_eq:["__yo_comptime_u32_eq"],__yo_comptime_u32_neq:["__yo_comptime_u32_neq"],__yo_comptime_u32_lt:["__yo_comptime_u32_lt"],__yo_comptime_u32_lte:["__yo_comptime_u32_lte"],__yo_comptime_u32_gt:["__yo_comptime_u32_gt"],__yo_comptime_u32_gte:["__yo_comptime_u32_gte"],__yo_comptime_u32_neg:["__yo_comptime_u32_neg"],__yo_comptime_u32_bit_and:["__yo_comptime_u32_bit_and"],__yo_comptime_u32_bit_or:["__yo_comptime_u32_bit_or"],__yo_comptime_u32_bit_xor:["__yo_comptime_u32_bit_xor"],__yo_comptime_u32_bit_not:["__yo_comptime_u32_bit_not"],__yo_comptime_u32_shl:["__yo_comptime_u32_shl"],__yo_comptime_u32_shr:["__yo_comptime_u32_shr"],__yo_comptime_u32_to_comptime_string:["__yo_comptime_u32_to_comptime_string"],__yo_comptime_i32_add:["__yo_comptime_i32_add"],__yo_comptime_i32_sub:["__yo_comptime_i32_sub"],__yo_comptime_i32_mul:["__yo_comptime_i32_mul"],__yo_comptime_i32_div:["__yo_comptime_i32_div"],__yo_comptime_i32_mod:["__yo_comptime_i32_mod"],__yo_comptime_i32_eq:["__yo_comptime_i32_eq"],__yo_comptime_i32_neq:["__yo_comptime_i32_neq"],__yo_comptime_i32_lt:["__yo_comptime_i32_lt"],__yo_comptime_i32_lte:["__yo_comptime_i32_lte"],__yo_comptime_i32_gt:["__yo_comptime_i32_gt"],__yo_comptime_i32_gte:["__yo_comptime_i32_gte"],__yo_comptime_i32_neg:["__yo_comptime_i32_neg"],__yo_comptime_i32_bit_and:["__yo_comptime_i32_bit_and"],__yo_comptime_i32_bit_or:["__yo_comptime_i32_bit_or"],__yo_comptime_i32_bit_xor:["__yo_comptime_i32_bit_xor"],__yo_comptime_i32_bit_not:["__yo_comptime_i32_bit_not"],__yo_comptime_i32_shl:["__yo_comptime_i32_shl"],__yo_comptime_i32_shr:["__yo_comptime_i32_shr"],__yo_comptime_i32_to_comptime_string:["__yo_comptime_i32_to_comptime_string"],__yo_comptime_u64_add:["__yo_comptime_u64_add"],__yo_comptime_u64_sub:["__yo_comptime_u64_sub"],__yo_comptime_u64_mul:["__yo_comptime_u64_mul"],__yo_comptime_u64_div:["__yo_comptime_u64_div"],__yo_comptime_u64_mod:["__yo_comptime_u64_mod"],__yo_comptime_u64_eq:["__yo_comptime_u64_eq"],__yo_comptime_u64_neq:["__yo_comptime_u64_neq"],__yo_comptime_u64_lt:["__yo_comptime_u64_lt"],__yo_comptime_u64_lte:["__yo_comptime_u64_lte"],__yo_comptime_u64_gt:["__yo_comptime_u64_gt"],__yo_comptime_u64_gte:["__yo_comptime_u64_gte"],__yo_comptime_u64_neg:["__yo_comptime_u64_neg"],__yo_comptime_u64_bit_and:["__yo_comptime_u64_bit_and"],__yo_comptime_u64_bit_or:["__yo_comptime_u64_bit_or"],__yo_comptime_u64_bit_xor:["__yo_comptime_u64_bit_xor"],__yo_comptime_u64_bit_not:["__yo_comptime_u64_bit_not"],__yo_comptime_u64_shl:["__yo_comptime_u64_shl"],__yo_comptime_u64_shr:["__yo_comptime_u64_shr"],__yo_comptime_u64_to_comptime_string:["__yo_comptime_u64_to_comptime_string"],__yo_comptime_i64_add:["__yo_comptime_i64_add"],__yo_comptime_i64_sub:["__yo_comptime_i64_sub"],__yo_comptime_i64_mul:["__yo_comptime_i64_mul"],__yo_comptime_i64_div:["__yo_comptime_i64_div"],__yo_comptime_i64_mod:["__yo_comptime_i64_mod"],__yo_comptime_i64_eq:["__yo_comptime_i64_eq"],__yo_comptime_i64_neq:["__yo_comptime_i64_neq"],__yo_comptime_i64_lt:["__yo_comptime_i64_lt"],__yo_comptime_i64_lte:["__yo_comptime_i64_lte"],__yo_comptime_i64_gt:["__yo_comptime_i64_gt"],__yo_comptime_i64_gte:["__yo_comptime_i64_gte"],__yo_comptime_i64_neg:["__yo_comptime_i64_neg"],__yo_comptime_i64_bit_and:["__yo_comptime_i64_bit_and"],__yo_comptime_i64_bit_or:["__yo_comptime_i64_bit_or"],__yo_comptime_i64_bit_xor:["__yo_comptime_i64_bit_xor"],__yo_comptime_i64_bit_not:["__yo_comptime_i64_bit_not"],__yo_comptime_i64_shl:["__yo_comptime_i64_shl"],__yo_comptime_i64_shr:["__yo_comptime_i64_shr"],__yo_comptime_i64_to_comptime_string:["__yo_comptime_i64_to_comptime_string"],__yo_comptime_usize_add:["__yo_comptime_usize_add"],__yo_comptime_usize_sub:["__yo_comptime_usize_sub"],__yo_comptime_usize_mul:["__yo_comptime_usize_mul"],__yo_comptime_usize_div:["__yo_comptime_usize_div"],__yo_comptime_usize_mod:["__yo_comptime_usize_mod"],__yo_comptime_usize_eq:["__yo_comptime_usize_eq"],__yo_comptime_usize_neq:["__yo_comptime_usize_neq"],__yo_comptime_usize_lt:["__yo_comptime_usize_lt"],__yo_comptime_usize_lte:["__yo_comptime_usize_lte"],__yo_comptime_usize_gt:["__yo_comptime_usize_gt"],__yo_comptime_usize_gte:["__yo_comptime_usize_gte"],__yo_comptime_usize_neg:["__yo_comptime_usize_neg"],__yo_comptime_usize_bit_and:["__yo_comptime_usize_bit_and"],__yo_comptime_usize_bit_or:["__yo_comptime_usize_bit_or"],__yo_comptime_usize_bit_xor:["__yo_comptime_usize_bit_xor"],__yo_comptime_usize_bit_not:["__yo_comptime_usize_bit_not"],__yo_comptime_usize_shl:["__yo_comptime_usize_shl"],__yo_comptime_usize_shr:["__yo_comptime_usize_shr"],__yo_comptime_usize_to_comptime_string:["__yo_comptime_usize_to_comptime_string"],__yo_comptime_isize_add:["__yo_comptime_isize_add"],__yo_comptime_isize_sub:["__yo_comptime_isize_sub"],__yo_comptime_isize_mul:["__yo_comptime_isize_mul"],__yo_comptime_isize_div:["__yo_comptime_isize_div"],__yo_comptime_isize_mod:["__yo_comptime_isize_mod"],__yo_comptime_isize_eq:["__yo_comptime_isize_eq"],__yo_comptime_isize_neq:["__yo_comptime_isize_neq"],__yo_comptime_isize_lt:["__yo_comptime_isize_lt"],__yo_comptime_isize_lte:["__yo_comptime_isize_lte"],__yo_comptime_isize_gt:["__yo_comptime_isize_gt"],__yo_comptime_isize_gte:["__yo_comptime_isize_gte"],__yo_comptime_isize_neg:["__yo_comptime_isize_neg"],__yo_comptime_isize_bit_and:["__yo_comptime_isize_bit_and"],__yo_comptime_isize_bit_or:["__yo_comptime_isize_bit_or"],__yo_comptime_isize_bit_xor:["__yo_comptime_isize_bit_xor"],__yo_comptime_isize_bit_not:["__yo_comptime_isize_bit_not"],__yo_comptime_isize_shl:["__yo_comptime_isize_shl"],__yo_comptime_isize_shr:["__yo_comptime_isize_shr"],__yo_comptime_isize_to_comptime_string:["__yo_comptime_isize_to_comptime_string"],__yo_comptime_f32_add:["__yo_comptime_f32_add"],__yo_comptime_f32_sub:["__yo_comptime_f32_sub"],__yo_comptime_f32_mul:["__yo_comptime_f32_mul"],__yo_comptime_f32_div:["__yo_comptime_f32_div"],__yo_comptime_f32_eq:["__yo_comptime_f32_eq"],__yo_comptime_f32_neq:["__yo_comptime_f32_neq"],__yo_comptime_f32_lt:["__yo_comptime_f32_lt"],__yo_comptime_f32_lte:["__yo_comptime_f32_lte"],__yo_comptime_f32_gt:["__yo_comptime_f32_gt"],__yo_comptime_f32_gte:["__yo_comptime_f32_gte"],__yo_comptime_f32_neg:["__yo_comptime_f32_neg"],__yo_comptime_f32_to_comptime_string:["__yo_comptime_f32_to_comptime_string"],__yo_comptime_f64_add:["__yo_comptime_f64_add"],__yo_comptime_f64_sub:["__yo_comptime_f64_sub"],__yo_comptime_f64_mul:["__yo_comptime_f64_mul"],__yo_comptime_f64_div:["__yo_comptime_f64_div"],__yo_comptime_f64_eq:["__yo_comptime_f64_eq"],__yo_comptime_f64_neq:["__yo_comptime_f64_neq"],__yo_comptime_f64_lt:["__yo_comptime_f64_lt"],__yo_comptime_f64_lte:["__yo_comptime_f64_lte"],__yo_comptime_f64_gt:["__yo_comptime_f64_gt"],__yo_comptime_f64_gte:["__yo_comptime_f64_gte"],__yo_comptime_f64_neg:["__yo_comptime_f64_neg"],__yo_comptime_f64_to_comptime_string:["__yo_comptime_f64_to_comptime_string"],__yo_comptime_bool_and:["__yo_comptime_bool_and"],__yo_comptime_bool_or:["__yo_comptime_bool_or"],__yo_comptime_bool_eq:["__yo_comptime_bool_eq"],__yo_comptime_bool_neq:["__yo_comptime_bool_neq"],__yo_comptime_bool_not:["__yo_comptime_bool_not"],__yo_comptime_bool_to_comptime_string:["__yo_comptime_bool_to_comptime_string"],__yo_comptime_string_concat:["__yo_comptime_string_concat"],__yo_comptime_string_eq:["__yo_comptime_string_eq"],__yo_comptime_string_neq:["__yo_comptime_string_neq"],__yo_comptime_string_lt:["__yo_comptime_string_lt"],__yo_comptime_string_lte:["__yo_comptime_string_lte"],__yo_comptime_string_gt:["__yo_comptime_string_gt"],__yo_comptime_string_gte:["__yo_comptime_string_gte"],__yo_comptime_string_length:["__yo_comptime_string_length"],__yo_comptime_string_to_upper:["__yo_comptime_string_to_upper"],__yo_comptime_string_to_lower:["__yo_comptime_string_to_lower"],__yo_comptime_string_slice:["__yo_comptime_string_slice"],__yo_comptime_string_index:["__yo_comptime_string_index"],__yo_comptime_string_index_range:["__yo_comptime_string_index_range"],__yo_comptime_string_index_range_inclusive:["__yo_comptime_string_index_range_inclusive"],__yo_type_to_comptime_string:["__yo_type_to_comptime_string"],__yo_type_contains_rc_type:["__yo_type_contains_rc_type"],__yo_type_can_form_rc_cycle:["__yo_type_can_form_rc_cycle"],__yo_are_types_compatible:["__yo_are_types_compatible"],__yo_are_types_equal:["__yo_are_types_equal"],__yo_type_impls:["__yo_type_impls"],__yo_type_get_info:["__yo_type_get_info"],comptime_eval:["comptime_eval"],derive:["derive"],derive_rule:["derive_rule"],__yo_comptime_string_to_expr:["__yo_comptime_string_to_expr"],__yo_type_join_fields:["__yo_type_join_fields"],__yo_type_map_variants:["__yo_type_map_variants"],__yo_var_print_info:["__yo_var_print_info"],__yo_var_is_owning_the_rc_value:["__yo_var_is_owning_the_rc_value"],__yo_var_has_other_aliases:["__yo_var_has_other_aliases"],__yo_op_add:["__yo_op_add"],__yo_op_sub:["__yo_op_sub"],__yo_op_mul:["__yo_op_mul"],__yo_op_div:["__yo_op_div"],__yo_op_mod:["__yo_op_mod"],__yo_op_neg:["__yo_op_neg"],__yo_op_eq:["__yo_op_eq"],__yo_op_neq:["__yo_op_neq"],__yo_op_lt:["__yo_op_lt"],__yo_op_lte:["__yo_op_lte"],__yo_op_gt:["__yo_op_gt"],__yo_op_gte:["__yo_op_gte"],__yo_op_not:["__yo_op_not"],__yo_op_bit_and:["__yo_op_bit_and"],__yo_op_bit_or:["__yo_op_bit_or"],__yo_op_bit_xor:["__yo_op_bit_xor"],__yo_op_bit_complement:["__yo_op_bit_complement"],__yo_op_bit_left_shift:["__yo_op_bit_left_shift"],__yo_op_bit_right_shift:["__yo_op_bit_right_shift"],c_include:["c_include"],panic:["panic"],__yo_decr_rc:["__yo_decr_rc"],__yo_incr_rc:["__yo_incr_rc"],__yo_decr_rc_atomic:["__yo_decr_rc_atomic"],__yo_incr_rc_atomic:["__yo_incr_rc_atomic"],__yo_rc_own:["__yo_rc_own"],__yo_iso_extract:["__yo_iso_extract"],__yo_iso_dispose:["__yo_iso_dispose"],__yo_gc_collect:["__yo_gc_collect"],__yo_dyn_drop:["__yo_dyn_drop"],__yo_dyn_dup:["__yo_dyn_dup"],__yo_sometype_drop:["__yo_sometype_drop"],__yo_sometype_dup:["__yo_sometype_dup"],___drop:["___drop"],___dispose:["___dispose"],___dup:["___dup"],dispose:["dispose"],__yo_drop_array_element:["__yo_drop_array_element"],__yo_dup_array_element:["__yo_dup_array_element"],__yo_drop_tuple_element:["__yo_drop_tuple_element"],__yo_dup_tuple_element:["__yo_dup_tuple_element"],__yo_noop:["__yo_noop"],__yo_return_self:["__yo_return_self"],__yo_ms_sleep:["__yo_ms_sleep"],__yo_getrandom:["__yo_getrandom"],__yo_arc4random_buf:["__yo_arc4random_buf"],__yo_bcrypt_gen_random:["__yo_bcrypt_gen_random"],__yo_getentropy:["__yo_getentropy"],__yo_maybe_uninit_new:["__yo_maybe_uninit_new"],__yo_maybe_uninit_as_ptr:["__yo_maybe_uninit_as_ptr"],__yo_maybe_uninit_assume_init:["__yo_maybe_uninit_assume_init"],__yo_process_platform:["__yo_process_platform"],__yo_process_arch:["__yo_process_arch"],__yo_pointer_size_bits:["__yo_pointer_size_bits"],__yo_build_executable:["__yo_build_executable"],__yo_build_static_library:["__yo_build_static_library"],__yo_build_shared_library:["__yo_build_shared_library"],__yo_build_test:["__yo_build_test"],__yo_build_run:["__yo_build_run"],__yo_build_step:["__yo_build_step"],__yo_build_step_depend_on:["__yo_build_step_depend_on"],__yo_build_link:["__yo_build_link"],__yo_build_link_system_library:["__yo_build_link_system_library"],__yo_build_target_host:["__yo_build_target_host"],__yo_build_target_parse:["__yo_build_target_parse"],__yo_build_dependency:["__yo_build_dependency"],__yo_build_path_dependency:["__yo_build_path_dependency"],__yo_build_system_library:["__yo_build_system_library"],__yo_build_option:["__yo_build_option"],__yo_build_dep_artifact:["__yo_build_dep_artifact"],__yo_build_module:["__yo_build_module"],__yo_build_module_link:["__yo_build_module_link"],__yo_build_add_import:["__yo_build_add_import"],__yo_build_add_cflags:["__yo_build_add_cflags"],__yo_build_dep_module:["__yo_build_dep_module"],__yo_build_doc:["__yo_build_doc"],asm:["asm"],global_asm:["global_asm"]};function Js(e){return!!(e.tag==="FnCall"&&e.isInfix&&e.func.tag==="Atom"&&e.func.token.type==="operator"&&e.args.length===2)}function A(e,t){let r={...{prettyPrint:!1,indentSize:2,maxLineLength:80,indentLevel:0},...t};return r.prettyPrint?si(e,r):Eo(e)}function Eo(e){let t="";switch(e.tag){case"Atom":{t=e.token.value;break}case"FnCall":{if(e.func.tag==="Atom"&&(e.func.token.type==="operator"||e.func.token.type===".")){if(e.args.length===1){if(e.func.token.value==="."){let i=Eo(e.args[0]);S(e.args[0])&&(i=`(${i})`),t=`${e.func.token.value}${i}`}else t=`${e.func.token.value}(${Eo(e.args[0])})`;break}else if(e.args.length===2&&e.isInfix){let i=Eo(e.args[0]),o=Eo(e.args[1]);i=Js(e.args[0])||Qs(e.args[0])?`(${i})`:i,o=Js(e.args[1])||Qs(e.args[1])?`(${o})`:o,e.func.token.value==="."?(S(e.args[1])&&(o=`(${o})`),t=`(${i}.${o})`):t=`${i} ${e.func.token.value} ${o}`;break}}if(e.func.tag==="Atom"&&e.func.token.type==="identifier"&&e.func.token.value===B.tuple[0]){e.args.length===1?t=`(${Eo(e.args[0])},)`:t=`(${e.args.map(i=>Eo(i)).join(", ").trim()})`;break}let n=Eo(e.func);n=Js(e.func)||Qs(e.func)?`(${n})`:n;let r=e.args.map(i=>Eo(i)).join(", ").trim();t=`${n}(${r})`;break}}return t}function si(e,t){let n=" ".repeat(t.indentLevel*t.indentSize),r={...t,indentLevel:t.indentLevel+1},i=" ".repeat(r.indentLevel*t.indentSize);switch(e.tag){case"Atom":return e.token.value;case"FnCall":{if(e.func.tag==="Atom"&&(e.func.token.type==="operator"||e.func.token.type===".")){if(e.args.length===1)if(e.func.token.value==="."){let u=si(e.args[0],t);return S(e.args[0])&&(u=`(${u})`),`${e.func.token.value}${u}`}else{let u=si(e.args[0],t);return`${e.func.token.value}(${u})`}else if(e.args.length===2&&e.isInfix){let u=si(e.args[0],t),c=si(e.args[1],t);return u=Js(e.args[0])||Qs(e.args[0])?`(${u})`:u,c=Js(e.args[1])||Qs(e.args[1])?`(${c})`:c,e.func.token.value==="."?(S(e.args[1])&&(c=`(${c})`),`(${u}.${c})`):`${u} ${e.func.token.value} ${c}`}}if(e.func.tag==="Atom"&&e.func.token.type==="identifier"&&e.func.token.value===B.tuple[0]){if(e.args.length===0)return"()";if(e.args.length===1)return`(${si(e.args[0],t)},)`;{let u=e.args.map(f=>si(f,t)),c=`(${u.join(", ")})`;return c.length<=t.maxLineLength?c:`(
@@ -216,7 +216,7 @@ Consider using Dyn(...) for dynamic dispatch if different concrete types are nee
216
216
  `:"")+(C?"Might be initialized here:":"Not initialized here:"),token:C??t[w].token})))}if(v.length===1){if(v[0]&&!s[f].consumedAtToken){let $={...s[f],consumedAtToken:v[0]};e=zt(e,s[f],$),s[f]=$}}else if(!s[f].consumedAtToken&&v.every($=>$)){let $={...s[f],consumedAtToken:v[0]};e=zt(e,s[f],$),s[f]=$}else{let $=v.filter(C=>!!C),k=v.filter(C=>!C);if($.length>0&&k.length>0)throw _n(v.map((C,w)=>({errorMessage:(w===0?`Variable "${_}" is consumed in some cases but not in other cases:
217
217
  `:"")+(C?"Consumed here:":"Not consumed here:"),token:C??t[w].token})))}if(!s[f].isOwningTheRcValue&&d.every($=>$)){let $={...s[f],isOwningTheRcValue:!0,isOwningTheSameRcValueAs:void 0};e=zt(e,s[f],$),s[f]=$}else{let $=d.filter(C=>!!C),k=d.filter(C=>!C);if($.length>0&&k.length>0)throw _n(d.map((C,w)=>({errorMessage:(w===0?`Variable "${_}" might be holding the Rc value in some cases but not holding the Rc value in other cases:
218
218
  `:"")+(C?"Might be owning the Rc value here:":"Might be not owning the Rc value here:"),token:C??t[w].token})))}let g=s[f].id,T=[];for(let $=1;$<u;$++){let w=r[$-1].frames[o].variables[f];T.push(w.id)}if(T.some($=>$!==g)){let $=kn(e.modulePath,_),k={...s[f],id:$,value:void 0,isOwningTheSameRcValueAs:void 0};e=zt(e,s[f],k),s[f]=k}}}return e}function To(e,t){e.$=t.$,e.args=t.args,e.func=t.func,e.isInfix=t.isInfix,e.tag=t.tag,e.token=t.token}function i_(e,t){S(e)||(e.tag=t.tag),To(e,t)}function li(e,t,n=!1){var a,s,l;if((a=e.$)!=null&&a.value&&X((s=e.$)==null?void 0:s.value))return t;let r=(l=e.$)==null?void 0:l.variableName;if(!r)return t;let i=ve(t,r);if(i.length===0)throw _n([{token:e.token,errorMessage:`Variable "${r}" is not defined.`}]);let o=i[i.length-1];if(o.consumedAtToken&&!n){let u=`use of moved value: \`${r}\``;throw _n([{token:e.token,errorMessage:u},{token:o.consumedAtToken,errorMessage:"value moved here"}])}else t=zt(t,o,{...o,consumedAtToken:e.token});return t}function cr(e,t){var r;if(!e.$||!e.$.variableName)return;if(e.$.value){let i=e.$.variableName,o=!1;if(i&&un(e.$.env.modulePath,i)&&mt(e.$.type)){let a=ve(e.$.env,i);if(a.length>0){let s=a[a.length-1];s.isOwningTheRcValue&&!s.consumedAtToken&&(e.$.env=zt(e.$.env,s,{...s,consumedAtToken:e.token})),s.isOwningTheRcValue||(o=!0)}}if(!o)return}let n=e.$.variableName;if(!n)throw m({token:e.token,errorMessage:`Expression does not have a variable name to call ${F.___dup} on:
219
- ${A(e)}`});if(mt(e.$.type)){if(un(e.$.env.modulePath,n)&&!(Q(e)&&e.token.value!==n)){let a=ve(e.$.env,n);if(a.length>0){let s=a[a.length-1];if(s.isOwningTheRcValue){s.consumedAtToken||(e.$.env=zt(e.$.env,s,{...s,consumedAtToken:e.token}));return}}}let i=Qt(`${F.___dup[0]}(${n})`),o=U({expr:i,env:e.$.env,context:{...t,expectedType:void 0}});if((r=o.$)!=null&&r.variableName){let a=ve(o.$.env,o.$.variableName);if(a.length>0){let s=a[a.length-1];s.consumedAtToken||(o.$.env=zt(o.$.env,s,{...s,consumedAtToken:o.token}))}}e.$.deferredDupExpressions=[o],e.$.env=o.$.env}}function Xa(e,t){var o;let n=(o=e.$)==null?void 0:o.variableName;if(!n)return;let r=ve(t,n);if(r.length===0)throw _n([{token:e.token,errorMessage:`Variable "${n}" is not defined.`}]);let i=r[r.length-1];if(i.consumedAtToken){let a=`use of moved value: \`${n}\``;throw _n([{token:e.token,errorMessage:a},{token:i.consumedAtToken,errorMessage:"value moved here"}])}}var d$=Yn(require("fs"));function U0(e){switch(e){case"x86_64":case"aarch64":return 64;case"x86":case"arm":case"wasm32":return 32}}var u$={darwin:"macos",linux:"linux",win32:"windows",freebsd:"freebsd"},c$={x64:"x86_64",arm64:"aarch64",ia32:"x86",arm:"arm"},o_;function z0(){if(o_)return o_;let e=u$[process.platform];if(!e)throw new Error(`Unsupported host platform: ${process.platform}. Supported: ${Object.keys(u$).join(", ")}`);let t=c$[process.arch];if(!t)throw new Error(`Unsupported host architecture: ${process.arch}. Supported: ${Object.keys(c$).join(", ")}`);return o_={platform:e,arch:t},o_}function B0(){if(process.platform!=="linux")return"gnu";try{if(d$.readdirSync("/lib").some(n=>n.startsWith("ld-musl-")))return"musl"}catch{}return"gnu"}function m$(e){switch(e){case"linux":return B0();case"windows":return"msvc";case"wasi":case"emscripten":return"wasm";case"macos":case"freebsd":return}}function q0(e,t,n){return n?`${e}-${t}-${n}`:`${e}-${t}`}function y$(e,t,n){return{arch:e,os:t,abi:n,pointerSizeBits:U0(e),triple:q0(e,t,n)}}function ma(){let e=z0(),t=m$(e.platform);return y$(e.arch,e.platform,t)}var f$=new Set(["x86_64","aarch64","x86","arm","wasm32"]),_$=new Set(["linux","macos","windows","freebsd","wasi","emscripten"]),p$=new Set(["gnu","musl","msvc","none","wasm"]);function g$(e){let n=(e.startsWith("wasm-")?`wasm32-${e.slice(5)}`:e).split("-");if(n.length<2||n.length>3)throw new Error(`Invalid target triple "${e}". Expected format: <arch>-<os> or <arch>-<os>-<abi>. Example: x86_64-linux-gnu`);let r=n[0],i=n[1],o=n[2];if(!f$.has(r))throw new Error(`Unknown architecture "${r}" in target triple "${e}". Supported: ${[...f$].join(", ")}`);if(!_$.has(i))throw new Error(`Unknown OS "${i}" in target triple "${e}". Supported: ${[..._$].join(", ")}`);let a=r,s=i,l;if(o!==void 0)if(o==="none")l=void 0;else if(p$.has(o))l=o;else throw new Error(`Unknown ABI "${o}" in target triple "${e}". Supported: ${[...p$].join(", ")}`);else l=m$(s);return y$(a,s,l)}var vm;function cu(){return vm||(vm=ma()),vm}function Jn(e){return e.os==="windows"}function Qa(e){return e.os==="linux"}function Pi(e){return e.os==="macos"}function Ui(e){return e.arch==="wasm32"||e.os==="wasi"||e.os==="emscripten"}function h$(e){return e.os==="wasi"}var fu=class{constructor(){this.artifacts=[];this.testSuites=[];this.runSteps=[];this.steps=[];this.dependencies=[];this.pathDependencies=[];this.systemLibraries=[];this.dependencyArtifacts=[];this.modules=[];this.docConfigs=[];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)}findDocumentation(t){return this.docConfigs.find(n=>n.name===t)}registerDocumentation(t){this.docConfigs.push(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.findDocumentation(t);if(o)return{kind:"doc",value:o};let a=this.findStep(t);if(a)return{kind:"step",value:a}}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=[]}},ya,G0,Tm=new Map;function v$(){return G0}function T$(){Tm.clear()}function E$(e){return Tm.get(e)}function Em(e,t){Tm.set(e,t)}function tl(){return ya||(ya=new fu),ya}function $m(){ya&&ya.clear(),ya=void 0}function bm(e){let t=ya;return ya=e,t}function kt(e,t,n){if(!pt(e))throw m({token:n,errorMessage:`Build function: expected comptime_string for "${t}", got ${e?"non-string":"undefined"}`});return e.value}function Nr(e,t){return e.$={env:t,type:Ci(),value:ke,pathCollection:[]},e}function el(e,t,n){return e.$={env:t,type:Wn(),value:Gn(n),pathCollection:[]},e}function W0(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||Ge(r))return!0}return!1}function $$({expr:e,env:t}){var r,i,o,a,s,l,u,c,f,_,p,d,v,y,h,g,T,E,$,k,C,w,I,L,x,V,M,q,P,R,te,j,Y,le,Z,ce,Te,Ie,ge,be,De,ze,We,pe,fe,$e,Le,Me,Ze,$t,It,jt,st,Ct,rn,Bt,gt,ut,Nt,Yt,wt,Ft,ee,W,oe,me;if(W0(e)){if(b(e,F.__yo_build_target_host)){let de=ma();return el(e,t,de.triple)}return b(e,F.__yo_build_option)?el(e,t,""):Nr(e,t)}let n=tl();if(b(e,F.__yo_build_executable)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_executable expects at least 2 arguments (name, root), got ${e.args.length}`});let de=kt((r=e.args[0].$)==null?void 0:r.value,"name",e.token),ye=kt((i=e.args[1].$)==null?void 0:i.value,"root",e.token),he=e.args.length>2?kt((o=e.args[2].$)==null?void 0:o.value,"target",e.token):ma().triple,Be=e.args.length>3?kt((a=e.args[3].$)==null?void 0:a.value,"optimize",e.token):"debug",qe=e.args.length>4?kt((s=e.args[4].$)==null?void 0:s.value,"allocator",e.token):"mimalloc",Pe=e.args.length>5?kt((l=e.args[5].$)==null?void 0:l.value,"sanitize",e.token):"none";return n.registerExecutable({name:de,root:ye,target:he,optimize:Be,allocator:qe,sanitize:Pe,linkLibraries:[],includePaths:[],libraryPaths:[],cSources:[],cFlags:[],defines:[],strip:!1,staticLink:!1,runtimeFiles:[],linkedArtifacts:[],linkedSystemLibraries:[],importedModules:[]}),Nr(e,t)}if(b(e,F.__yo_build_static_library)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_static_library expects at least 2 arguments (name, root), got ${e.args.length}`});let de=kt((u=e.args[0].$)==null?void 0:u.value,"name",e.token),ye=kt((c=e.args[1].$)==null?void 0:c.value,"root",e.token),he=e.args.length>2?kt((f=e.args[2].$)==null?void 0:f.value,"target",e.token):ma().triple,Be=e.args.length>3?kt((_=e.args[3].$)==null?void 0:_.value,"optimize",e.token):"debug";return n.registerStaticLibrary({name:de,root:ye,target:he,optimize:Be,allocator:"libc",sanitize:"none",linkLibraries:[],includePaths:[],libraryPaths:[],cSources:[],cFlags:[],defines:[],strip:!1,staticLink:!1,runtimeFiles:[],linkedArtifacts:[],linkedSystemLibraries:[],importedModules:[]}),Nr(e,t)}if(b(e,F.__yo_build_shared_library)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_shared_library expects at least 2 arguments (name, root), got ${e.args.length}`});let de=kt((p=e.args[0].$)==null?void 0:p.value,"name",e.token),ye=kt((d=e.args[1].$)==null?void 0:d.value,"root",e.token),he=e.args.length>2?kt((v=e.args[2].$)==null?void 0:v.value,"target",e.token):ma().triple,Be=e.args.length>3?kt((y=e.args[3].$)==null?void 0:y.value,"optimize",e.token):"debug";return n.registerSharedLibrary({name:de,root:ye,target:he,optimize:Be,allocator:"libc",sanitize:"none",linkLibraries:[],includePaths:[],libraryPaths:[],cSources:[],cFlags:[],defines:[],strip:!1,staticLink:!1,runtimeFiles:[],linkedArtifacts:[],linkedSystemLibraries:[],importedModules:[]}),Nr(e,t)}if(b(e,F.__yo_build_link)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_link expects 2 arguments (artifact_name, library_name), got ${e.args.length}`});let de=kt((h=e.args[0].$)==null?void 0:h.value,"artifact_name",e.token),ye=kt((g=e.args[1].$)==null?void 0:g.value,"library_name",e.token);if(n.findSystemLibrary(ye)){let he=n.findArtifact(de);he&&(he.linkedSystemLibraries.includes(ye)||he.linkedSystemLibraries.push(ye))}else n.registerLink(de,ye);return Nr(e,t)}if(b(e,F.__yo_build_link_system_library)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_link_system_library expects 2 arguments (artifact_name, system_lib_name), got ${e.args.length}`});let de=kt((T=e.args[0].$)==null?void 0:T.value,"artifact_name",e.token),ye=kt((E=e.args[1].$)==null?void 0:E.value,"system_lib_name",e.token),he=n.findArtifact(de);return he&&(he.linkedSystemLibraries.includes(ye)||he.linkedSystemLibraries.push(ye)),Nr(e,t)}if(b(e,F.__yo_build_test)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_test expects at least 2 arguments (name, root), got ${e.args.length}`});let de=kt(($=e.args[0].$)==null?void 0:$.value,"name",e.token),ye=kt((k=e.args[1].$)==null?void 0:k.value,"root",e.token),he=e.args.length>2?kt((C=e.args[2].$)==null?void 0:C.value,"target",e.token):ma().triple;return n.registerTest({name:de,root:ye,target:he,verbose:!1,bail:!1,parallel:1}),Nr(e,t)}if(b(e,F.__yo_build_run)){if(e.args.length<1)throw m({token:e.token,errorMessage:`__yo_build_run expects at least 1 argument (artifact_name), got ${e.args.length}`});let de=kt((w=e.args[0].$)==null?void 0:w.value,"artifact_name",e.token);return n.registerRun(de,[]),Nr(e,t)}if(b(e,F.__yo_build_step)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_step expects 2 arguments (name, description), got ${e.args.length}`});let de=kt((I=e.args[0].$)==null?void 0:I.value,"name",e.token),ye=kt((L=e.args[1].$)==null?void 0:L.value,"description",e.token);return n.registerStep(de,ye),Nr(e,t)}if(b(e,F.__yo_build_doc)){if(e.args.length<10)throw m({token:e.token,errorMessage:`__yo_build_doc expects 10 arguments, got ${e.args.length}`});let de=kt((x=e.args[0].$)==null?void 0:x.value,"name",e.token),ye=kt((V=e.args[1].$)==null?void 0:V.value,"root",e.token),he=kt((M=e.args[2].$)==null?void 0:M.value,"output",e.token),Be=kt((q=e.args[3].$)==null?void 0:q.value,"format",e.token),qe=!!((P=e.args[4].$)!=null&&P.value),Pe=!!((R=e.args[5].$)!=null&&R.value),ie=kt((te=e.args[6].$)==null?void 0:te.value,"title",e.token),ae=kt((j=e.args[7].$)==null?void 0:j.value,"logo",e.token),we=kt((Y=e.args[8].$)==null?void 0:Y.value,"favicon",e.token),Ne=kt((le=e.args[9].$)==null?void 0:le.value,"version",e.token);return n.registerDocumentation({name:de,root:ye,outputDir:he,format:Be,includePrivate:qe,includeDeps:Pe,title:ie,logo:ae,favicon:we,version:Ne}),Nr(e,t)}if(b(e,F.__yo_build_step_depend_on)){if(e.args.length<3)throw m({token:e.token,errorMessage:`__yo_build_step_depend_on expects 3 arguments (step_name, dep_name, dep_kind), got ${e.args.length}`});let de=kt((Z=e.args[0].$)==null?void 0:Z.value,"step_name",e.token),ye=kt((ce=e.args[1].$)==null?void 0:ce.value,"dep_name",e.token),he=(Te=e.args[2].$)==null?void 0:Te.value,Be=ye;return he&&Sn(he)&&he.variantName==="Run"&&(Be=`run:${ye}`),n.addStepDependency(de,Be),Nr(e,t)}if(b(e,F.__yo_build_target_host)){let de=ma();return el(e,t,de.triple)}if(b(e,F.__yo_build_target_parse)){if(e.args.length!==1)throw m({token:e.token,errorMessage:`__yo_build_target_parse expects 1 argument (triple), got ${e.args.length}`});let de=kt((Ie=e.args[0].$)==null?void 0:Ie.value,"triple",e.token),ye=g$(de);return el(e,t,ye.triple)}if(b(e,F.__yo_build_dependency)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_dependency expects at least 2 arguments (name, url), got ${e.args.length}`});let de=kt((ge=e.args[0].$)==null?void 0:ge.value,"name",e.token),ye=kt((be=e.args[1].$)==null?void 0:be.value,"url",e.token),he=e.args.length>2?kt((De=e.args[2].$)==null?void 0:De.value,"ref",e.token):"HEAD",Be=e.args.length>3?kt((ze=e.args[3].$)==null?void 0:ze.value,"path",e.token):"";return n.registerDependency({name:de,url:ye,ref:he,path:Be}),Nr(e,t)}if(b(e,F.__yo_build_path_dependency)){if(e.args.length!==2)throw m({token:e.token,errorMessage:`__yo_build_path_dependency expects 2 arguments (name, path), got ${e.args.length}`});let de=kt((We=e.args[0].$)==null?void 0:We.value,"name",e.token),ye=kt((pe=e.args[1].$)==null?void 0:pe.value,"path",e.token);return n.registerPathDependency({name:de,path:ye}),Nr(e,t)}if(b(e,F.__yo_build_system_library)){if(e.args.length<1)throw m({token:e.token,errorMessage:`__yo_build_system_library expects at least 1 argument (name), got ${e.args.length}`});let de=kt((fe=e.args[0].$)==null?void 0:fe.value,"name",e.token),ye=e.args.length>1?kt(($e=e.args[1].$)==null?void 0:$e.value,"fallback_include",e.token):"",he=e.args.length>2?kt((Le=e.args[2].$)==null?void 0:Le.value,"fallback_lib",e.token):"",Be=e.args.length>3?kt((Me=e.args[3].$)==null?void 0:Me.value,"fallback_link",e.token):"",qe=e.args.length>4?kt((Ze=e.args[4].$)==null?void 0:Ze.value,"defines",e.token).split(/\s+/).filter(Boolean):[];return n.registerSystemLibrary({name:de,fallbackInclude:ye,fallbackLib:he,fallbackLink:Be,defines:qe}),Nr(e,t)}if(b(e,F.__yo_build_option)){if(e.args.length<3)throw m({token:e.token,errorMessage:`__yo_build_option expects 3 arguments (name, description, default), got ${e.args.length}`});let de=kt(($t=e.args[0].$)==null?void 0:$t.value,"name",e.token),ye=kt((It=e.args[1].$)==null?void 0:It.value,"description",e.token),he=kt((jt=e.args[2].$)==null?void 0:jt.value,"default",e.token);n.declaredOptions.set(de,{description:ye,defaultValue:he});let Be=n.cliOptions.get(de)??he;return el(e,t,Be)}if(b(e,F.__yo_build_dep_artifact)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_dep_artifact expects 2 arguments (dependency_name, artifact_name), got ${e.args.length}`});let de=kt((st=e.args[0].$)==null?void 0:st.value,"dependency_name",e.token),ye=kt((Ct=e.args[1].$)==null?void 0:Ct.value,"artifact_name",e.token);return n.registerDependencyArtifact({dependencyName:de,artifactName:ye}),Nr(e,t)}if(b(e,F.__yo_build_module)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_module expects 2 arguments (name, root), got ${e.args.length}`});let de=kt((rn=e.args[0].$)==null?void 0:rn.value,"name",e.token),ye=kt((Bt=e.args[1].$)==null?void 0:Bt.value,"root",e.token);return n.registerModule({name:de,root:ye,linkedSystemLibraries:[]}),Nr(e,t)}if(b(e,F.__yo_build_module_link)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_module_link expects 2 arguments (module_name, system_library_name), got ${e.args.length}`});let de=kt((gt=e.args[0].$)==null?void 0:gt.value,"module_name",e.token),ye=kt((ut=e.args[1].$)==null?void 0:ut.value,"system_library_name",e.token);return n.registerModuleLink(de,ye),Nr(e,t)}if(b(e,F.__yo_build_add_import)){if(e.args.length<4)throw m({token:e.token,errorMessage:`__yo_build_add_import expects 4 arguments (artifact_name, import_name, module_name, dependency_name), got ${e.args.length}`});let de=kt((Nt=e.args[0].$)==null?void 0:Nt.value,"artifact_name",e.token),ye=kt((Yt=e.args[1].$)==null?void 0:Yt.value,"import_name",e.token),he=kt((wt=e.args[2].$)==null?void 0:wt.value,"module_name",e.token),Be=kt((Ft=e.args[3].$)==null?void 0:Ft.value,"dependency_name",e.token),qe=n.findArtifact(de);if(qe){let Pe=qe.importedModules.find(ie=>ie.importName===ye);if(Pe)throw m({token:e.token,errorMessage:`Duplicate import name "${ye}" on artifact "${de}". Already imported from module "${Pe.moduleName}".`})}return n.registerImportedModule(de,{importName:ye,moduleName:he,dependencyName:Be}),Nr(e,t)}if(b(e,F.__yo_build_add_cflags)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_add_cflags expects 2 arguments (artifact_name, flags), got ${e.args.length}`});let de=kt((ee=e.args[0].$)==null?void 0:ee.value,"artifact_name",e.token),ye=kt((W=e.args[1].$)==null?void 0:W.value,"flags",e.token),he=n.findArtifact(de);if(he){let Be=ye.trim().split(/\s+/).filter(qe=>qe.length>0);he.cFlags.push(...Be)}return Nr(e,t)}if(b(e,F.__yo_build_dep_module)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_dep_module expects 2 arguments (dependency_name, module_name), got ${e.args.length}`});let de=kt((oe=e.args[0].$)==null?void 0:oe.value,"dependency_name",e.token),ye=kt((me=e.args[1].$)==null?void 0:me.value,"module_name",e.token);return el(e,t,`${de}\0${ye}`)}throw m({token:e.token,errorMessage:`Unknown build function: ${e.func.token.value}`})}var no=Yn(require("fs")),Ja=Yn(require("path")),A$=Yn(require("crypto")),Y0=require("child_process");var _u=Yn(require("fs")),C$=Yn(require("path"));function j0(e){let t=[],n=e.split(`
219
+ ${A(e)}`});if(mt(e.$.type)){if(un(e.$.env.modulePath,n)&&!(Q(e)&&e.token.value!==n)){let a=ve(e.$.env,n);if(a.length>0){let s=a[a.length-1];if(s.isOwningTheRcValue){s.consumedAtToken||(e.$.env=zt(e.$.env,s,{...s,consumedAtToken:e.token}));return}}}let i=Qt(`${F.___dup[0]}(${n})`),o=U({expr:i,env:e.$.env,context:{...t,expectedType:void 0}});if((r=o.$)!=null&&r.variableName){let a=ve(o.$.env,o.$.variableName);if(a.length>0){let s=a[a.length-1];s.consumedAtToken||(o.$.env=zt(o.$.env,s,{...s,consumedAtToken:o.token}))}}e.$.deferredDupExpressions=[o],e.$.env=o.$.env}}function Xa(e,t){var o;let n=(o=e.$)==null?void 0:o.variableName;if(!n)return;let r=ve(t,n);if(r.length===0)throw _n([{token:e.token,errorMessage:`Variable "${n}" is not defined.`}]);let i=r[r.length-1];if(i.consumedAtToken){let a=`use of moved value: \`${n}\``;throw _n([{token:e.token,errorMessage:a},{token:i.consumedAtToken,errorMessage:"value moved here"}])}}var d$=Yn(require("fs"));function U0(e){switch(e){case"x86_64":case"aarch64":return 64;case"x86":case"arm":case"wasm32":return 32}}var u$={darwin:"macos",linux:"linux",win32:"windows",freebsd:"freebsd"},c$={x64:"x86_64",arm64:"aarch64",ia32:"x86",arm:"arm"},o_;function z0(){if(o_)return o_;let e=u$[process.platform];if(!e)throw new Error(`Unsupported host platform: ${process.platform}. Supported: ${Object.keys(u$).join(", ")}`);let t=c$[process.arch];if(!t)throw new Error(`Unsupported host architecture: ${process.arch}. Supported: ${Object.keys(c$).join(", ")}`);return o_={platform:e,arch:t},o_}function B0(){if(process.platform!=="linux")return"gnu";try{if(d$.readdirSync("/lib").some(n=>n.startsWith("ld-musl-")))return"musl"}catch{}return"gnu"}function m$(e){switch(e){case"linux":return B0();case"windows":return"msvc";case"wasi":case"emscripten":return"wasm";case"macos":case"freebsd":return}}function q0(e,t,n){return n?`${e}-${t}-${n}`:`${e}-${t}`}function y$(e,t,n){return{arch:e,os:t,abi:n,pointerSizeBits:U0(e),triple:q0(e,t,n)}}function ma(){let e=z0(),t=m$(e.platform);return y$(e.arch,e.platform,t)}var f$=new Set(["x86_64","aarch64","x86","arm","wasm32"]),_$=new Set(["linux","macos","windows","freebsd","wasi","emscripten"]),p$=new Set(["gnu","musl","msvc","none","wasm"]);function g$(e){let n=(e.startsWith("wasm-")?`wasm32-${e.slice(5)}`:e).split("-");if(n.length<2||n.length>3)throw new Error(`Invalid target triple "${e}". Expected format: <arch>-<os> or <arch>-<os>-<abi>. Example: x86_64-linux-gnu`);let r=n[0],i=n[1],o=n[2];if(!f$.has(r))throw new Error(`Unknown architecture "${r}" in target triple "${e}". Supported: ${[...f$].join(", ")}`);if(!_$.has(i))throw new Error(`Unknown OS "${i}" in target triple "${e}". Supported: ${[..._$].join(", ")}`);let a=r,s=i,l;if(o!==void 0)if(o==="none")l=void 0;else if(p$.has(o))l=o;else throw new Error(`Unknown ABI "${o}" in target triple "${e}". Supported: ${[...p$].join(", ")}`);else l=m$(s);return y$(a,s,l)}var vm;function cu(){return vm||(vm=ma()),vm}function Jn(e){return e.os==="windows"}function Qa(e){return e.os==="linux"}function Pi(e){return e.os==="macos"}function Ui(e){return e.arch==="wasm32"||e.os==="wasi"||e.os==="emscripten"}function h$(e){return e.os==="wasi"}var fu=class{constructor(){this.artifacts=[];this.testSuites=[];this.runSteps=[];this.steps=[];this.dependencies=[];this.pathDependencies=[];this.systemLibraries=[];this.dependencyArtifacts=[];this.modules=[];this.docConfigs=[];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)}findDocumentation(t){return this.docConfigs.find(n=>n.name===t)}registerDocumentation(t){this.docConfigs.push(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.findDocumentation(t);if(o)return{kind:"doc",value:o};let a=this.findStep(t);if(a)return{kind:"step",value:a}}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=[]}},ya,G0,Tm=new Map;function v$(){return G0}function T$(){Tm.clear()}function E$(e){return Tm.get(e)}function Em(e,t){Tm.set(e,t)}function tl(){return ya||(ya=new fu),ya}function $m(){ya&&ya.clear(),ya=void 0}function bm(e){let t=ya;return ya=e,t}function kt(e,t,n){if(!pt(e))throw m({token:n,errorMessage:`Build function: expected comptime_string for "${t}", got ${e?"non-string":"undefined"}`});return e.value}function Nr(e,t){return e.$={env:t,type:Ci(),value:ke,pathCollection:[]},e}function el(e,t,n){return e.$={env:t,type:Wn(),value:Gn(n),pathCollection:[]},e}function W0(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||Ge(r))return!0}return!1}function $$({expr:e,env:t}){var r,i,o,a,s,l,u,c,f,_,p,d,v,y,h,g,T,E,$,k,C,w,I,L,x,V,M,q,P,R,te,j,Y,le,Z,ce,Te,Se,ge,be,De,ze,We,pe,fe,$e,Le,Me,Ze,$t,It,jt,st,Ct,rn,Bt,gt,ut,Nt,Yt,wt,Ft,ee,W,oe,me;if(W0(e)){if(b(e,F.__yo_build_target_host)){let de=ma();return el(e,t,de.triple)}return b(e,F.__yo_build_option)?el(e,t,""):Nr(e,t)}let n=tl();if(b(e,F.__yo_build_executable)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_executable expects at least 2 arguments (name, root), got ${e.args.length}`});let de=kt((r=e.args[0].$)==null?void 0:r.value,"name",e.token),ye=kt((i=e.args[1].$)==null?void 0:i.value,"root",e.token),he=e.args.length>2?kt((o=e.args[2].$)==null?void 0:o.value,"target",e.token):ma().triple,Be=e.args.length>3?kt((a=e.args[3].$)==null?void 0:a.value,"optimize",e.token):"debug",qe=e.args.length>4?kt((s=e.args[4].$)==null?void 0:s.value,"allocator",e.token):"mimalloc",Pe=e.args.length>5?kt((l=e.args[5].$)==null?void 0:l.value,"sanitize",e.token):"none";return n.registerExecutable({name:de,root:ye,target:he,optimize:Be,allocator:qe,sanitize:Pe,linkLibraries:[],includePaths:[],libraryPaths:[],cSources:[],cFlags:[],defines:[],strip:!1,staticLink:!1,runtimeFiles:[],linkedArtifacts:[],linkedSystemLibraries:[],importedModules:[]}),Nr(e,t)}if(b(e,F.__yo_build_static_library)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_static_library expects at least 2 arguments (name, root), got ${e.args.length}`});let de=kt((u=e.args[0].$)==null?void 0:u.value,"name",e.token),ye=kt((c=e.args[1].$)==null?void 0:c.value,"root",e.token),he=e.args.length>2?kt((f=e.args[2].$)==null?void 0:f.value,"target",e.token):ma().triple,Be=e.args.length>3?kt((_=e.args[3].$)==null?void 0:_.value,"optimize",e.token):"debug";return n.registerStaticLibrary({name:de,root:ye,target:he,optimize:Be,allocator:"libc",sanitize:"none",linkLibraries:[],includePaths:[],libraryPaths:[],cSources:[],cFlags:[],defines:[],strip:!1,staticLink:!1,runtimeFiles:[],linkedArtifacts:[],linkedSystemLibraries:[],importedModules:[]}),Nr(e,t)}if(b(e,F.__yo_build_shared_library)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_shared_library expects at least 2 arguments (name, root), got ${e.args.length}`});let de=kt((p=e.args[0].$)==null?void 0:p.value,"name",e.token),ye=kt((d=e.args[1].$)==null?void 0:d.value,"root",e.token),he=e.args.length>2?kt((v=e.args[2].$)==null?void 0:v.value,"target",e.token):ma().triple,Be=e.args.length>3?kt((y=e.args[3].$)==null?void 0:y.value,"optimize",e.token):"debug";return n.registerSharedLibrary({name:de,root:ye,target:he,optimize:Be,allocator:"libc",sanitize:"none",linkLibraries:[],includePaths:[],libraryPaths:[],cSources:[],cFlags:[],defines:[],strip:!1,staticLink:!1,runtimeFiles:[],linkedArtifacts:[],linkedSystemLibraries:[],importedModules:[]}),Nr(e,t)}if(b(e,F.__yo_build_link)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_link expects 2 arguments (artifact_name, library_name), got ${e.args.length}`});let de=kt((h=e.args[0].$)==null?void 0:h.value,"artifact_name",e.token),ye=kt((g=e.args[1].$)==null?void 0:g.value,"library_name",e.token);if(n.findSystemLibrary(ye)){let he=n.findArtifact(de);he&&(he.linkedSystemLibraries.includes(ye)||he.linkedSystemLibraries.push(ye))}else n.registerLink(de,ye);return Nr(e,t)}if(b(e,F.__yo_build_link_system_library)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_link_system_library expects 2 arguments (artifact_name, system_lib_name), got ${e.args.length}`});let de=kt((T=e.args[0].$)==null?void 0:T.value,"artifact_name",e.token),ye=kt((E=e.args[1].$)==null?void 0:E.value,"system_lib_name",e.token),he=n.findArtifact(de);return he&&(he.linkedSystemLibraries.includes(ye)||he.linkedSystemLibraries.push(ye)),Nr(e,t)}if(b(e,F.__yo_build_test)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_test expects at least 2 arguments (name, root), got ${e.args.length}`});let de=kt(($=e.args[0].$)==null?void 0:$.value,"name",e.token),ye=kt((k=e.args[1].$)==null?void 0:k.value,"root",e.token),he=e.args.length>2?kt((C=e.args[2].$)==null?void 0:C.value,"target",e.token):ma().triple;return n.registerTest({name:de,root:ye,target:he,verbose:!1,bail:!1,parallel:1}),Nr(e,t)}if(b(e,F.__yo_build_run)){if(e.args.length<1)throw m({token:e.token,errorMessage:`__yo_build_run expects at least 1 argument (artifact_name), got ${e.args.length}`});let de=kt((w=e.args[0].$)==null?void 0:w.value,"artifact_name",e.token);return n.registerRun(de,[]),Nr(e,t)}if(b(e,F.__yo_build_step)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_step expects 2 arguments (name, description), got ${e.args.length}`});let de=kt((I=e.args[0].$)==null?void 0:I.value,"name",e.token),ye=kt((L=e.args[1].$)==null?void 0:L.value,"description",e.token);return n.registerStep(de,ye),Nr(e,t)}if(b(e,F.__yo_build_doc)){if(e.args.length<10)throw m({token:e.token,errorMessage:`__yo_build_doc expects 10 arguments, got ${e.args.length}`});let de=kt((x=e.args[0].$)==null?void 0:x.value,"name",e.token),ye=kt((V=e.args[1].$)==null?void 0:V.value,"root",e.token),he=kt((M=e.args[2].$)==null?void 0:M.value,"output",e.token),Be=kt((q=e.args[3].$)==null?void 0:q.value,"format",e.token),qe=!!((P=e.args[4].$)!=null&&P.value),Pe=!!((R=e.args[5].$)!=null&&R.value),ie=kt((te=e.args[6].$)==null?void 0:te.value,"title",e.token),ae=kt((j=e.args[7].$)==null?void 0:j.value,"logo",e.token),we=kt((Y=e.args[8].$)==null?void 0:Y.value,"favicon",e.token),Ne=kt((le=e.args[9].$)==null?void 0:le.value,"version",e.token);return n.registerDocumentation({name:de,root:ye,outputDir:he,format:Be,includePrivate:qe,includeDeps:Pe,title:ie,logo:ae,favicon:we,version:Ne}),Nr(e,t)}if(b(e,F.__yo_build_step_depend_on)){if(e.args.length<3)throw m({token:e.token,errorMessage:`__yo_build_step_depend_on expects 3 arguments (step_name, dep_name, dep_kind), got ${e.args.length}`});let de=kt((Z=e.args[0].$)==null?void 0:Z.value,"step_name",e.token),ye=kt((ce=e.args[1].$)==null?void 0:ce.value,"dep_name",e.token),he=(Te=e.args[2].$)==null?void 0:Te.value,Be=ye;return he&&Sn(he)&&he.variantName==="Run"&&(Be=`run:${ye}`),n.addStepDependency(de,Be),Nr(e,t)}if(b(e,F.__yo_build_target_host)){let de=ma();return el(e,t,de.triple)}if(b(e,F.__yo_build_target_parse)){if(e.args.length!==1)throw m({token:e.token,errorMessage:`__yo_build_target_parse expects 1 argument (triple), got ${e.args.length}`});let de=kt((Se=e.args[0].$)==null?void 0:Se.value,"triple",e.token),ye=g$(de);return el(e,t,ye.triple)}if(b(e,F.__yo_build_dependency)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_dependency expects at least 2 arguments (name, url), got ${e.args.length}`});let de=kt((ge=e.args[0].$)==null?void 0:ge.value,"name",e.token),ye=kt((be=e.args[1].$)==null?void 0:be.value,"url",e.token),he=e.args.length>2?kt((De=e.args[2].$)==null?void 0:De.value,"ref",e.token):"HEAD",Be=e.args.length>3?kt((ze=e.args[3].$)==null?void 0:ze.value,"path",e.token):"";return n.registerDependency({name:de,url:ye,ref:he,path:Be}),Nr(e,t)}if(b(e,F.__yo_build_path_dependency)){if(e.args.length!==2)throw m({token:e.token,errorMessage:`__yo_build_path_dependency expects 2 arguments (name, path), got ${e.args.length}`});let de=kt((We=e.args[0].$)==null?void 0:We.value,"name",e.token),ye=kt((pe=e.args[1].$)==null?void 0:pe.value,"path",e.token);return n.registerPathDependency({name:de,path:ye}),Nr(e,t)}if(b(e,F.__yo_build_system_library)){if(e.args.length<1)throw m({token:e.token,errorMessage:`__yo_build_system_library expects at least 1 argument (name), got ${e.args.length}`});let de=kt((fe=e.args[0].$)==null?void 0:fe.value,"name",e.token),ye=e.args.length>1?kt(($e=e.args[1].$)==null?void 0:$e.value,"fallback_include",e.token):"",he=e.args.length>2?kt((Le=e.args[2].$)==null?void 0:Le.value,"fallback_lib",e.token):"",Be=e.args.length>3?kt((Me=e.args[3].$)==null?void 0:Me.value,"fallback_link",e.token):"",qe=e.args.length>4?kt((Ze=e.args[4].$)==null?void 0:Ze.value,"defines",e.token).split(/\s+/).filter(Boolean):[];return n.registerSystemLibrary({name:de,fallbackInclude:ye,fallbackLib:he,fallbackLink:Be,defines:qe}),Nr(e,t)}if(b(e,F.__yo_build_option)){if(e.args.length<3)throw m({token:e.token,errorMessage:`__yo_build_option expects 3 arguments (name, description, default), got ${e.args.length}`});let de=kt(($t=e.args[0].$)==null?void 0:$t.value,"name",e.token),ye=kt((It=e.args[1].$)==null?void 0:It.value,"description",e.token),he=kt((jt=e.args[2].$)==null?void 0:jt.value,"default",e.token);n.declaredOptions.set(de,{description:ye,defaultValue:he});let Be=n.cliOptions.get(de)??he;return el(e,t,Be)}if(b(e,F.__yo_build_dep_artifact)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_dep_artifact expects 2 arguments (dependency_name, artifact_name), got ${e.args.length}`});let de=kt((st=e.args[0].$)==null?void 0:st.value,"dependency_name",e.token),ye=kt((Ct=e.args[1].$)==null?void 0:Ct.value,"artifact_name",e.token);return n.registerDependencyArtifact({dependencyName:de,artifactName:ye}),Nr(e,t)}if(b(e,F.__yo_build_module)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_module expects 2 arguments (name, root), got ${e.args.length}`});let de=kt((rn=e.args[0].$)==null?void 0:rn.value,"name",e.token),ye=kt((Bt=e.args[1].$)==null?void 0:Bt.value,"root",e.token);return n.registerModule({name:de,root:ye,linkedSystemLibraries:[]}),Nr(e,t)}if(b(e,F.__yo_build_module_link)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_module_link expects 2 arguments (module_name, system_library_name), got ${e.args.length}`});let de=kt((gt=e.args[0].$)==null?void 0:gt.value,"module_name",e.token),ye=kt((ut=e.args[1].$)==null?void 0:ut.value,"system_library_name",e.token);return n.registerModuleLink(de,ye),Nr(e,t)}if(b(e,F.__yo_build_add_import)){if(e.args.length<4)throw m({token:e.token,errorMessage:`__yo_build_add_import expects 4 arguments (artifact_name, import_name, module_name, dependency_name), got ${e.args.length}`});let de=kt((Nt=e.args[0].$)==null?void 0:Nt.value,"artifact_name",e.token),ye=kt((Yt=e.args[1].$)==null?void 0:Yt.value,"import_name",e.token),he=kt((wt=e.args[2].$)==null?void 0:wt.value,"module_name",e.token),Be=kt((Ft=e.args[3].$)==null?void 0:Ft.value,"dependency_name",e.token),qe=n.findArtifact(de);if(qe){let Pe=qe.importedModules.find(ie=>ie.importName===ye);if(Pe)throw m({token:e.token,errorMessage:`Duplicate import name "${ye}" on artifact "${de}". Already imported from module "${Pe.moduleName}".`})}return n.registerImportedModule(de,{importName:ye,moduleName:he,dependencyName:Be}),Nr(e,t)}if(b(e,F.__yo_build_add_cflags)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_add_cflags expects 2 arguments (artifact_name, flags), got ${e.args.length}`});let de=kt((ee=e.args[0].$)==null?void 0:ee.value,"artifact_name",e.token),ye=kt((W=e.args[1].$)==null?void 0:W.value,"flags",e.token),he=n.findArtifact(de);if(he){let Be=ye.trim().split(/\s+/).filter(qe=>qe.length>0);he.cFlags.push(...Be)}return Nr(e,t)}if(b(e,F.__yo_build_dep_module)){if(e.args.length<2)throw m({token:e.token,errorMessage:`__yo_build_dep_module expects 2 arguments (dependency_name, module_name), got ${e.args.length}`});let de=kt((oe=e.args[0].$)==null?void 0:oe.value,"dependency_name",e.token),ye=kt((me=e.args[1].$)==null?void 0:me.value,"module_name",e.token);return el(e,t,`${de}\0${ye}`)}throw m({token:e.token,errorMessage:`Unknown build function: ${e.func.token.value}`})}var no=Yn(require("fs")),Ja=Yn(require("path")),A$=Yn(require("crypto")),Y0=require("child_process");var _u=Yn(require("fs")),C$=Yn(require("path"));function j0(e){let t=[],n=e.split(`
220
220
  `),r;for(let i of n){let o=i.trim();if(o===""||o.startsWith("#"))continue;if(o==="[[dependencies]]"){r&&r.name&&t.push(b$(r)),r={};continue}if(r===void 0)continue;let a=o.indexOf("=");if(a===-1)continue;let s=o.slice(0,a).trim(),l=o.slice(a+1).trim();switch(l.length>=2&&l.startsWith('"')&&l.endsWith('"')&&(l=l.slice(1,-1)),s){case"name":r.name=l;break;case"url":r.url=l;break;case"ref":r.ref=l;break;case"commit":r.commit=l;break;case"hash":r.hash=l;break}}return r&&r.name&&t.push(b$(r)),{dependencies:t}}function b$(e){return{name:e.name??"",url:e.url??"",ref:e.ref??"HEAD",commit:e.commit??"",hash:e.hash??""}}function k$(e){let t=C$.join(e,"yo.lock");if(!_u.existsSync(t))return{dependencies:[]};let n=_u.readFileSync(t,"utf-8");return j0(n)}function w$(e,t){return e.dependencies.find(n=>n.name===t)}var H0=Yn(require("fs")),Cm=Yn(require("os")),ga=Yn(require("path"));function F$(){let e=process.env.YO_CACHE_DIR;if(e)return e;let t=process.env.XDG_CACHE_HOME;if(t)return ga.join(t,"yo");if(process.platform==="win32"){let n=process.env.LOCALAPPDATA??ga.join(Cm.homedir(),"AppData","Local");return ga.join(n,"yo","cache")}return ga.join(Cm.homedir(),".cache","yo")}function L$(){return ga.join(F$(),"deps")}function I$(){return ga.join(F$(),"versions")}function a_(e){return ga.join(I$(),e)}var SP={...process.env,GIT_TERMINAL_PROMPT:"0"};function K0(e){return L$()}function X0(e){let t=A$.createHash("sha256");return x$(t,e,""),`sha256-${t.digest("hex")}`}function x$(e,t,n){let r=n?Ja.join(t,n):t,i=no.readdirSync(r,{withFileTypes:!0});i.sort((o,a)=>Q0(o.name,a.name));for(let o of i){let a=n?`${n}/${o.name}`:o.name;if(o.isDirectory()){if(o.name.startsWith("."))continue;e.update(`dir:${a}
221
221
  `),x$(e,t,a)}else if(o.isFile()){if(o.name===km)continue;e.update(`file:${a}
222
222
  `);let s=no.readFileSync(Ja.join(t,a));e.update(Z0(s))}}}function Q0(e,t){let n=e.toLowerCase(),r=t.toLowerCase();return n<r?-1:n>r?1:e<t?-1:e>t?1:0}var S$=13,J0=10;function Z0(e){if(!e.includes(S$))return e;let t=[];for(let n=0;n<e.length;n++)e[n]===S$&&n+1<e.length&&e[n+1]===J0||t.push(e[n]);return Buffer.from(t)}var km=".yo-content-hash";function eA(e,t){no.writeFileSync(Ja.join(e,km),t+`
@@ -231,12 +231,12 @@ Run 'yo fetch' to refetch this dependency.`}function s_(e,t,n=""){let r=k$(e),i=
231
231
  `+this.declarations+`
232
232
  `+this.code.trim()}};function N$(e){for(let t in e.types){let{type:n}=e.types[t];n.cInclude&&e.cIncludes.add(n.cInclude)}for(let t in e.externFunctions){let{type:n}=e.externFunctions[t];n.cInclude&&e.cIncludes.add(n.cInclude)}}function D$(e){let t=Jn(e.targetInfo);t?(e.emitter.emitHeaderLine("#ifndef WIN32_LEAN_AND_MEAN"),e.emitter.emitHeaderLine("#define WIN32_LEAN_AND_MEAN"),e.emitter.emitHeaderLine("#endif"),e.emitter.emitHeaderLine("#ifndef _WINSOCKAPI_"),e.emitter.emitHeaderLine("#define _WINSOCKAPI_"),e.emitter.emitHeaderLine("#endif")):(e.emitter.emitHeaderLine("#define _DEFAULT_SOURCE"),e.emitter.emitHeaderLine("#define _GNU_SOURCE // Needed for sched_getcpu() on Linux")),e.emitter.emitHeaderLine("");for(let n of e.cIncludes)e.emitter.emitHeaderLine(`#include ${n}`);t?(e.emitter.emitHeaderLine("#include <windows.h>"),e.emitter.emitHeaderLine("#include <bcrypt.h>"),e.emitter.emitHeaderLine("#include <io.h>"),e.emitter.emitHeaderLine("#include <sys/stat.h>")):(e.emitter.emitHeaderLine("#include <unistd.h>"),e.emitter.emitHeaderLine("#include <sys/stat.h>"),e.emitter.emitHeaderLine("#include <sys/random.h>")),e.emitter.emitHeaderLine(""),e.allocator==="mimalloc"?(e.emitter.emitHeaderLine("// Mimalloc compatibility layer - try mimalloc first, fallback to stdlib"),e.emitter.emitHeaderLine("#ifdef __has_include"),e.emitter.emitHeaderLine(" #if __has_include(<mimalloc.h>)"),e.emitter.emitHeaderLine(" #include <mimalloc.h>"),e.emitter.emitHeaderLine(" #define __yo_malloc mi_malloc"),e.emitter.emitHeaderLine(" #define __yo_calloc mi_calloc"),e.emitter.emitHeaderLine(" #define __yo_realloc mi_realloc"),e.emitter.emitHeaderLine(" #define __yo_free mi_free"),e.emitter.emitHeaderLine(" #define __yo_aligned_alloc mi_aligned_alloc"),e.emitter.emitHeaderLine(" #define __yo_aligned_free mi_free"),e.emitter.emitHeaderLine(" #else"),e.emitter.emitHeaderLine(" #define __yo_malloc malloc"),e.emitter.emitHeaderLine(" #define __yo_calloc calloc"),e.emitter.emitHeaderLine(" #define __yo_realloc realloc"),e.emitter.emitHeaderLine(" #define __yo_free free"),t?(e.emitter.emitHeaderLine(" static inline void* __yo_aligned_alloc(size_t alignment, size_t size) { return _aligned_malloc(size, alignment); }"),e.emitter.emitHeaderLine(" #define __yo_aligned_free _aligned_free")):(e.emitter.emitHeaderLine(" #define __yo_aligned_alloc aligned_alloc"),e.emitter.emitHeaderLine(" #define __yo_aligned_free free")),e.emitter.emitHeaderLine(" #endif"),e.emitter.emitHeaderLine("#else"),e.emitter.emitHeaderLine(" // Fallback for older compilers without __has_include"),e.emitter.emitHeaderLine(" #define __yo_malloc malloc"),e.emitter.emitHeaderLine(" #define __yo_calloc calloc"),e.emitter.emitHeaderLine(" #define __yo_realloc realloc"),e.emitter.emitHeaderLine(" #define __yo_free free"),t?(e.emitter.emitHeaderLine(" static inline void* __yo_aligned_alloc(size_t alignment, size_t size) { return _aligned_malloc(size, alignment); }"),e.emitter.emitHeaderLine(" #define __yo_aligned_free _aligned_free")):(e.emitter.emitHeaderLine(" #define __yo_aligned_alloc aligned_alloc"),e.emitter.emitHeaderLine(" #define __yo_aligned_free free")),e.emitter.emitHeaderLine("#endif")):(e.emitter.emitHeaderLine("// Using libc allocator"),e.emitter.emitHeaderLine("#define __yo_malloc malloc"),e.emitter.emitHeaderLine("#define __yo_calloc calloc"),e.emitter.emitHeaderLine("#define __yo_realloc realloc"),e.emitter.emitHeaderLine("#define __yo_free free"),t?(e.emitter.emitHeaderLine("static inline void* __yo_aligned_alloc(size_t alignment, size_t size) { return _aligned_malloc(size, alignment); }"),e.emitter.emitHeaderLine("#define __yo_aligned_free _aligned_free")):(e.emitter.emitHeaderLine("#define __yo_aligned_alloc aligned_alloc"),e.emitter.emitHeaderLine("#define __yo_aligned_free free"))),e.emitter.emitHeaderLine("")}function Oo(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 gi(e){let{emitter:t,indent:n,resultCode:r,debugLabel:i}=e;r!==void 0&&t.emitLine(`${n}sm->result = ${r};`),i&&t.emitLine(`${n}ASYNC_DEBUG("${i}: Setting state to 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 Za=[...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],V$=new Set(["bool","usize","isize","u8","i8","u16","i16","u32","i32","u64","i64","f32","f64","char","short","ushort","int","uint","long","ulong","longlong","ulonglong","longdouble"]);function Ve(e,t=!1){let n=new Set(["auto","break","case","char","const","continue","default","do","double","else","enum","extern","float","for","goto","if","inline","int","long","register","restrict","return","short","signed","sizeof","static","struct","switch","typedef","union","unsigned","void","volatile","while","_Alignas","_Alignof","_Atomic","_Bool","_Complex","_Generic","_Imaginary","_Noreturn","_Static_assert","_Thread_local","errno","stdin","stdout","stderr","NULL","true","false"]),r=e.replace(/[^a-zA-Z0-9_]/g,i=>`_u${i.charCodeAt(0)}_`);return!t&&n.has(r)&&(r="__yo_c_reserved_"+r),r}function se(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(Qr(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 f=fr(e);if(f)return se(f,t)}let u;switch(e.tag){case"Tuple":u="tuple";break;case"Struct":u="struct";break;case"Union":u="union";break;case"Enum":u="enum";break;default:throw new Error("Unreachable")}let c=(n=t.types[e.id])==null?void 0:n.cName;if(!c)throw new Error(`No C type name found for ${u} ${O(e)} (id=${e.id})`);return(e.tag==="Struct"||e.tag==="Enum")&&Oe(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 ${O(e)}`);return u}case"Array":{let u=e,c=u.childType,f=u.length;if(Mt(f)){let _=se(c,t),p=`Array_${Ve(_)}_${f.value}`;return t.arrayStructTypes.has(p)||t.arrayStructTypes.set(p,{childType:_,length:typeof f.value=="bigint"?Number(f.value):f.value}),p}break}case"Slice":{let u=e,f=`Slice_${Ve(se(u.childType,t))}`;return t.sliceStructTypes.has(f)||t.sliceStructTypes.set(f,{childType:se(u.childType,t)}),f}case"SomeType":{let u=e;if(yt(u)){if((i=u.resolvedConcreteType)!=null&&i.isExtern)return`${se(u.resolvedConcreteType,t)}*`;let c=(o=t.types[u.id])==null?void 0:o.cName;if(c)return`${c}*`;if(u.resolvedConcreteType&&H(u.resolvedConcreteType)&&yt(u.resolvedConcreteType)){let _=u.resolvedConcreteType,p=(a=t.types[_.id])==null?void 0:a.cName;if(p)return`${p}*`}if(u.resolvedConcreteType&&Oe(u.resolvedConcreteType)){let _=u.resolvedConcreteType.id;for(let[p,d]of Object.entries(t.types))if(H(d.type)&&yt(d.type)&&d.type.resolvedConcreteType&&Oe(d.type.resolvedConcreteType)&&d.type.resolvedConcreteType.id===_)return`${d.cName}*`}let f=jn(u);if(f){let _=(s=t.types[f.id])==null?void 0:s.cName;if(_)return`${_}*`}throw new Error(`Impl(Future) type has no registered concrete type. SomeType ID: ${u.id}, FutureModule: ${(f==null?void 0:f.id)??"none"}. Ensure async blocks are properly analyzed and their state machine types are registered.
233
233
  resolvedConcreteType: ${((l=u.resolvedConcreteType)==null?void 0:l.id)??"none"}
234
- registered type IDs: ${Object.keys(t.types).filter(_=>_.startsWith("sometype")).join(", ")}`)}return ur(u)&&u.resolvedConcreteType||u.resolvedConcreteType?se(u.resolvedConcreteType,t):"void*"}case"Ptr":{let c=e.childType;if(Vt(c)){let p=se(c.childType,t),d=`Slice_${Ve(p)}`;return t.sliceStructTypes.has(d)||t.sliceStructTypes.set(d,{childType:p}),`${d}*`}let f=se(c,t);return dn(c)?`${f}*`:Ye(c)&&fr(c)?`${f}*`:`${f}*`}case"Iso":{let u=e,c=u.childType,f=se(c,t),_=f.replace(/\*/g,"").trim(),p=`Iso_${Ve(_)}`;return t.isoTypes||(t.isoTypes=new Map),t.isoTypes.has(p)||t.isoTypes.set(p,{childTypeCName:f,isoType:u}),p}}return`// Unknown type: ${O(e)}`}function fn(e,t,n){let r=Ve(t);return`${se(e,n)} ${r}`}function or(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} (${O(e)})`);return`${r.toUpperCase()}_${t.toUpperCase()}`}function ha(e){return e.type.return.isCompileTimeOnly}function $o(e){let t=e.body,n=null;return S(t)&&b(t,"begin")&&t.args.length===1&&S(t.args[0])&&b(t.args[0],Za)?n=t.args[0].func.token.value:S(t)&&b(t,Za)&&(n=t.func.token.value),n&&F.__yo_as.includes(n)?null:n}function fr(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(et(i)){if(n)return null;n=r}else return null}else return null;return t&&n&&n.fields?n.fields[0].type:null}function ui(e){for(let t of e.variants)if(t.fields&&t.fields.length>0)return!1;return e.variants.length>0}function ot(e,t){if(!t)return Ve(e);let n=ve(t,e);if(n.length>0){let r=n[n.length-1];return Ve(r.name,r.type.isExtern==="c")}return Ve(e)}function l_(e){if(S(e)&&e.args.length>=1){let t=e.args[0];if(t&&Q(t))return t.token.value}if(S(e)&&e.args.length===0&&S(e.func)&&b(e.func,".",2)&&Q(e.func.args[0])&&Q(e.func.args[1])&&e.func.args[1].token.value===F.___dup[0])return e.func.args[0].token.value}function ei(e){if(S(e)&&e.args.length===0&&S(e.func)&&b(e.func,".",2)&&Q(e.func.args[1])&&e.func.args[1].token.value===F.___drop[0]&&Q(e.func.args[0]))return e.func.args[0].token.value;if(!S(e)||!b(e,F.___drop)||e.args.length<1)return;let t=e.args[0];if(!(!t||!Q(t)))return t.token.value}function pu(e){if(e){if(Qn(e))return e;if(S(e)){let t=e;for(let n of t.args){let r=pu(n);if(r)return r}}}}var wm;function M$(e){wm=e}function J(e,t,n){if(!wm)throw new Error("Internal Error: generateExpr function is not set.");return wm(e,t,n)}function Po(e,t,n){let r=H(t)&&t.resolvedConcreteType?t.resolvedConcreteType:t;if(!mt(r))return"";if(ft(r)){let i=r.length;if(!Mt(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=Po(`(${e}).data[i]`,r.childType,n);return a&&o.emitLine(` ${a};`),o.emitLine("}"),""}if(Tt(r)){let i=n.emitter;for(let o=0;o<r.fields.length;o++){let a=r.fields[o].type,s=H(a)&&a.resolvedConcreteType?a.resolvedConcreteType:a;if(mt(s)){let l=Po(`(${e})._${o}`,a,n);l&&i.emitLine(`${l};`)}}return""}if(ht(r))return`__yo_decr_rc((void*)(${e}).data)`;if(uo(r))return`__yo_decr_rc_atomic((void*)(${e}))`;if(dn(r))return`__yo_decr_rc((void*)(${e}))`;if(Vn(r))return`__yo_decr_rc_atomic((void*)(${e}))`;if(Oe(r)||Ye(r)){let i=zi(r,n);if(i)return`${i}(${e})`}return""}function rl(e,t,n){let r=H(t)&&t.resolvedConcreteType?t.resolvedConcreteType:t;if(ft(r)){let i=r.length;if(!Mt(i))return"/* Error: array has non-constant length */";let o=`temp_dup_${xt("")}`,a=`i_${xt("")}`,s=se(r,n),l=n.emitter;l.emitLine(`${s} ${o} = ${e};`),l.emitLine(`for (size_t ${a} = 0; ${a} < ${i.value}; ${a}++) {`);let u=rl(`${o}.data[${a}]`,r.childType,n);return l.emitLine(` ${o}.data[${a}] = ${u};`),l.emitLine("}"),o}if(Tt(r)){let i=n.emitter,o=`temp_dup_tuple_${xt("")}`,a=se(r,n);i.emitLine(`${a} ${o} = ${e};`);for(let s=0;s<r.fields.length;s++){let l=r.fields[s].type,u=H(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(mt(u)){let c=rl(`${o}._${s}`,l,n);i.emitLine(`${o}._${s} = ${c};`)}}return o}if(ht(r))return`((${se(r,n)}){ .data = __yo_incr_rc((void*)(${e}).data), .vtable = (${e}).vtable })`;if(uo(r))return`((${se(r,n)})__yo_incr_rc_atomic((void*)(${e})))`;if(dn(r))return`((${se(r,n)})__yo_incr_rc((void*)(${e})))`;if(Vn(r))return`((${se(r,n)})__yo_incr_rc_atomic((void*)(${e})))`;if(Oe(r)||Ye(r)){let i=Ur(r,n);if(i)return`${i}(${e})`}return e}function zi(e,t){var n;if(Oe(e)||Ye(e)||ht(e)||H(e)||Vn(e)){let r=e.trait.fields.find(i=>i.label===F.___drop[0]);if(r&&r.assignedValue&&Se(r.assignedValue))return(n=t.functions[r.assignedValue.funcId])==null?void 0:n.cName}}function Ur(e,t){var n;if(Oe(e)||Ye(e)||ht(e)||H(e)||Vn(e)){let r=e.trait.fields.find(i=>i.label===F.___dup[0]);if(r&&r.assignedValue&&Se(r.assignedValue))return(n=t.functions[r.assignedValue.funcId])==null?void 0:n.cName}}function wn(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=ei(o);if(s&&n.shortCircuitHandledDropVarNames.has(s)){n.shortCircuitHandledDropVarNames.delete(s);continue}}let a=J(o,t,n);a&&r.emitLine(`${t}${a};`)}}function sn(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=J(o,t,n);a&&r.emitLine(`${t}${a};`)}}}function yr(e,t,n){var r,i,o,a,s,l,u,c;if(Mt(e)){let f=(typeof e.value=="bigint",e.value.toString());return e.tag==="F32"?(f.includes(".")?f:f+".0")+"f":e.tag==="F64"||e.tag==="ComptimeFloat"?f.includes(".")?f:f+".0":e.tag==="U64"||e.tag==="Usize"?f+"ULL":e.tag==="I64"||e.tag==="Isize"?f+"LL":e.tag==="U32"?f+"U":f}else{if(Ut(e))return e.value?"true":"false";if(pt(e)){let f=((r=n==null?void 0:n.$)==null?void 0:r.convertedRuntimeType)||((i=n==null?void 0:n.$)==null?void 0:i.type);if(f&&Qr(f)&&f.fields.length===1){let _=f.fields[0].type;if(Vt(_)){let p=se(f,t),d=JSON.stringify(e.value),v=Buffer.byteLength(e.value,"utf8");return`(${p}){ .data = (uint8_t*)${d}, .length = ${v} }`}}if(f&&Vt(f)){let _=se(f,t),p=JSON.stringify(e.value),d=Buffer.byteLength(e.value,"utf8");return`(${_}){ .data = (uint8_t*)${p}, .length = ${d} }`}if(!f||gn(f)){for(let _ of Object.values(t.types))if(Qr(_.type)&&_.type.fields.length===1&&Vt(_.type.fields[0].type)){let p=JSON.stringify(e.value),d=Buffer.byteLength(e.value,"utf8");return`(${_.cName}){ .data = (uint8_t*)${p}, .length = ${d} }`}}return JSON.stringify(e.value)}else if(Sn(e)){let f=e.type,_=fr(f);if(_){let y=f.variants.find(h=>h.name===e.variantName);if(!y)return`// Error: Variant ${e.variantName} not found in enum`;if(!y.fields||y.fields.length===0)return"NULL";if(y.fields.length===1&&e.fields.length===1)return yr(e.fields[0],t,{$:{type:_,convertedRuntimeType:_}})}if(ui(f))return or(f,e.variantName,t);let d=(o=t.types[f.id])==null?void 0:o.cName;if(!d)return`// Error: No C type name found for enum ${O(f)}`;let v=or(f,e.variantName,t);if(!e.fields||e.fields.length===0)return`(${d}){ .tag = ${v} }`;{let y=f.variants.find(g=>g.name===e.variantName);if(!y||!y.fields)return`// Error: Variant ${e.variantName} not found or has no fields`;let h=e.fields.map((g,T)=>{let E=y.fields[T];if(E&&!Ke(E.type)){let $=Ve(E.label),k=yr(g,t);return`.${$} = ${k}`}return null}).filter(g=>g!==null);return h.length===0?`(${d}){ .tag = ${v} }`:`(${d}){ .tag = ${v}, .data = { .${e.variantName} = { ${h.join(", ")} } } }`}}else if(kr(e)){let f=e.type,_=(a=t.types[f.id])==null?void 0:a.cName;if(!_)return`// Error: No C type name found for tuple ${O(f)}
234
+ registered type IDs: ${Object.keys(t.types).filter(_=>_.startsWith("sometype")).join(", ")}`)}return ur(u)&&u.resolvedConcreteType||u.resolvedConcreteType?se(u.resolvedConcreteType,t):"void*"}case"Ptr":{let c=e.childType;if(Vt(c)){let p=se(c.childType,t),d=`Slice_${Ve(p)}`;return t.sliceStructTypes.has(d)||t.sliceStructTypes.set(d,{childType:p}),`${d}*`}let f=se(c,t);return dn(c)?`${f}*`:Ye(c)&&fr(c)?`${f}*`:`${f}*`}case"Iso":{let u=e,c=u.childType,f=se(c,t),_=f.replace(/\*/g,"").trim(),p=`Iso_${Ve(_)}`;return t.isoTypes||(t.isoTypes=new Map),t.isoTypes.has(p)||t.isoTypes.set(p,{childTypeCName:f,isoType:u}),p}}return`// Unknown type: ${O(e)}`}function fn(e,t,n){let r=Ve(t);return`${se(e,n)} ${r}`}function or(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} (${O(e)})`);return`${r.toUpperCase()}_${t.toUpperCase()}`}function ha(e){return e.type.return.isCompileTimeOnly}function $o(e){let t=e.body,n=null;return S(t)&&b(t,"begin")&&t.args.length===1&&S(t.args[0])&&b(t.args[0],Za)?n=t.args[0].func.token.value:S(t)&&b(t,Za)&&(n=t.func.token.value),n&&F.__yo_as.includes(n)?null:n}function fr(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(et(i)){if(n)return null;n=r}else return null}else return null;return t&&n&&n.fields?n.fields[0].type:null}function ui(e){for(let t of e.variants)if(t.fields&&t.fields.length>0)return!1;return e.variants.length>0}function ot(e,t){if(!t)return Ve(e);let n=ve(t,e);if(n.length>0){let r=n[n.length-1];return Ve(r.name,r.type.isExtern==="c")}return Ve(e)}function l_(e){if(S(e)&&e.args.length>=1){let t=e.args[0];if(t&&Q(t))return t.token.value}if(S(e)&&e.args.length===0&&S(e.func)&&b(e.func,".",2)&&Q(e.func.args[0])&&Q(e.func.args[1])&&e.func.args[1].token.value===F.___dup[0])return e.func.args[0].token.value}function ei(e){if(S(e)&&e.args.length===0&&S(e.func)&&b(e.func,".",2)&&Q(e.func.args[1])&&e.func.args[1].token.value===F.___drop[0]&&Q(e.func.args[0]))return e.func.args[0].token.value;if(!S(e)||!b(e,F.___drop)||e.args.length<1)return;let t=e.args[0];if(!(!t||!Q(t)))return t.token.value}function pu(e){if(e){if(Qn(e))return e;if(S(e)){let t=e;for(let n of t.args){let r=pu(n);if(r)return r}}}}var wm;function M$(e){wm=e}function J(e,t,n){if(!wm)throw new Error("Internal Error: generateExpr function is not set.");return wm(e,t,n)}function Po(e,t,n){let r=H(t)&&t.resolvedConcreteType?t.resolvedConcreteType:t;if(!mt(r))return"";if(ft(r)){let i=r.length;if(!Mt(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=Po(`(${e}).data[i]`,r.childType,n);return a&&o.emitLine(` ${a};`),o.emitLine("}"),""}if(Tt(r)){let i=n.emitter;for(let o=0;o<r.fields.length;o++){let a=r.fields[o].type,s=H(a)&&a.resolvedConcreteType?a.resolvedConcreteType:a;if(mt(s)){let l=Po(`(${e})._${o}`,a,n);l&&i.emitLine(`${l};`)}}return""}if(ht(r))return`__yo_decr_rc((void*)(${e}).data)`;if(uo(r))return`__yo_decr_rc_atomic((void*)(${e}))`;if(dn(r))return`__yo_decr_rc((void*)(${e}))`;if(Vn(r))return`__yo_decr_rc_atomic((void*)(${e}))`;if(Oe(r)||Ye(r)){let i=zi(r,n);if(i)return`${i}(${e})`}return""}function rl(e,t,n){let r=H(t)&&t.resolvedConcreteType?t.resolvedConcreteType:t;if(ft(r)){let i=r.length;if(!Mt(i))return"/* Error: array has non-constant length */";let o=`temp_dup_${xt("")}`,a=`i_${xt("")}`,s=se(r,n),l=n.emitter;l.emitLine(`${s} ${o} = ${e};`),l.emitLine(`for (size_t ${a} = 0; ${a} < ${i.value}; ${a}++) {`);let u=rl(`${o}.data[${a}]`,r.childType,n);return l.emitLine(` ${o}.data[${a}] = ${u};`),l.emitLine("}"),o}if(Tt(r)){let i=n.emitter,o=`temp_dup_tuple_${xt("")}`,a=se(r,n);i.emitLine(`${a} ${o} = ${e};`);for(let s=0;s<r.fields.length;s++){let l=r.fields[s].type,u=H(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(mt(u)){let c=rl(`${o}._${s}`,l,n);i.emitLine(`${o}._${s} = ${c};`)}}return o}if(ht(r))return`((${se(r,n)}){ .data = __yo_incr_rc((void*)(${e}).data), .vtable = (${e}).vtable })`;if(uo(r))return`((${se(r,n)})__yo_incr_rc_atomic((void*)(${e})))`;if(dn(r))return`((${se(r,n)})__yo_incr_rc((void*)(${e})))`;if(Vn(r))return`((${se(r,n)})__yo_incr_rc_atomic((void*)(${e})))`;if(Oe(r)||Ye(r)){let i=Ur(r,n);if(i)return`${i}(${e})`}return e}function zi(e,t){var n;if(Oe(e)||Ye(e)||ht(e)||H(e)||Vn(e)){let r=e.trait.fields.find(i=>i.label===F.___drop[0]);if(r&&r.assignedValue&&Ie(r.assignedValue))return(n=t.functions[r.assignedValue.funcId])==null?void 0:n.cName}}function Ur(e,t){var n;if(Oe(e)||Ye(e)||ht(e)||H(e)||Vn(e)){let r=e.trait.fields.find(i=>i.label===F.___dup[0]);if(r&&r.assignedValue&&Ie(r.assignedValue))return(n=t.functions[r.assignedValue.funcId])==null?void 0:n.cName}}function wn(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=ei(o);if(s&&n.shortCircuitHandledDropVarNames.has(s)){n.shortCircuitHandledDropVarNames.delete(s);continue}}let a=J(o,t,n);a&&r.emitLine(`${t}${a};`)}}function sn(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=J(o,t,n);a&&r.emitLine(`${t}${a};`)}}}function yr(e,t,n){var r,i,o,a,s,l,u,c;if(Mt(e)){let f=(typeof e.value=="bigint",e.value.toString());return e.tag==="F32"?(f.includes(".")?f:f+".0")+"f":e.tag==="F64"||e.tag==="ComptimeFloat"?f.includes(".")?f:f+".0":e.tag==="U64"||e.tag==="Usize"?f+"ULL":e.tag==="I64"||e.tag==="Isize"?f+"LL":e.tag==="U32"?f+"U":f}else{if(Ut(e))return e.value?"true":"false";if(pt(e)){let f=((r=n==null?void 0:n.$)==null?void 0:r.convertedRuntimeType)||((i=n==null?void 0:n.$)==null?void 0:i.type);if(f&&Qr(f)&&f.fields.length===1){let _=f.fields[0].type;if(Vt(_)){let p=se(f,t),d=JSON.stringify(e.value),v=Buffer.byteLength(e.value,"utf8");return`(${p}){ .data = (uint8_t*)${d}, .length = ${v} }`}}if(f&&Vt(f)){let _=se(f,t),p=JSON.stringify(e.value),d=Buffer.byteLength(e.value,"utf8");return`(${_}){ .data = (uint8_t*)${p}, .length = ${d} }`}if(!f||gn(f)){for(let _ of Object.values(t.types))if(Qr(_.type)&&_.type.fields.length===1&&Vt(_.type.fields[0].type)){let p=JSON.stringify(e.value),d=Buffer.byteLength(e.value,"utf8");return`(${_.cName}){ .data = (uint8_t*)${p}, .length = ${d} }`}}return JSON.stringify(e.value)}else if(Sn(e)){let f=e.type,_=fr(f);if(_){let y=f.variants.find(h=>h.name===e.variantName);if(!y)return`// Error: Variant ${e.variantName} not found in enum`;if(!y.fields||y.fields.length===0)return"NULL";if(y.fields.length===1&&e.fields.length===1)return yr(e.fields[0],t,{$:{type:_,convertedRuntimeType:_}})}if(ui(f))return or(f,e.variantName,t);let d=(o=t.types[f.id])==null?void 0:o.cName;if(!d)return`// Error: No C type name found for enum ${O(f)}`;let v=or(f,e.variantName,t);if(!e.fields||e.fields.length===0)return`(${d}){ .tag = ${v} }`;{let y=f.variants.find(g=>g.name===e.variantName);if(!y||!y.fields)return`// Error: Variant ${e.variantName} not found or has no fields`;let h=e.fields.map((g,T)=>{let E=y.fields[T];if(E&&!Ke(E.type)){let $=Ve(E.label),k=yr(g,t);return`.${$} = ${k}`}return null}).filter(g=>g!==null);return h.length===0?`(${d}){ .tag = ${v} }`:`(${d}){ .tag = ${v}, .data = { .${e.variantName} = { ${h.join(", ")} } } }`}}else if(kr(e)){let f=e.type,_=(a=t.types[f.id])==null?void 0:a.cName;if(!_)return`// Error: No C type name found for tuple ${O(f)}
235
235
  `;let p=e.fields.map((d,v)=>{let y=yr(d,t);return`._${v} = ${y}`});return`(${_}){ ${p.join(", ")} }`}else if(qn(e)){let f=e.type;if(f&&Oe(f)){let _=(s=t.types[f.id])==null?void 0:s.cName;if(!_)return`// Error: No C type name found for struct ${O(f)}
236
- `;if(f.isNewtype&&f.fields.length===1&&e.fields.length===1){let p=yr(e.fields[0],t);return`((${_})(${p}))`}if(f.isReferenceSemantics){let p=e.fields.map(v=>yr(v,t));return`${`__yo_new_${_}`}(${p.join(", ")})`}else{let p=e.fields.map((d,v)=>{let y=d,h=Tt(f)?`_${v}`:Ve(f.fields[v].label),g=yr(y,t);return`.${h} = ${g}`});return`(${_}){ ${p.join(", ")} }`}}}else if(qr(e)){let f=e.type,_=se(f,t),p=e.elements.map(d=>yr(d,t));return`(${_}){ .data = { ${p.join(", ")} } }`}else if(Se(e)){let f=(l=t.functions[e.funcId])==null?void 0:l.cName;return f||`// Error: No C function name found for function value with ID ${e.funcId}
237
- `}else if(X(e)){let f=e.value;if(f)return t.types[f.id]?t.types[f.id].cName:`/* Error: No C type name found for type ${O(f)} */`}else if(bi(e)){let f=e.targetValue[0];if(f){let _=((u=n==null?void 0:n.$)==null?void 0:u.convertedRuntimeType)||((c=n==null?void 0:n.$)==null?void 0:c.type);if(_&&et(_)){let p=_.childType,d=yr(f,t,{$:{type:p,convertedRuntimeType:p}});if(d&&!d.startsWith("/*")&&!d.startsWith("//"))return`(&${d})`}}return`/* Error: Cannot generate pointer value ${bt(e)} */`}}return`/* skip generating: ${bt(e)} */`}function il(e,t,n){if(e===t)return!0;if(e.tag==="FnCall"){if(n&&n(e))return!1;if(il(e.func,t,n))return!0;for(let r of e.args)if(il(r,t,n))return!0}return!1}function iA(e,t,n){for(let r=0;r<t.length;r++)if(il(e,t[r].expr,n))return r;return-1}function R$(e,t,n){let r=[],i=n==null?void 0:n.shouldSkipBody;if(e.tag!=="FnCall"||!b(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=iA(l,t,i),c=(n==null?void 0:n.handleReturnStatements)&&(Tn(l,"return")||b(l,"return"));if(u!==-1){if(s.push(l),a.push(s),s=[],n!=null&&n.handleSequentialSuspensions)for(let f=u+1;f<t.length&&il(l,t[f].expr,i);f++)a.push([])}else if(c){s.push(l),a.push(s),s=[];break}else s.push(l)}s.length>0&&a.push(s);for(let l=0;l<a.length;l++){let u=a[l],c=l<t.length?t[l]:null;r.push({stateNumber:l,expressions:u,suspensionPoint:c})}return r}function Lm(e,t){let r=R$(e,t,{shouldSkipBody:Qn,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 oA(e,t){return il(e,t,Qn)}function O$(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&&oA(a,e.awaitPoint.expr),u=e.awaitPoint&&a.tag==="FnCall"&&(b(a,B.while)||b(a,B.cond)||b(a,B.match))&&Fr(a);if((l||u)&&e.awaitPoint)ll(a,e.awaitPoint,e.stateNumber,t,n);else if(s&&r){let c=J(a,t,n);c&&(i.emitLine(`${t}// Store final expression result`),i.emitLine(`${t}sm->result = ${c};`))}else{let c=J(a,t,n);!c||!a.$||un(a.$.env.modulePath,c)||i.emitLine(`${t}${c};`)}}}function ll(e,t,n,r,i){var a,s;let o=i.emitter;if(e.tag==="FnCall"&&Or(e)){let l=e.args[0];if(!l){o.emitLine(`${r}// Error: await without argument`);return}if(t.futureVariableId===void 0){let u=J(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"&&b(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"&&Or(u)){let c=u.args[0];if(!c){o.emitLine(`${r}// Error: await without argument`);return}let f=(a=l.token)==null?void 0:a.value;if(!f||!l.$){o.emitLine(`${r}// Error: Invalid variable name`);return}if(t.futureVariableId===void 0){let _=J(c,r,i);o.emitLine(`${r}// Store Future for await (variable: ${f})`),o.emitLine(`${r}sm->await_future_${t.index} = ${_};`)}else o.emitLine(`${r}// Store Future for await (variable: ${f}) - future already in state machine`);return}if(u.tag==="FnCall"&&b(u,B.cond)){let c;if(l.tag==="Atom"&&l.token.type==="identifier"&&l.$){let f=l.token.value,_=ve(l.$.env,f);_.length>0&&(c=_[_.length-1].id)}du(u,t,r,i,c);return}if(u.tag==="FnCall"&&b(u,B.match)){let c;if(l.tag==="Atom"&&l.token.type==="identifier"&&l.$){let f=l.token.value,_=ve(l.$.env,f);_.length>0&&(c=_[_.length-1].id)}mu(u,t,r,i,c);return}}if(e.tag==="FnCall"&&b(e,"=")){let l=e.args[0],u=e.args[1];if(l&&u){if(u.tag==="FnCall"&&b(u,B.cond)){let c=J(l,r,i);du(u,t,r,i,void 0,c||void 0);return}if(u.tag==="FnCall"&&b(u,B.match)){let c=J(l,r,i);mu(u,t,r,i,void 0,c||void 0);return}}}if(e.tag==="FnCall"&&b(e,B.cond)){du(e,t,r,i);return}if(e.tag==="FnCall"&&b(e,B.match)){mu(e,t,r,i);return}if(e.tag==="FnCall"&&b(e,B.while)){Im(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 du(e,t,n,r,i,o){var y,h,g,T,E,$,k,C,w,I,L,x,V,M,q,P;let a=r.emitter;if(e.tag!=="FnCall"||!b(e,B.cond)){a.emitLine(`${n}// Error: Expected cond expression`);return}let s=e.args;if(s.length===0){a.emitLine(`${n}// Error: cond must have at least one branch`);return}let l=[],u=-1;for(let R=0;R<s.length;R++){let te=s[R];if(te.tag==="FnCall"&&b(te,"=>")){let j=te.args[0];if(j&&!(Ut((y=j.$)==null?void 0:y.value)&&j.$.value.value===!1)){u=R;break}}}let c=!1;if(u>=0){let R=s[u];if(R.tag==="FnCall"&&b(R,"=>")){let te=R.args[0];te&&Ut((h=te.$)==null?void 0:h.value)&&te.$.value.value===!0&&(c=!0)}}if(c&&u>=0){let R=s[u],te=S(R)?R.args[1]:void 0;if(te)if(va(te)){let Z=sl(te,t,n,r),ce=(g=r.asyncWhileLoopInfo)==null?void 0:g.get(t.index);if(ce&&Z.length>0){let Te=(T=r.asyncCondBranchInfo)==null?void 0:T.get(t.index),Ie=(Te==null?void 0:Te.branches.some(ge=>ge.hasAwait&&ge.remainingExprs&&ge.remainingExprs.length>0))??!1;ce.condBranchPostWhileExprs={branchIndex:u,condBranchFieldIndex:t.index,exprs:Z,deferredDropExpressions:(E=te.$)==null?void 0:E.deferredDropExpressions,skipCondBranchCheck:Ie},l.push({index:u,value:te,hasAwait:!0,remainingExprs:[],deferredDropExpressions:($=te.$)==null?void 0:$.deferredDropExpressions})}else l.push({index:u,value:te,hasAwait:!0,remainingExprs:Z,deferredDropExpressions:(k=te.$)==null?void 0:k.deferredDropExpressions})}else{if(ol(e,te,r,i,o))al(te,n,r);else if(S(te)&&b(te,B.begin)){let Z=te.args;for(let ce=0;ce<Z.length;ce++){let Te=Z[ce],Ie=J(Te,n,r);if(Ie==="break"&&t.isInsideWhile)a.emitLine(`${n}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${n}goto while_loop_${t.index}_end;`);else{let ge=Ie==="break"||Ie==="continue"||(Ie==null?void 0:Ie.includes("return"));Ie&&(ge||Te.$&&!un(Te.$.env.modulePath,Ie))&&a.emitLine(`${n}${Ie};`)}}if((C=te.$)!=null&&C.deferredDropExpressions)for(let ce of te.$.deferredDropExpressions){let Te=J(ce,n,r);Te&&a.emitLine(`${n}${Te};`)}}else{let Z=J(te,n,r);if(Z==="break"&&t.isInsideWhile)a.emitLine(`${n}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${n}goto while_loop_${t.index}_end;`);else{let ce=Z==="break"||Z==="continue"||(Z==null?void 0:Z.includes("return"));Z&&(ce||te.$&&!un(te.$.env.modulePath,Z))&&a.emitLine(`${n}${Z};`)}}l.push({index:u,value:te,hasAwait:!1})}r.asyncCondBranchInfo||(r.asyncCondBranchInfo=new Map);let j=r.asyncCondBranchInfo.get(t.index);((j==null?void 0:j.branches.some(le=>le.hasAwait&&le.remainingExprs&&le.remainingExprs.length>0))??!1)||r.asyncCondBranchInfo.set(t.index,{branches:l,targetVariableId:i,targetAssignmentCode:o});return}let f=!1,_=0,p=n;for(let R=0;R<s.length;R++){let te=s[R];if(te.tag!=="FnCall"||!b(te,"=>")){a.emitLine(`${p}// Error: Expected => pair in cond`);continue}let j=te.args[0],Y=te.args[1];if(!j||!Y){a.emitLine(`${p}// Error: Invalid pair in cond`);continue}if(Ut((w=j.$)==null?void 0:w.value)&&j.$.value.value===!1)continue;f&&(a.emitLine(`${p}else {`),_++,p+=" ");let le=R===s.length-1&&j.tag==="Atom"&&((I=j.token)==null?void 0:I.value)==="true"?null:J(j,p,r);le?a.emitLine(`${p}if (${le}) {`):a.emitLine(`${p}{`),f=!0;let Z=`${p} `;if(va(Y)){a.emitLine(`${Z}sm->cond_branch_${t.index} = ${R};`);let Te=sl(Y,t,Z,r),Ie=(L=r.asyncWhileLoopInfo)==null?void 0:L.get(t.index);if(Ie&&Te.length>0){let ge=(x=r.asyncCondBranchInfo)==null?void 0:x.get(t.index),be=(ge==null?void 0:ge.branches.some(De=>De.hasAwait&&De.remainingExprs&&De.remainingExprs.length>0))??!1;Ie.condBranchPostWhileExprs={branchIndex:R,condBranchFieldIndex:t.index,exprs:Te,deferredDropExpressions:(V=Y.$)==null?void 0:V.deferredDropExpressions,skipCondBranchCheck:be},l.push({index:R,value:Y,hasAwait:!0,remainingExprs:[],deferredDropExpressions:(M=Y.$)==null?void 0:M.deferredDropExpressions})}else l.push({index:R,value:Y,hasAwait:!0,remainingExprs:Te,deferredDropExpressions:(q=Y.$)==null?void 0:q.deferredDropExpressions})}else{if(ol(e,Y,r,i,o))al(Y,Z,r);else if(S(Y)&&b(Y,B.begin)){let Te=Y.args;for(let Ie=0;Ie<Te.length;Ie++){let ge=Te[Ie],be=J(ge,Z,r);if(be==="break"&&t.isInsideWhile)a.emitLine(`${Z}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${Z}goto while_loop_${t.index}_end;`);else{let De=be==="break"||be==="continue"||(be==null?void 0:be.includes("return"));be&&(De||ge.$&&!un(ge.$.env.modulePath,be))&&a.emitLine(`${Z}${be};`)}}if((P=Y.$)!=null&&P.deferredDropExpressions)for(let Ie of Y.$.deferredDropExpressions){let ge=J(Ie,Z,r);ge&&a.emitLine(`${Z}${ge};`)}}else{let Te=J(Y,Z,r);if(Te==="break"&&t.isInsideWhile)a.emitLine(`${Z}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${Z}goto while_loop_${t.index}_end;`);else{let Ie=Te==="break"||Te==="continue"||(Te==null?void 0:Te.includes("return"));Te&&(Ie||Y.$&&!un(Y.$.env.modulePath,Te))&&a.emitLine(`${Z}${Te};`)}}l.push({index:R,value:Y,hasAwait:!1})}a.emitLine(`${p}}`)}for(let R=0;R<_;R++)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(R=>R.hasAwait&&R.remainingExprs&&R.remainingExprs.length>0))??!1)||r.asyncCondBranchInfo.set(t.index,{branches:l,targetVariableId:i,targetAssignmentCode:o})}function ol(e,t,n,r,i){return!r&&!i&&n.asyncBodyReturnExpr!==void 0&&e===n.asyncBodyReturnExpr&&!!n.inAsyncStateMachine&&!P$(t)}function al(e,t,n){var o,a;let r=n.emitter,i=Ke((o=e.$)==null?void 0:o.type);if(S(e)&&b(e,B.begin)){let s=e.args;for(let u=0;u<s.length-1;u++){let c=s[u],f=J(c,t,n);f&&c.$&&!un(c.$.env.modulePath,f)&&r.emitLine(`${t}${f};`)}let l=s[s.length-1];if(l&&!i){let u=J(l,t,n);u&&r.emitLine(`${t}sm->result = ${u};`)}if((a=e.$)!=null&&a.deferredDropExpressions)for(let u of e.$.deferredDropExpressions){let c=J(u,t,n);c&&r.emitLine(`${t}${c};`)}}else if(!i){let s=J(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=J(s,t,n);l&&l.includes("sm->")&&r.emitLine(`${t}${l};`)}Oo({emitter:r,indent:t,resultCode:void 0,debugLabel:n.currentFunctionName}),r.emitLine(`${t}return;`)}function va(e){if(e.tag==="FnCall"&&Or(e))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(va(t))return!0}return!1}function P$(e){if(Tn(e,"return")||b(e,"return"))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(P$(t))return!0}return!1}function mu(e,t,n,r,i,o){var d,v,y,h,g,T;let a=r.emitter;if(e.tag!=="FnCall"||!b(e,B.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=J(s,n,r),c=(d=s.$)==null?void 0:d.type;if(!c){a.emitLine(`${n}// Error: match value has no type`);return}if((v=e.$)!=null&&v.isPrimitiveMatch){sA(e,l,u,t,n,r,i,o);return}if(!Ye(c)){a.emitLine(`${n}// Error: match requires an enum type or primitive type`);return}let f=c,_=(y=r.types[f.id])==null?void 0:y.cName;if(!_){a.emitLine(`${n}// Error: enum type has no C name`);return}let p=fr(f);if(p){let E=-1,$=-1,k;for(let C=0;C<l.length;C++){let w=l[C];if(S(w)&&b(w,"=>",2)){let I=w.args[0];if(I&&S(I)&&b(I,"."))E=C;else if(I&&S(I)){let L=I.func;L&&S(L)&&b(L,".")&&($=C,I.args.length>0&&Q(I.args[0])&&(k=I.args[0].token.value))}}}if(a.emitLine(`${n}if (${u} != NULL) {`),$>=0){let C=l[$];if(!S(C))a.emitLine(`${n} // Error: Expected => in case`);else{let w=C.args[1];if(k){let I=r,L=!1,x;if(I.stateMachineVariables){for(let[V,M]of I.stateMachineVariables)if(M.name===k){L=!0,x=V;break}}if(L&&x){let V=$r(x,"local",I.stateMachineFieldAliases);a.emitLine(`${n} sm->${V} = ${u};`)}else a.emitLine(`${n} ${se(p,r)} ${k} = ${u};`)}if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${$};`),va(w)){let I=sl(w,t,n+" ",r);if(I.length>0){let L=r;L.asyncCondBranchInfo||(L.asyncCondBranchInfo=new Map);let x=L.asyncCondBranchInfo.get(t.index)||{branches:[]};x.branches.push({index:$,value:w,hasAwait:!0,remainingExprs:I,deferredDropExpressions:(h=w.$)==null?void 0:h.deferredDropExpressions}),L.asyncCondBranchInfo.set(t.index,x)}}else if(ol(e,w,r,i,o))al(w,n+" ",r);else{let I=J(w,n+" ",r);if(i){let L=Ve(`var_${i}`);I&&a.emitLine(`${n} sm->${L} = ${I};`)}else o?I&&a.emitLine(`${n} ${o} = ${I};`):I&&w.$&&!un(w.$.env.modulePath,I)&&a.emitLine(`${n} ${I};`)}}}if(a.emitLine(`${n}} else {`),E>=0){let C=l[E];if(!S(C))a.emitLine(`${n} // Error: Expected => in case`);else{let w=C.args[1];if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${E};`),va(w)){let I=sl(w,t,n+" ",r);if(I.length>0){let L=r;L.asyncCondBranchInfo||(L.asyncCondBranchInfo=new Map);let x=L.asyncCondBranchInfo.get(t.index)||{branches:[]};x.branches.push({index:E,value:w,hasAwait:!0,remainingExprs:I,deferredDropExpressions:(g=w.$)==null?void 0:g.deferredDropExpressions}),L.asyncCondBranchInfo.set(t.index,x)}}else if(ol(e,w,r,i,o))al(w,n+" ",r);else{let I=J(w,n+" ",r);if(i){let L=Ve(`var_${i}`);I&&a.emitLine(`${n} sm->${L} = ${I};`)}else o?I&&a.emitLine(`${n} ${o} = ${I};`):I&&w.$&&!un(w.$.env.modulePath,I)&&a.emitLine(`${n} ${I};`)}}}a.emitLine(`${n}}`)}else{a.emitLine(`${n}switch (${u}.tag) {`);let E=!1;for(let $=0;$<l.length;$++){let k=l[$];if(!S(k)||!b(k,"=>",2))continue;let C=k.args[0],w=k.args[1],I=Q(C)&&C.token.value==="_",L;if(!I){if(S(C)&&b(C,".",1))L=C.args[0].token.value;else if(S(C)){let x=C.func;x&&S(x)&&b(x,".",1)&&(L=x.args[0].token.value)}}if(!I&&!L){a.emitLine(`${n} // Error: Could not extract variant name`);continue}if(I)E=!0,a.emitLine(`${n} default: {`);else{let x=`${_.toUpperCase()}_${L.toUpperCase()}`;a.emitLine(`${n} case ${x}: {`)}if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${$};`),S(C)&&C.args.length>=1){let x=C.func;if(x&&S(x)&&b(x,".")){let V=f.variants.find(M=>M.name===L);if(V&&V.fields)for(let M=0;M<Math.min(C.args.length,V.fields.length);M++){let q=C.args[M],P=V.fields[M];if(Q(q)&&P){let R=q.token.value,te=Ve(R),j=r,Y=!1,le;if(j.stateMachineVariables){for(let[Te,Ie]of j.stateMachineVariables)if(Ie.name===R){Y=!0,le=Te;break}}let Z=Ve(P.label,P.type.isExtern==="c"),ce=`${u}.data.${L}.${Z}`;if(Y&&le){let Te=$r(le,"local",j.stateMachineFieldAliases);a.emitLine(`${n} sm->${Te} = ${ce};`)}else{let Te=se(P.type,r);a.emitLine(`${n} ${Te} ${te} = ${ce};`)}}}}}if(va(w)){let x=sl(w,t,n+" ",r);if(x.length>0){let V=r;V.asyncCondBranchInfo||(V.asyncCondBranchInfo=new Map);let M=V.asyncCondBranchInfo.get(t.index)||{branches:[]};M.branches.push({index:$,value:w,hasAwait:!0,remainingExprs:x,deferredDropExpressions:(T=w.$)==null?void 0:T.deferredDropExpressions}),V.asyncCondBranchInfo.set(t.index,M)}}else if(ol(e,w,r,i,o))al(w,n+" ",r);else{let x=J(w,n+" ",r);if(i){let V=Ve(`var_${i}`);x&&a.emitLine(`${n} sm->${V} = ${x};`)}else o?x&&a.emitLine(`${n} ${o} = ${x};`):x&&w.$&&!un(w.$.env.modulePath,x)&&a.emitLine(`${n} ${x};`)}a.emitLine(`${n} break;`),a.emitLine(`${n} }`)}E||a.emitLine(`${n} default: break;`),a.emitLine(`${n}}`)}}function aA(e){return S(e)?b(e,"|",2):!1}function Fm(e){if(!aA(e))return[e];if(e.tag!=="FnCall")return[e];let t=e.args[0],n=e.args[1];return[...Fm(t),...Fm(n)]}function sA(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)||!b(d,"=>",2))continue;let v=d.args[0],y=d.args[1];if(Tn(v,"_"))l.emitLine(`${i} default:`);else{let h=(c=v.$)==null?void 0:c.primitivePatternValues;if(h&&h.length>0){for(let g of h)if(g!==void 0){let T=yr(g,o);l.emitLine(`${i} case ${T}:`)}}else{let g=Fm(v);for(let T of g){let E=(f=T.$)==null?void 0:f.value;if(E!==void 0){let $=yr(E,o);l.emitLine(`${i} case ${$}:`)}}}}if(l.emitLine(`${i} sm->cond_branch_${r.index} = ${p};`),va(y)){let h=sl(y,r,i+" ",o);u.push({index:p,value:y,hasAwait:!0,remainingExprs:h,deferredDropExpressions:(_=y.$)==null?void 0:_.deferredDropExpressions})}else{if(ol(e,y,o,a,s))al(y,i+" ",o);else{let h=J(y,i+" ",o);if(a){let g=Ve(`var_${a}`);h&&l.emitLine(`${i} sm->${g} = ${h};`)}else s?h&&l.emitLine(`${i} ${s} = ${h};`):h&&y.$&&!un(y.$.env.modulePath,h)&&l.emitLine(`${i} ${h};`)}u.push({index:p,value:y,hasAwait:!1})}l.emitLine(`${i} break;`)}l.emitLine(`${i}}`),o.asyncCondBranchInfo||(o.asyncCondBranchInfo=new Map),o.asyncCondBranchInfo.set(r.index,{branches:u,targetVariableId:a,targetAssignmentCode:s})}function sl(e,t,n,r){let i=r.emitter,o=[];if(e.tag!=="FnCall"||!b(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(va(l))if(s=!0,l.tag==="FnCall"&&b(l,":=")){let u=l.args[1];if(u&&u.tag==="FnCall"&&Or(u)){let c=u.args[0];if(c){let f=J(c,n,r);i.emitLine(`${n}// Store Future for await ${t.index} (cond branch)`),i.emitLine(`${n}sm->await_future_${t.index} = ${f};`)}}}else if(l.tag==="FnCall"&&Or(l)){let u=l.args[0];if(u)if(t.futureVariableId===void 0){let c=J(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"&&b(l,B.cond)){let u=l===a[a.length-1],c=r.asyncBodyReturnExpr;u&&r.asyncBodyReturnExpr!==void 0&&(r.asyncBodyReturnExpr=l),du(l,t,n,r),r.asyncBodyReturnExpr=c}else if(l.tag==="FnCall"&&b(l,B.match)){let u=l===a[a.length-1],c=r.asyncBodyReturnExpr;u&&r.asyncBodyReturnExpr!==void 0&&(r.asyncBodyReturnExpr=l),mu(l,t,n,r),r.asyncBodyReturnExpr=c}else l.tag==="FnCall"&&b(l,B.while)&&Im(l,t,n,r);else{let u=J(l,n,r);u&&l.$&&!un(l.$.env.modulePath,u)&&i.emitLine(`${n}${u};`)}}return o}function Im(e,t,n,r){let i=r.emitter;if(e.tag!=="FnCall"||!b(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=uA(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 f=J(a,n,r);i.emitLine(`${n}if (!(${f})) {`),i.emitLine(`${n} sm->while_loop_${c}_active = false;`),i.emitLine(`${n} goto while_loop_${c}_end;`),i.emitLine(`${n}}`);let _=lA(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:_})}else r.asyncWhileLoopInfo.set(t.index,{conditionExpr:a,stepExpr:s,bodyExpr:l,bodyExprsAfterAwait:_})}function lA(e,t,n,r,i){var p;let o=r.emitter,a=[],s=[];e.tag==="FnCall"&&b(e,"begin")?s=e.args:s=[e];let l=-1;for(let d=0;d<s.length;d++){let v=s[d];if(Fr(v)){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,f=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 v=s[d],y=J(v,n,r);y&&v.$&&!un(v.$.env.modulePath,y)&&o.emitLine(`${n}${y};`)}r.smWhileBreakInfo=u,r.smWhileContinueInfo=c,r.smWhileBodyDrops=f;let _=s[l];if(S(_)&&b(_,B.while)&&Fr(_)){Im(_,t,n,r);for(let d=l+1;d<s.length;d++)a.push(s[d]);return a}if(S(_)&&b(_,":=")){let d=_.args[1];if(d&&d.tag==="FnCall"&&Or(d)){let v=d.args[0];if(v){let y=J(v,n,r);o.emitLine(`${n}// Store Future for await ${t.index} (while loop body)`),o.emitLine(`${n}sm->await_future_${t.index} = ${y};`)}}}else if(_.tag==="FnCall"&&Or(_)){let d=_.args[0];if(d&&t.futureVariableId===void 0){let v=J(d,n,r);o.emitLine(`${n}// Store Future for await ${t.index} (while loop body)`),o.emitLine(`${n}sm->await_future_${t.index} = ${v};`)}}else if(S(_)&&b(_,B.cond)){du(_,t,n,r,void 0);for(let d=l+1;d<s.length;d++)a.push(s[d]);return a}else if(S(_)&&b(_,B.match)){mu(_,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 uA(e){let t=e.tag==="FnCall"&&b(e,"begin")?e.args:[e];for(let n of t)if(n.tag==="FnCall"&&b(n,B.while)&&Fr(n))return!0;return!1}function es(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=ve(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(Qn(e)){if((r=e.$)!=null&&r.deferredDupExpressions)for(let a of e.$.deferredDupExpressions)es(a,t,n);break}es(e.func,t,n);for(let a of e.args)es(a,t,n);if((i=e.$)!=null&&i.deferredDropExpressions)for(let a of e.$.deferredDropExpressions)es(a,t,n);if((o=e.$)!=null&&o.deferredDupExpressions)for(let a of e.$.deferredDupExpressions)es(a,t,n);break}}function c_(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=Lm(e,n);for(let v of a)((f=v.awaitPoint)!=null&&f.isInsideCond||(_=v.awaitPoint)!=null&&_.isInsideWhile)&&o.add(v.stateNumber);let s=new Map;for(let v of a){let y=new Set;for(let h of v.expressions)es(h,y,i);for(let h of y){let g=s.get(h);g||(g=new Set,s.set(h,g)),g.add(v.stateNumber)}}let l=-1;if((p=e.$)!=null&&p.deferredDropExpressions){let v=new Set;for(let y of e.$.deferredDropExpressions)es(y,v,i);for(let y of v){let h=s.get(y);h||(h=new Set,s.set(y,h)),h.add(l)}}let u=new Set;for(let v of r){if(v.kind==="outer")continue;let y=s.get(v.id);if(!y)u.add(v.id);else if(y.size>1)u.add(v.id);else if(y.has(l))u.add(v.id);else{let h=y.values().next().value;o.has(h)&&u.add(v.id)}}let c=new Map;for(let v of n){if(v.futureVariableId!==void 0)continue;let y=v.expr;if(!S(y))continue;let h=y.args[0];if(!h)continue;let g=(d=h.$)==null?void 0:d.variableName;if(!g)continue;let T=r.find(E=>E.kind==="local"&&(E.name===g||E.id===g));T&&(c.set(T.id,`await_future_${v.index}`),u.delete(T.id))}return{crossBoundaryIds:u,awaitFutureTempVarAliases:c,variableSegments:s}}function f_(e,t,n,r,i){let o={slotAliases:new Map,slots:[]},a=n.filter(_=>_.kind==="local"&&e.has(_.id)&&!r.has(_.id)&&!mt(_.type));if(a.length<2)return o;let s=new Map;for(let _ of a){let p=t.get(_.id);if(!p||p.size===0)continue;let d=[...p].filter(h=>h>=0);if(d.length===0)continue;let v=Math.min(...d),y=Math.max(...d);s.set(_.id,[v,y])}if(s.size<2)return o;let l=new Map;for(let[_]of s){let p=a.find(y=>y.id===_);if(!p)continue;let d=se(p.type,i),v=l.get(d);v||(v=[],l.set(d,v)),v.push(_)}let u=new Map,c=[],f=0;for(let[_,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 g=h+1;g<p.length;g++){let[T,E]=s.get(p[h]),[$,k]=s.get(p[g]);T<=k&&$<=E&&(d.get(p[h]).add(p[g]),d.get(p[g]).add(p[h]))}let v=new Map;for(let h of p){let g=new Set;for(let E of d.get(h))v.has(E)&&g.add(v.get(E));let T=0;for(;g.has(T);)T++;v.set(h,T)}let y=new Map;for(let[h,g]of v){let T=y.get(g);T||(T=[],y.set(g,T)),T.push(h)}for(let[,h]of y){if(h.length<2)continue;let g=`slot_${f}`,T=h.map(E=>{var $;return(($=a.find(k=>k.id===E))==null?void 0:$.name)??E});for(let E of h)u.set(E,g);c.push({fieldName:g,cType:_,variableNames:T}),f++}}return{slotAliases:u,slots:c}}function Sm(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 yu(e){return!e||!H(e)?!1:e.resolvedConcreteType&&H(e.resolvedConcreteType)&&e.resolvedConcreteType.isExtern?!0:e.requiredTraits.some(t=>Kc(t.traitType))}function $r(e,t,n){if(t==="outer")return`__capture.${Ve(e)}`;let r=n==null?void 0:n.get(e);return r||Ve(`var_${e}`)}function z$(e,t,n,r,i,o,a,s){var y,h,g,T,E,$,k,C,w,I,L,x,V,M,q,P,R,te,j,Y,le,Z,ce,Te,Ie,ge,be;let l=s.emitter,c=jn(o).isFuture.outputType,f=Ke(c);s.asyncCondBranchInfo=new Map,s.asyncWhileLoopInfo=new Map,s.asyncNextWhileLoopIndex=i.awaitPoints.length;let _=Lm(e,i.awaitPoints),p=e.tag==="FnCall"&&b(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(" int __yo_inline_budget = 32; // bounded inline fast-path for sync-completed awaits"),l.emitLine(" switch (sm->state) {");let v=[];for(let De=0;De<_.length;De++){let ze=_[De];if(!ze)continue;let We=ze.stateNumber,pe=De===_.length-1;if(l.emitLine(`
238
- state_${We}:`),l.emitLine(` case ${We}: { // State ${We}`),l.emitLine(` ASYNC_DEBUG("${t}: Entering state ${We}\\n");`),We>0&&i.awaitPoints[We-1]){let st=i.awaitPoints[We-1],Ct=Sm(st,i);st.isInsideCond&&l.emitLine(` if (sm->${Ct} != NULL) {`);let rn=Ke(st.resultType)||H(st.resultType)&&!st.resultType.resolvedConcreteType;if(l.emitLine(" // Check if the awaited Future was aborted"),l.emitLine(` if (sm->${Ct}->state == -2) {`),l.emitLine(` __yo_decr_rc((void*)sm->${Ct});`),l.emitLine(` sm->${Ct} = NULL;`),gi({emitter:l,indent:" ",debugLabel:t}),l.emitLine(" }"),st&&!rn){l.emitLine(` // Extract result from await ${We-1}`),l.emitLine(` int state_before_read = sm->${Ct}->state;`),l.emitLine(` ASYNC_DEBUG("${t}: Reading result from await ${We-1}, state=%d\\n", state_before_read);`);let gt=!!st.isInsideCond,ut;if(gt?ut=`sm->await_result_${We-1}`:st.targetVariableId&&(ut=`sm->${$r(st.targetVariableId,"local",s.stateMachineFieldAliases)}`),ut)if(mt(st.resultType)){let Nt=Ur(st.resultType,s);Nt?l.emitLine(` ${ut} = ${Nt}(sm->${Ct}->result);`):(l.emitLine(" /* Warning: No ___dup function found for result type, shallow copy may cause use-after-free */"),l.emitLine(` ${ut} = sm->${Ct}->result;`))}else l.emitLine(` ${ut} = sm->${Ct}->result;`);if(gt&&st.targetVariableId){let Nt=$r(st.targetVariableId,"local",s.stateMachineFieldAliases);l.emitLine(` sm->${Nt} = sm->await_result_${We-1};`)}l.emitLine("")}if(!st.futureVariableId){let gt=st.expr;if(gt.tag==="FnCall"){let ut=gt.args[0],Nt=(y=ut==null?void 0:ut.$)==null?void 0:y.type;Nt&&(H(Nt)||ht(Nt))&&(l.emitLine(` if (sm->${Ct} != NULL) { __yo_decr_rc((void*)sm->${Ct}); sm->${Ct} = NULL; }`),l.emitLine(""))}}let Bt=s;if(st){let gt=(h=Bt.asyncCondBranchInfo)==null?void 0:h.get(st.index);if(gt&&gt.branches.some(Nt=>Nt.hasAwait)){let Nt=gt.condBranchFieldIndex??st.index,Yt=Nt===-1;l.emitLine(" // Execute remaining code from chosen cond branch"),Yt||l.emitLine(` switch (sm->cond_branch_${Nt}) {`);let wt=((g=ze.awaitPoint)==null?void 0:g.isInsideCond)??!1;for(let Ft of gt.branches)if(Ft.hasAwait){if(Yt||l.emitLine(` case ${Ft.index}: {`),l.emitLine(` ASYNC_DEBUG("${t}: Executing remaining code from branch ${Ft.index}\\n");`),Ft.remainingExprs&&Ft.remainingExprs.length>0){let ee=s.inAsyncStateMachine,W=s.stateMachineVariables,oe=s.variableIdRemapping,me=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let de=(T=Bt.asyncWhileLoopInfo)==null?void 0:T.get(st.index);s.pendingDeferredDrops=[...Ft.deferredDropExpressions??[],...((E=de==null?void 0:de.bodyExpr.$)==null?void 0:E.deferredDropExpressions)??[],...(($=e.$)==null?void 0:$.deferredDropExpressions)??[]];let ye=new Map;for(let Pe of i.capturedVariables)ye.set(Pe.id,Pe);if(a)for(let Pe of a.fields)ye.set(Pe.label,{id:Pe.label,name:Pe.label,type:Pe.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=ye;let he=!1,Be=[],qe=gt.targetAssignmentCode;for(let Pe=0;Pe<Ft.remainingExprs.length;Pe++){let ie=Ft.remainingExprs[Pe],ae=Pe===Ft.remainingExprs.length-1;if(he){Be.push(ie);continue}if(wt&&Fr(ie)){he=!0,u_(ie,ze.awaitPoint,i," ",s);continue}let we=J(ie," ",s);!we||!ie.$||un(ie.$.env.modulePath,we)||(ae&&qe?l.emitLine(` ${qe} = ${we};`):l.emitLine(` ${we};`))}if(Ft.remainingExprs.length===0&&qe&&l.emitLine(` ${qe} = sm->await_result_${st.index};`),he&&ze.awaitPoint){let Pe=ze.awaitPoint.index;Bt.asyncCondBranchInfo||(Bt.asyncCondBranchInfo=new Map);let ie=Bt.asyncCondBranchInfo.get(Pe);if(ie)ie.chainedBranches||(ie.chainedBranches=[]),ie.chainedBranches.push({branches:[{index:Ft.index,value:Ft.value,hasAwait:Be.length>0||Be.some(ae=>Fr(ae)),remainingExprs:Be,deferredDropExpressions:Ft.deferredDropExpressions}],condBranchFieldIndex:Nt});else{let ae={branches:[{index:Ft.index,value:Ft.value,hasAwait:Be.length>0||Be.some(we=>Fr(we)),remainingExprs:Be,deferredDropExpressions:Ft.deferredDropExpressions}],condBranchFieldIndex:Nt};Bt.asyncCondBranchInfo.set(Pe,ae)}}else if(Ft.deferredDropExpressions)for(let Pe of Ft.deferredDropExpressions){let ie=J(Pe," ",s);ie&&ie.includes("sm->")&&l.emitLine(` ${ie};`)}s.inAsyncStateMachine=ee,s.stateMachineVariables=W,s.variableIdRemapping=oe,s.pendingDeferredDrops=me}Yt||(l.emitLine(" break;"),l.emitLine(" }"))}if(Yt||l.emitLine(" }"),gt.chainedBranches){for(let Ft of gt.chainedBranches)for(let ee of Ft.branches)if(ee.hasAwait&&ee.remainingExprs&&ee.remainingExprs.length>0){let W=s.inAsyncStateMachine,oe=s.stateMachineVariables,me=s.variableIdRemapping,de=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let ye=(k=Bt.asyncWhileLoopInfo)==null?void 0:k.get(st.index);s.pendingDeferredDrops=[...ee.deferredDropExpressions??[],...((C=ye==null?void 0:ye.bodyExpr.$)==null?void 0:C.deferredDropExpressions)??[],...((w=e.$)==null?void 0:w.deferredDropExpressions)??[]];let he=new Map;for(let ie of i.capturedVariables)he.set(ie.id,ie);if(a)for(let ie of a.fields)he.set(ie.label,{id:ie.label,name:ie.label,type:ie.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=he;let Be=((I=ze.awaitPoint)==null?void 0:I.isInsideCond)??!1,qe=!1,Pe=[];for(let ie of ee.remainingExprs){if(qe){Pe.push(ie);continue}if(Be&&Fr(ie)){qe=!0,u_(ie,ze.awaitPoint,i," ",s);continue}let ae=J(ie," ",s);!ae||!ie.$||un(ie.$.env.modulePath,ae)||l.emitLine(` ${ae};`)}if(qe&&ze.awaitPoint){let ie=ze.awaitPoint.index;Bt.asyncCondBranchInfo||(Bt.asyncCondBranchInfo=new Map);let ae=Bt.asyncCondBranchInfo.get(ie);ae?(ae.chainedBranches||(ae.chainedBranches=[]),ae.chainedBranches.push({branches:[{index:ee.index,value:ee.value,hasAwait:Pe.length>0||Pe.some(we=>Fr(we)),remainingExprs:Pe,deferredDropExpressions:ee.deferredDropExpressions}],condBranchFieldIndex:Ft.condBranchFieldIndex})):Bt.asyncCondBranchInfo.set(ie,{branches:[{index:ee.index,value:ee.value,hasAwait:Pe.length>0||Pe.some(we=>Fr(we)),remainingExprs:Pe,deferredDropExpressions:ee.deferredDropExpressions}],condBranchFieldIndex:Ft.condBranchFieldIndex})}else if(ee.deferredDropExpressions)for(let ie of ee.deferredDropExpressions){let ae=J(ie," ",s);ae&&ae.includes("sm->")&&l.emitLine(` ${ae};`)}s.inAsyncStateMachine=W,s.stateMachineVariables=oe,s.variableIdRemapping=me,s.pendingDeferredDrops=de}}if(gt.targetVariableId){let Ft=$r(gt.targetVariableId,"local",s.stateMachineFieldAliases);l.emitLine(" // Assign cond result to target variable"),l.emitLine(` sm->${Ft} = sm->await_result_${st.index};`)}l.emitLine("")}st.isInsideCond&&l.emitLine(" }");let ut=(L=Bt.asyncWhileLoopInfo)==null?void 0:L.get(st.index);if(ut){let Nt=ut.whileLoopOriginIndex??st.index;l.emitLine(" // Execute remaining code from while loop body and continue loop"),l.emitLine(` if (sm->while_loop_${Nt}_active) {`);let Yt=!1;if(ut.bodyExprsAfterAwait&&ut.bodyExprsAfterAwait.length>0){let wt=s.inAsyncStateMachine,Ft=s.stateMachineVariables,ee=s.variableIdRemapping,W=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...((x=ut.bodyExpr.$)==null?void 0:x.deferredDropExpressions)??[],...((V=e.$)==null?void 0:V.deferredDropExpressions)??[]];let oe=new Map;for(let he of i.capturedVariables)oe.set(he.id,he);if(a)for(let he of a.fields)oe.set(he.label,{id:he.label,name:he.label,type:he.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=oe;let me=s.smWhileBreakInfo,de=s.smWhileContinueInfo,ye=s.smWhileBodyDrops;s.smWhileBreakInfo={label:`after_while_loop_${Nt}`,activeIndex:Nt},s.smWhileContinueInfo={label:`while_loop_${Nt}_continue`},s.smWhileBodyDrops=[...((M=ut.bodyExpr.$)==null?void 0:M.deferredDropExpressions)??[]];for(let he=0;he<ut.bodyExprsAfterAwait.length;he++){let Be=ut.bodyExprsAfterAwait[he];if(Fr(Be)&&ze.awaitPoint){u_(Be,ze.awaitPoint,i," ",s);let Pe=ut.bodyExprsAfterAwait.slice(he+1);Bt.asyncWhileLoopInfo.set(ze.awaitPoint.index,{conditionExpr:ut.conditionExpr,stepExpr:ut.stepExpr,bodyExpr:ut.bodyExpr,bodyExprsAfterAwait:Pe,whileLoopOriginIndex:Nt,isChainedAwait:!0,condBranchPostWhileExprs:ut.condBranchPostWhileExprs,outerWhileLoop:ut.outerWhileLoop}),Yt=!0;break}let qe=J(Be," ",s);!qe||!Be.$||un(Be.$.env.modulePath,qe)||l.emitLine(` ${qe};`)}s.smWhileBreakInfo=me,s.smWhileContinueInfo=de,s.smWhileBodyDrops=ye,s.inAsyncStateMachine=wt,s.stateMachineVariables=Ft,s.variableIdRemapping=ee,s.pendingDeferredDrops=W}if(Yt)l.emitLine(" }"),l.emitLine("");else{l.emitLine(` while_loop_${Nt}_continue:`);{let ye=((q=ut.bodyExpr.$)==null?void 0:q.deferredDropExpressions)??[];if(ye.length>0){let he=s.inAsyncStateMachine,Be=s.stateMachineVariables,qe=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let Pe=new Map;for(let ie of i.capturedVariables)Pe.set(ie.id,ie);if(a)for(let ie of a.fields)Pe.set(ie.label,{id:ie.label,name:ie.label,type:ie.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Pe;for(let ie of ye){let ae=J(ie," ",s);ae&&ae.includes("sm->")&&l.emitLine(` ${ae};`)}s.inAsyncStateMachine=he,s.stateMachineVariables=Be,s.variableIdRemapping=qe}}l.emitLine(` ASYNC_DEBUG("${t}: Re-evaluating while loop condition\\n");`);let wt=s.declaredTempVars;if(s.declaredTempVars=void 0,ut.stepExpr){let ye=s.inAsyncStateMachine,he=s.stateMachineVariables,Be=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let qe=new Map;for(let ie of i.capturedVariables)qe.set(ie.id,ie);if(a)for(let ie of a.fields)qe.set(ie.label,{id:ie.label,name:ie.label,type:ie.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=qe;let Pe=J(ut.stepExpr," ",s);Pe&&l.emitLine(` ${Pe};`),s.inAsyncStateMachine=ye,s.stateMachineVariables=he,s.variableIdRemapping=Be}let Ft=s.inAsyncStateMachine,ee=s.stateMachineVariables,W=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let oe=new Map;for(let ye of i.capturedVariables)oe.set(ye.id,ye);if(a)for(let ye of a.fields)oe.set(ye.label,{id:ye.label,name:ye.label,type:ye.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=oe;let me=J(ut.conditionExpr," ",s);s.inAsyncStateMachine=Ft,s.stateMachineVariables=ee,s.variableIdRemapping=W,s.declaredTempVars=wt,l.emitLine(` if (!(${me})) {`),l.emitLine(` sm->while_loop_${Nt}_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 de=Nt;l.emitLine(" // Loop back by transitioning to while loop state"),l.emitLine(` sm->state = ${de};`),l.emitLine(` goto while_loop_${de}_start;`),l.emitLine(" }"),l.emitLine(" }"),l.emitLine(""),l.emitLine(` after_while_loop_${Nt}:`)}if(!Yt&&ut.condBranchPostWhileExprs){let wt=ut.condBranchPostWhileExprs,Ft=wt.condBranchFieldIndex,ee=wt.branchIndex;wt.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_${Ft} == ${ee}) {`));let W=s.inAsyncStateMachine,oe=s.stateMachineVariables,me=s.variableIdRemapping,de=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...((P=e.$)==null?void 0:P.deferredDropExpressions)??[]];let ye=new Map;for(let Pe of i.capturedVariables)ye.set(Pe.id,Pe);if(a)for(let Pe of a.fields)ye.set(Pe.label,{id:Pe.label,name:Pe.label,type:Pe.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=ye;let he=ze.awaitPoint!=null,Be=!1,qe=[];for(let Pe=0;Pe<wt.exprs.length;Pe++){let ie=wt.exprs[Pe];if(Be){qe.push(ie);continue}if(he&&Fr(ie)){Be=!0,u_(ie,ze.awaitPoint,i," ",s);continue}let ae=J(ie," ",s);!ae||!ie.$||un(ie.$.env.modulePath,ae)||l.emitLine(` ${ae};`)}if(Be&&ze.awaitPoint){let Pe=ze.awaitPoint.index;Bt.asyncCondBranchInfo||(Bt.asyncCondBranchInfo=new Map);let ie=wt.skipCondBranchCheck?-1:wt.condBranchFieldIndex,ae=Bt.asyncCondBranchInfo.get(Pe);ae?(ae.chainedBranches||(ae.chainedBranches=[]),ae.chainedBranches.push({branches:[{index:wt.branchIndex,value:wt.exprs[0],hasAwait:qe.length>0||qe.some(we=>Fr(we)),remainingExprs:qe,deferredDropExpressions:wt.deferredDropExpressions}],condBranchFieldIndex:ie})):Bt.asyncCondBranchInfo.set(Pe,{branches:[{index:wt.branchIndex,value:wt.exprs[0],hasAwait:qe.length>0||qe.some(we=>Fr(we)),remainingExprs:qe,deferredDropExpressions:wt.deferredDropExpressions}],condBranchFieldIndex:ie})}if(!Be&&wt.deferredDropExpressions)for(let Pe of wt.deferredDropExpressions){let ie=J(Pe," ",s);ie&&ie.includes("sm->")&&l.emitLine(` ${ie};`)}l.emitLine(" }"),s.inAsyncStateMachine=W,s.stateMachineVariables=oe,s.variableIdRemapping=me,s.pendingDeferredDrops=de}if(ut.outerWhileLoop){let wt=ut.outerWhileLoop,Ft=wt.whileLoopIndex;if(l.emitLine(" // Execute remaining code from outer while loop body"),l.emitLine(` if (sm->while_loop_${Ft}_active) {`),wt.bodyExprsAfterAwait.length>0){let W=s.inAsyncStateMachine,oe=s.stateMachineVariables,me=s.variableIdRemapping,de=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...((R=wt.bodyExpr.$)==null?void 0:R.deferredDropExpressions)??[],...((te=e.$)==null?void 0:te.deferredDropExpressions)??[]];let ye=new Map;for(let Pe of i.capturedVariables)ye.set(Pe.id,Pe);if(a)for(let Pe of a.fields)ye.set(Pe.label,{id:Pe.label,name:Pe.label,type:Pe.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=ye;let he=s.smWhileBreakInfo,Be=s.smWhileContinueInfo,qe=s.smWhileBodyDrops;s.smWhileBreakInfo={label:`after_while_loop_${Ft}`,activeIndex:Ft},s.smWhileContinueInfo={label:`while_loop_${Ft}_continue`},s.smWhileBodyDrops=[...((j=wt.bodyExpr.$)==null?void 0:j.deferredDropExpressions)??[]];for(let Pe of wt.bodyExprsAfterAwait){let ie=J(Pe," ",s);!ie||!Pe.$||un(Pe.$.env.modulePath,ie)||l.emitLine(` ${ie};`)}s.smWhileBreakInfo=he,s.smWhileContinueInfo=Be,s.smWhileBodyDrops=qe,s.inAsyncStateMachine=W,s.stateMachineVariables=oe,s.variableIdRemapping=me,s.pendingDeferredDrops=de}l.emitLine(` while_loop_${Ft}_continue:`);{let W=((Y=wt.bodyExpr.$)==null?void 0:Y.deferredDropExpressions)??[];if(W.length>0){let oe=s.inAsyncStateMachine,me=s.stateMachineVariables,de=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let ye=new Map;for(let he of i.capturedVariables)ye.set(he.id,he);if(a)for(let he of a.fields)ye.set(he.label,{id:he.label,name:he.label,type:he.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=ye;for(let he of W){let Be=J(he," ",s);Be&&Be.includes("sm->")&&l.emitLine(` ${Be};`)}s.inAsyncStateMachine=oe,s.stateMachineVariables=me,s.variableIdRemapping=de}}let ee=s.declaredTempVars;if(s.declaredTempVars=void 0,wt.stepExpr){let W=s.inAsyncStateMachine,oe=s.stateMachineVariables,me=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let de=new Map;for(let he of i.capturedVariables)de.set(he.id,he);if(a)for(let he of a.fields)de.set(he.label,{id:he.label,name:he.label,type:he.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=de;let ye=J(wt.stepExpr," ",s);ye&&l.emitLine(` ${ye};`),s.inAsyncStateMachine=W,s.stateMachineVariables=oe,s.variableIdRemapping=me}{let W=s.inAsyncStateMachine,oe=s.stateMachineVariables,me=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let de=new Map;for(let he of i.capturedVariables)de.set(he.id,he);if(a)for(let he of a.fields)de.set(he.label,{id:he.label,name:he.label,type:he.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=de;let ye=J(wt.conditionExpr," ",s);s.inAsyncStateMachine=W,s.stateMachineVariables=oe,s.variableIdRemapping=me,l.emitLine(` if (!(${ye})) {`),l.emitLine(` sm->while_loop_${Ft}_active = false;`),l.emitLine(" } else {"),l.emitLine(` sm->state = ${st.index};`),l.emitLine(` goto while_loop_${Ft}_start;`),l.emitLine(" }")}s.declaredTempVars=ee,l.emitLine(" }"),l.emitLine(""),l.emitLine(` after_while_loop_${Ft}:`)}}}}let fe=s.inAsyncStateMachine,$e=s.stateMachineVariables,Le=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let Me=new Map;for(let st of i.capturedVariables)Me.set(st.id,st);if(a)for(let st of a.fields)Me.set(st.label,{id:st.label,name:st.label,type:st.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Me;let Ze=s.pendingDeferredDrops;s.pendingDeferredDrops=[...((le=e.$)==null?void 0:le.deferredDropExpressions)??[]];let $t=pe&&!f&&ze.expressions.length>0,It=ze.expressions.length>0?ze.expressions[ze.expressions.length-1]:void 0,jt=s.asyncBodyReturnExpr;if(!f&&It&&d&&It===d&&ze.awaitPoint?s.asyncBodyReturnExpr=It:s.asyncBodyReturnExpr=void 0,O$(ze," ",s,$t),s.asyncBodyReturnExpr=jt,s.pendingDeferredDrops=Ze,l.emitLine(""),ze.awaitPoint){s.inAsyncStateMachine=fe,s.stateMachineVariables=$e,s.variableIdRemapping=Le;let st=We+1;{let Ct=Sm(ze.awaitPoint,i),Bt=(Z=ze.awaitPoint.expr.args)==null?void 0:Z[0],gt=yu((ce=Bt==null?void 0:Bt.$)==null?void 0:ce.type),ut=(Te=ze.awaitPoint)==null?void 0:Te.isInsideCond;ut&&(l.emitLine(" // Only await if the cond branch with await was taken"),l.emitLine(` if (sm->${Ct} != NULL) {`));let Nt=(Ie=ze.awaitPoint)==null?void 0:Ie.isInsideWhile,Yt=Nt?(ge=s.asyncWhileLoopInfo)==null?void 0:ge.get(ze.awaitPoint.index):void 0;if(Nt&&Yt){let wt=Yt.whileLoopOriginIndex??ze.awaitPoint.index;l.emitLine(" // Only await if while loop is still active (not broken)"),l.emitLine(` if (sm->while_loop_${wt}_active) {`)}if(l.emitLine(" // Transition to next state after await"),l.emitLine(` sm->state = ${st};`),l.emitLine(""),l.emitLine(" // Check if future is ready"),l.emitLine(` int future_state = sm->${Ct}->state;`),l.emitLine(" if (future_state == -1 || future_state == -2) { // -1 = completed, -2 = aborted"),l.emitLine(" // Already complete \u2014 bounded inline fast-path to avoid scheduler round-trip"),l.emitLine(" if (__yo_inline_budget > 0) {"),l.emitLine(" __yo_inline_budget--;"),l.emitLine(` goto state_${st};`),l.emitLine(" }"),l.emitLine(" // Budget exhausted \u2014 yield once for fairness (microtask yield)"),l.emitLine(` __yo_async_spawn_task((void (*)(void*))${r}, (void*)sm);`),l.emitLine(" return;"),l.emitLine(" }"),l.emitLine(""),gt?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->${Ct}); // event loop reference`)),gt||(l.emitLine(" if (future_state == 0) { // 0 = cold (not started)"),fA(ze.awaitPoint.expr,`sm->${Ct}`," ",s),l.emitLine(" // Cold future \u2014 start it via stored resume function pointer"),l.emitLine(` sm->${Ct}->__yo_resume_fn((void*)sm->${Ct});`),l.emitLine(""),l.emitLine(" // Re-check: may have completed synchronously"),l.emitLine(` future_state = sm->${Ct}->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->${Ct}->continuation_fn = (void (*)(void*))${r};`),l.emitLine(` sm->${Ct}->continuation_sm = (void*)sm;`),l.emitLine(" return;"),Nt&&Yt){let wt=Yt.whileLoopOriginIndex??ze.awaitPoint.index;l.emitLine(" } else {"),l.emitLine(" // While loop was broken, jump to code after loop"),l.emitLine(` goto after_while_loop_${wt};`),l.emitLine(" }")}ut&&(l.emitLine(" } else {"),l.emitLine(" // Non-await cond branch was taken, skip directly to next state"),l.emitLine(` sm->state = ${st};`),l.emitLine(` goto state_${st};`),l.emitLine(" }"))}}else if(pe){if(!ze.expressions.some(Ct=>B$(Ct))){if((be=e.$)!=null&&be.deferredDropExpressions){let Ct=new nl,rn=s.emitter;s.emitter=Ct;for(let gt of e.$.deferredDropExpressions){let ut=J(gt,"",s);ut&&Ct.emitLine(`${ut};`)}s.emitter=rn;let Bt=Ct.print().trim();if(Bt){l.emitLine(" // Drop local variables before completion");for(let gt of Bt.split(`
239
- `)){let ut=gt.trim();ut&&(l.emitLine(` ${ut}`),v.push(ut))}l.emitLine("")}}l.emitLine(" // Final state - complete the Future"),Oo({emitter:l,indent:" ",debugLabel:"Future %p completed"})}s.inAsyncStateMachine=fe,s.stateMachineVariables=$e,s.variableIdRemapping=Le}else s.inAsyncStateMachine=fe,s.stateMachineVariables=$e,s.variableIdRemapping=Le;l.emitLine(" }")}return l.emitLine(" }"),l.emitLine("}"),l.emitLine(""),v}function u_(e,t,n,r,i){let o=i.emitter,a=Sm(t,n);if(e.tag==="FnCall"&&b(e,":=")){let s=e.args[1];if(s&&s.tag==="FnCall"&&Or(s)){let l=s.args[0];if(l){let u=J(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"&&Or(e)){let s=e.args[0];if(s){let l=J(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"&&b(e,B.cond)){ll(e,t,0,r,i);return}if(e.tag==="FnCall"&&b(e,B.match)){ll(e,t,0,r,i);return}if(e.tag==="FnCall"&&b(e,B.while)){ll(e,t,0,r,i);return}if(e.tag==="FnCall"&&b(e,B.begin)){ll(e,t,0,r,i);return}o.emitLine(`${r}// Warning: unhandled await pattern in remaining expressions`)}function B$(e){if(Tn(e,"return")||b(e,"return"))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(B$(t))return!0}return!1}function cA(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;H(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),ln(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function fA(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=jn(i.$.type);if(!((f=o==null?void 0:o.isFuture.effects)!=null&&f.length))return;let a=cA(o.isFuture.effects),s=r.emitter,l=(_=e.args)==null?void 0:_.find(d=>S(d)&&b(d,B.using));if(l){let d=l.args;for(let v=0;v<a.length&&v<d.length;v++){let y=a[v],h=d[v];if(_e(y.type)){if(y.type.forallParameters.length>0)continue;let g=J(h,n,r),T=y.label;s.emitLine(`${n}${t}->__capture.${T} = (void*)${g};`)}else rt(y.type)&&U$(y.type,t,n,(p=h.$)==null?void 0:p.value,r,e)}}else for(let d of a)if(_e(d.type)){if(d.type.forallParameters.length>0)continue;let v=_A(d.label,r,e);v&&s.emitLine(`${n}${t}->__capture.${d.label} = (void*)${v};`)}else rt(d.type)&&U$(d.type,t,n,void 0,r,e)}function U$(e,t,n,r,i,o){var s,l,u,c;let a=i.emitter;for(let f of e.fields){if(!_e(f.type))continue;let _;if(i.stateMachineVariables){for(let[,p]of i.stateMachineVariables)if(p.name===f.label&&p.kind==="outer"){_=`sm->__capture.${f.label}`;break}}if(!_&&r&&Rt(r)){let p=e.fields.indexOf(f),d=r.fields[p];if(d&&Se(d)){let v=i.functions[d.funcId];v&&(_=v.cName)}}if(!_&&i.currentEvidenceParams){for(let p of i.currentEvidenceParams.values())if(p.fieldLabel===f.label){_=p.cParamName;break}}if(!_){let p=((s=o.$)==null?void 0:s.env)??((l=o.func.$)==null?void 0:l.env);if(p){let d=Pr(p,v=>v.isImplicit===!0);for(let v=d.length-1;v>=0;v--){let y=d[v],h=(u=y.value)==null?void 0:u[y.value.length-1];if(h&&Rt(h)){let g=h.type.fields.findIndex(T=>T.label===f.label);if(g>=0){let T=h.fields[g];if(T&&Se(T)){let E=(c=i.functions[T.funcId])==null?void 0:c.cName;if(E){_=E;break}}}}}}}_&&a.emitLine(`${n}${t}->__capture.${f.label} = (void*)${_};`)}}function _A(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 pA=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 q$(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(pA.has(l))continue;Am(u,l,!0,e);continue}u.isExtern==="c"&&u.cInclude||l.startsWith("__atomic_")||l.startsWith("__sync_")||Am(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"),mA(e),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Closure constructors"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Capture dispose functions"),yA(e),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Dyn type constructors"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Regular functions");for(let s in e.functions){let{cName:l,value:u}=e.functions[s],c=l==="__yo_user_main",f=(r=(n=u.body)==null?void 0:n.$)==null?void 0:r.effectAnalysis,_=f&&f.hasEffects;if(!c&&!u.type.isClosure&&((i=u.specializedFunctionCaches)==null?void 0:i.length)>0||!c&&!_&&!u.isModuleEffectMember&&!u.type.isClosure&&!u.specializedType&&(((o=u.specializedFunctionCaches)==null?void 0:o.length)??0)===0&&Fn(u.specializedType??u.type).length===0&&[...u.type.implicitParameters,...u.type.parameters.filter(E=>E.isImplicit)].some(E=>_e(E.type)))continue;let d=u.specializedType??u.type,v=Fn(d).length>0;if(!c&&u.isIoAsyncStateMachineClosure||!c&&!_&&!v&&!u.isModuleEffectMember&&(_o(u.type)&&!u.type.isClosure||((a=u.specializedFunctionCaches)==null?void 0:a.length)>0&&!u.type.isClosure||ha(u)||$o(u)||u.isIoAsyncStateMachineClosure))continue;let y=u.specializedType??u.type,h=!_&&!u.isModuleEffectMember&&(y.parameters.some(E=>Xe(E.type))||y.forallParameters.length>0),g=Xe(y.return.type),T=H(y.return.type)&&y.return.type.requiredTraits.length>0;h||g&&!T&&!u.isModuleEffectMember||Am(y,l,!1,e,u.isModuleEffectMember?void 0:u.body,u.specializedType&&Fn(y).length===0&&Fn(u.type).some(E=>E.fieldFunctionType.forallParameters&&E.fieldFunctionType.forallParameters.length>0)?u.type:void 0)}t.emitDeclarationLine("/// Closure vtable instances"),t.emitDeclarationLine("")}function Fn(e){let t=[],n=dA(e.implicitParameters);for(let r of n)rt(r.type)?G$(r.label,r.type,[],t):_e(r.type)&&t.push({implicitLabel:r.label,fieldLabel:r.label,fieldPath:[r.label],fieldFunctionType:r.type,cParamName:Ve(r.label)});return t}function G$(e,t,n,r){for(let i of t.fields)if(_e(i.type)){let o=[...n,i.label],a=o.join("__");r.push({implicitLabel:e,fieldLabel:a,fieldPath:o,fieldFunctionType:i.type,cParamName:Ve(`${e}__${a}`)})}else rt(i.type)&&G$(e,i.type,[...n,i.label],r)}function dA(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;H(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),ln(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function bo(e,t,n,r,i){let o=r||se(e.return.type,n),a=e.parameters.filter(f=>!f.isCompileTimeOnly),s=[];e.isClosure&&s.push("void* closure_context");let l=a.map((f,_)=>{let p=Ve(f.label||`param${_}`);if(_e(f.type))return bo(f.type,"(*)",n).replace(" (*)(",` (*${p})(`);{let d;return H(f.type)&&yt(f.type)?f.type.resolvedConcreteType?d=se(f.type.resolvedConcreteType,n)+"*":d=se(f.type,n):d=se(f.type,n),`${d} ${p}`}});s.push(...l);let u=Fn(i??e);for(let f of u)if(f.fieldFunctionType.forallParameters&&f.fieldFunctionType.forallParameters.length>0)s.push(`void* ${f.cParamName}`);else{let _=bo(f.fieldFunctionType,"(*)",n).replace(" (*)(",` (*${f.cParamName})(`);s.push(_)}let c=s.join(", ");return`${o} ${t}(${c})`}function Am(e,t,n,r,i,o){var _,p,d,v;let a;if(i&&yt(e.return.type)){let y=pu(i);(_=y==null?void 0:y.$)!=null&&_.asyncStateMachineStructName?a=`${y.$.asyncStateMachineStructName}*`:(p=i.$)!=null&&p.type&&H(i.$.type)&&yt(i.$.type)&&(a=se(i.$.type,r))}if(i&&H(e.return.type)&&!yt(e.return.type)&&(d=i.$)!=null&&d.type&&(a=se(i.$.type,r)),!a&&i&&((v=i.$)!=null&&v.type)&&!yt(e.return.type)){let y=se(e.return.type,r),h=se(i.$.type,r);y!==h&&(a=h)}let s=a?bo(e,t,r,a,o):bo(e,t,r,void 0,o),l=O(e),u=t==="__yo_user_main"||r.exportedFunctionLabels&&[...r.exportedFunctionLabels.values()].some(y=>Ve(y)===t),c=!n&&!u&&(t.includes("___drop")||t.includes("___dup")||t.includes("___dispose")),f=n?"extern ":u?"":c?"static inline __attribute__((always_inline)) ":"static inline ";r.emitter.emitDeclarationLine(`${f}${s}; // ${l}`)}function mA(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(Oe(r)&&r.isReferenceSemantics){if(r.fields.some(l=>Xe(l.type)))continue;let a=`__yo_new_${i}`,s=r.fields.map(l=>{let u=se(l.type,e),c=Ve(l.label);return`${u} ${c}`}).join(", ");t.emitDeclarationLine(`static ${i}* ${a}(${s}); // Constructor`)}}}function yA(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 W$(e){let t=new Set;for(let n in e.functions){let{value:r,cName:i}=e.functions[n],o=r.specializedType;if(ha(r)||!o||!Di(r.type)||Di(o))continue;let a=o.parameters.some(f=>Xe(f.type)),s=Xe(o.return.type);if(a||s||Fn(r.type).some(f=>f.fieldFunctionType.forallParameters&&f.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}${bo(o,i,e)}; // specialized function: ${O(r.type)}`)}}function Co(e,t,n){let r=ve(t,e);return r.length===0?!1:r[r.length-1].frameLevel<=n}function j$(e){var t,n;return!!((t=e.$)!=null&&t.closureFunctionValue&&((n=e.$)!=null&&n.type)&&ur(e.$.type))}function gA(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 v=l_(d);v&&l.set(v,d)}let u=e.fields.map(d=>{var g,T;if(d.isEffectParam)return"NULL";let v,y=d.exprs.expr;if((T=(g=y.$)==null?void 0:g.deferredDupExpressions)!=null&&T.length&&(v=y.$.deferredDupExpressions[0]),!v){let E=[d.label];Q(y)&&E.push(y.token.value);for(let $ of E){let k=l.get($);if(k){v=k;break}}}if(v)return J(v,r,i);let h={tag:"Atom",token:y.token,$:y.$};return J(h,r,i)}),c=`(${s}){ ${u.map((d,v)=>{let y=e.fields[v];return y?`.${y.label} = ${d}`:`/* Error: missing field at index ${v} */`}).join(", ")} }`,f=n.token.position.row!==void 0?`${Date.now()}_${n.token.position.row}`:`${Date.now()}_${Math.random().toString(36).substr(2,9)}`,_=`__capture_${t}_${f}`;return o?i.emitter.emitLine(`${r}${s} ${_} = ${c};`):(i.emitter.emitLine(`${r}${s}* ${_} = (${s}*)__yo_malloc(sizeof(${s}));`),i.emitter.emitLine(`${r}*${_} = ${c};`)),{captureTempVar:_,captureCName:s}}function H$(e,t,n){var d,v;if(!e.$||!e.$.type||!e.$.closureFunctionValue)return"// Error: Missing closure metadata";let r=Er(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=ht(e.$.type),u;if(l){let y=n.types[e.$.type.id];if(!y)return"// Error: Dyn closure type not found in context";u=y.cName}let c=a&&Oe(a)&&a.fields.length>0,f=se(i.return.type,n),_=i.parameters.map(y=>se(y.type,n)).join(", "),p=`(${f} (*)(void*${_?", "+_:""}))${s}`;if(c&&a&&Oe(a)){let y=!l,h=gA(a,i.id,e,t,n,y);if(!h)return"// Error: Failed to allocate closure capture";let{captureTempVar:g}=h;if(l){let T=`__yo_create_${u}`,E=`__yo_dispose_${u}`;return`${T}(${g}, ${E}, ${p})`}else return n.implClosureCallMap.set(a.id,{functionCName:s,callTypeId:r.isFn.callType.id,callType:r.isFn.callType,consumedCaptures:(v=o.closureInfo)==null?void 0:v.consumedCaptures}),g}else if(l){let y=`__yo_create_${u}`,h=`__yo_dispose_${u}`;return`${y}(NULL, ${h}, ${p})`}else{if(e.$.type.tag==="SomeType"){let y=e.$.type;if(y.resolvedConcreteType)return n.implClosureCallMap.set(y.resolvedConcreteType.id,{functionCName:s,callTypeId:r.isFn.callType.id,callType:r.isFn.callType}),`(${se(y.resolvedConcreteType,n)}){}`}return"// Error: Impl(Fn(...)) without captures missing resolvedConcreteType"}}function xm(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=J(a,t,n);s&&n.emitter.emitLine(`${t}${s};`)}}}function ul(e,t,n=""){var a,s,l,u,c,f,_,p,d,v,y,h,g,T,E,$,k,C,w,I,L,x,V,M,q,P,R,te,j;let r=t;if(e.token.value==="continue"){if(r.currentContinueLabel)return xm(r,n,t),`goto ${r.currentContinueLabel}`;if(r.currentLoopLabel)return xm(r,n,t),"continue";if(r.smWhileContinueInfo){if(r.smWhileContinueInfo.emitDropsBeforeGoto&&r.smWhileBodyDrops&&r.smWhileBodyDrops.length>0){let Y=t.emitter;for(let le of r.smWhileBodyDrops){let Z=J(le,n,t);Z&&Z.includes("sm->")&&Y.emitLine(`${n}${Z};`)}}if(r.smWhileContinueInfo.stepExpr){let Y=t.emitter,le=J(r.smWhileContinueInfo.stepExpr,n,t);le&&Y.emitLine(`${n}${le};`)}return`goto ${r.smWhileContinueInfo.label}`}return"continue"}if(e.token.value==="break"){if(r.currentLoopLabel)return xm(r,n,t),r.insideMatch?`goto ${r.currentLoopLabel}`:"break";if(r.smWhileBreakInfo){let{label:Y,activeIndex:le}=r.smWhileBreakInfo;if(r.smWhileBodyDrops&&r.smWhileBodyDrops.length>0){let Z=t.emitter;for(let ce of r.smWhileBodyDrops){let Te=J(ce,n,t);Te&&Te.includes("sm->")&&Z.emitLine(`${n}${Te};`)}}return le!==void 0?(t.emitter.emitLine(`${n}sm->while_loop_${le}_active = false;`),`goto ${Y}`):`goto ${Y}`}return"break"}if(e.token.value==="return"){if(r.inAsyncStateMachine){let Y=t.emitter,le=r.inAsyncStateMachine.futureType,ce=jn(le).isFuture.outputType,Te=Ke(ce);if((a=e.$)!=null&&a.deferredDropExpressions)for(let ge of e.$.deferredDropExpressions){let be=J(ge,n,t);be&&be.includes("sm->")&&Y.emitLine(`${n}${be};`)}if(r.pendingDeferredDrops&&r.pendingDeferredDrops.length>0){Y.emitLine(`${n}// Drop local variables before early completion`);for(let ge of r.pendingDeferredDrops){let be=J(ge,n,t);be&&be.includes("sm->")&&Y.emitLine(`${n}${be};`)}}Y.emitLine(`${n}// Early return - complete the result Future`);let Ie=Te?void 0:`(${se(ce,t)}){0}`;return Oo({emitter:Y,indent:n,resultCode:Ie,debugLabel:t.currentFunctionName}),""}return"return"}if((s=e.$)!=null&&s.type&&Ke(e.$.type))return"";if((r.inAsyncStateMachine||r.inEffectStateMachine)&&r.stateMachineVariables){let Y=e.token.value;if((l=r.localShadowedVariables)!=null&&l.has(Y))return Ve(Y);let le=!1;if((u=e.$)!=null&&u.env){let Z=ve(e.$.env,Y);if(Z.length>0){let ce=Z[Z.length-1],Te=ce.isOwningTheSameRcValueAs?ce.isOwningTheSameRcValueAs.id:ce.id;(c=r.variableIdRemapping)!=null&&c.has(Te)&&(Te=r.variableIdRemapping.get(Te));let Ie=r.stateMachineVariables.get(Te);if(Ie){let ge=(f=r.stateMachineFieldAliases)==null?void 0:f.get(Te);if(ge)return le=!0,`sm->${ge}`;let be=Ie.kind==="outer"?`__capture.${Y}`:`var_${Ie.id}`;return le=!0,`sm->${be}`}}}if(!le){for(let[Z,ce]of r.stateMachineVariables)if(ce.name===Y){let Te=(_=r.stateMachineFieldAliases)==null?void 0:_.get(Z);if(Te)return le=!0,`sm->${Te}`;let Ie=ce.kind==="outer"?`__capture.${Y}`:`var_${Z}`;return le=!0,`sm->${Ie}`}}if((p=e.$)!=null&&p.env){let Z=ve(e.$.env,Y);if(Z.length>0){let ce=Z[Z.length-1];if(ce.isOwningTheSameRcValueAs){let Te=ce.isOwningTheSameRcValueAs.name,Ie=ce.isOwningTheSameRcValueAs.id;for(let[ge,be]of r.stateMachineVariables)if(be.name===Te||ge===Ie)return`sm->${be.kind==="outer"?`__capture.${Te}`:`var_${ge}`}`}}}if(r.currentClosureCaptures&&r.currentClosureCaptures.includes(Y)&&r.currentClosureCaptureFrameLevel!==void 0){let Z=r.currentClosureCaptureTypeCName;return Z?`((${Z}*)closure_context)->${ot(Y,(d=e.$)==null?void 0:d.env)}`:`closure_context->${ot(Y,(v=e.$)==null?void 0:v.env)}`}if((y=e.$)!=null&&y.variableName){if((h=e.$)!=null&&h.env&&((g=e.$)!=null&&g.value)&&!Ge(e.$.value)){let Z=ve(e.$.env,e.$.variableName);if(Z.length>0&&Z[Z.length-1].isCompileTimeOnly)return yr(e.$.value,t,e)}return ot(e.$.variableName,e.$.env)}}if((T=e.$)!=null&&T.variableName){if((E=e.$)!=null&&E.env&&(($=e.$)!=null&&$.value)&&!Ge(e.$.value)){let Y=ve(e.$.env,e.$.variableName);if(Y.length>0&&Y[Y.length-1].isCompileTimeOnly)return yr(e.$.value,t,e)}if(!(r.currentClosureCaptures&&r.currentClosureCaptures.includes(e.token.value)&&((k=e.$)!=null&&k.env)&&r.currentClosureCaptureFrameLevel!==void 0&&Co(e.token.value,e.$.env,r.currentClosureCaptureFrameLevel)))return ot(e.$.variableName,(C=e.$)==null?void 0:C.env)}if((w=e.$)!=null&&w.value&&!Ge(e.$.value))return yr(e.$.value,t,e);let i=(I=e.$)!=null&&I.env&&r.currentClosureCaptureFrameLevel!==void 0?Co(e.token.value,e.$.env,r.currentClosureCaptureFrameLevel):!1;if(r.currentClosureCaptures&&r.currentClosureCaptures.includes(e.token.value)&&r.currentClosureCaptureFrameLevel!==void 0&&(!((L=e.$)!=null&&L.env)||i)){let Y=r.currentClosureCaptureTypeCName;return Y?`((${Y}*)closure_context)->${ot(e.token.value,(x=e.$)==null?void 0:x.env)}`:`closure_context->${ot(e.token.value,(V=e.$)==null?void 0:V.env)}`}if(r.currentFunctionName&&!r.currentClosureCaptures){let Y=Object.values(r.functions).find(le=>le.cName===r.currentFunctionName);if(Y&&Y.value.type.isClosure){let le=Object.values(r.types).find(Z=>_e(Z.type)&&Z.type.isClosure&&Z.type===Y.value.type);if(le)return`((${`${le.cName}_capture`}*)closure_context->data)->${ot(e.token.value,(M=e.$)==null?void 0:M.env)}`}}if((q=e.$)!=null&&q.env){let Y=ve(e.$.env,e.token.value);if(Y.length>0){let le=Y[Y.length-1];if((P=le.value)!=null&&P[0]&&Se(le.value[0])){let Z=(R=t.functions[le.value[0].funcId])==null?void 0:R.cName;if(Z)return Z}else if(_e(le.type)&&(Ge((te=le.value)==null?void 0:te[0])||le.value===void 0)){let Z=Object.entries(t.functions).find(([ce,Te])=>Te.value.funcName===e.token.value);if(Z)return Z[1].cName}}}return ot(e.token.value,(j=e.$)==null?void 0:j.env)}function Y$(e,t,n){var y,h,g,T,E,$,k,C,w,I,L,x,V,M,q,P,R,te,j,Y;let r;if(Qn(e)){let le=(h=(y=e.$)==null?void 0:y.runtimeArgExprsInOrder)==null?void 0:h[0],Z=(g=le==null?void 0:le.$)==null?void 0:g.closureFunctionValue;Z&&Se(Z)&&(r=Z.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||!yt(i))return"/* Error: async block must have Future type */";let o=jn(i);if(!o)return"/* Error: Could not extract Future module type */";let a=((E=e.$)==null?void 0:E.variableName)||`async_block_${Date.now()}`,s=`${a}_state_t`,l=`${a}_resume`,u=`__yo_new_${a}`,c=`${a}_state_dispose`;n.types[i.id]={type:i,cName:s};let f=($=e.$)==null?void 0:$.awaitAnalysis;if(!f)throw new Error("Missing await analysis for async block. This should have been computed during evaluation.");let _=o.isFuture.outputType;if(H(_))if(_.resolvedConcreteType)_=_.resolvedConcreteType;else{let le=(C=(k=e.$)==null?void 0:k.runtimeArgExprsInOrder)==null?void 0:C[0],Z=(w=le==null?void 0:le.$)==null?void 0:w.closureFunctionValue;if(Z&&Se(Z)){let ce=(L=(I=Z.type)==null?void 0:I.return)==null?void 0:L.type;if(ce&&H(ce)&&ce.resolvedConcreteType)_=ce.resolvedConcreteType;else if((V=(x=Z.body)==null?void 0:x.$)!=null&&V.type){let Te=Z.body.$.type;H(Te)&&Te.resolvedConcreteType?_=Te.resolvedConcreteType:H(Te)||(_=Te)}}}let p=se(_,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(""),(M=e.$)!=null&&M.captureType){let le=e.$.captureType,Z=Object.values(n.types).find(Te=>Te.type===le),ce=Z?Z.cName:`async_capture_${le.id}`;d.emitDeclarationLine(`${s}* ${u}(${ce} __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:_,resultTypeCName:p,captureType:(q=e.$)==null?void 0:q.captureType,analysis:f});let v=(P=e.$)==null?void 0:P.captureType;if(v){let le=Object.values(n.types).find(We=>We.type===v),Z=le?le.cName:`async_capture_${v.id}`,ce=n,Te=ce.currentClosureCaptures!==void 0||ce.inAsyncStateMachine!==void 0||ce.inEffectStateMachine!==void 0,Ie=!1,ge=v.fields.map(We=>{var $e,Le;if(We.isEffectParam)return`.${We.label} = NULL`;let pe;if(!Te&&(($e=e.$)!=null&&$e.deferredDupExpressions))for(let Me of e.$.deferredDupExpressions){let Ze;if(S(Me)&&(Me.args.length>0&&Q(Me.args[0])?Ze=Me.args[0].token.value:Me.args.length===0&&S(Me.func)&&b(Me.func,".")&&Me.func.args.length>=2&&Q(Me.func.args[0])&&(Ze=Me.func.args[0].token.value)),Ze===We.label){pe=Me;break}}if(pe)return Ie=!0,(Le=pe.$)!=null&&Le.variableName?(J(pe,t,n),`.${We.label} = ${pe.$.variableName}`):`.${We.label} = ${J(pe,t,n)}`;let fe={tag:"Atom",token:We.exprs.expr.token,$:We.exprs.expr.$};return`.${We.label} = ${ul(fe,n)}`}).join(", "),be=`(${Z}){${ge}}`;if(!Ie){let We=Ur(v,n);We&&(be=`${We}(${be})`)}let De=((R=e.$)==null?void 0:R.variableName)||"async_result",ze=`${u}(${be})`;if(De&&((te=e.$)!=null&&te.type)){let We=fn(e.$.type,De,n);return n.emitter.emitLine(`${t}${We} = ${ze};`),De}else return ze}else{let le=((j=e.$)==null?void 0:j.variableName)||"async_result",Z=`${u}()`;if(le&&((Y=e.$)!=null&&Y.type)){let ce=fn(e.$.type,le,n);return n.emitter.emitLine(`${t}${ce} = ${Z};`),le}else return Z}}function K$(e,t){var y;let n=t.emitter,{asyncBlockId:r,structName:i,resultType:o,resultTypeCName:a,captureType:s,analysis:l,crossBoundaryIds:u,awaitFutureTempVarAliases:c,overlappingSlotAliases:f,overlappingSlots:_}=e;if(n.emitDeclarationLine(`// State machine for async block ${r} - implements Future(${O(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)"),Ke(o)?n.emitDeclarationLine(" uint8_t result; // Dummy result for unit type"):n.emitDeclarationLine(` ${a} result; // The result value of type ${O(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),g=h?h.cName:`async_capture_${s.id}`;n.emitDeclarationLine(" // Captured variables from outer scope"),n.emitDeclarationLine(` ${g} __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))&&!(f!=null&&f.has(h.id)))),p.length>0){n.emitDeclarationLine(" // Local variables");for(let h of p){let g=se(h.type,t),T=$r(h.id,"local");n.emitDeclarationLine(` ${g} ${T}; // ${h.name}`)}n.emitDeclarationLine("")}if(_&&_.length>0){n.emitDeclarationLine(" // Overlapping storage slots (Phase 2)");for(let h of _)n.emitDeclarationLine(` ${h.cType} ${h.fieldName}; // shared: ${h.variableNames.join(", ")}`);n.emitDeclarationLine("")}if(l.awaitPoints.length>0){let h=[];for(let g of l.awaitPoints)if(!(Ke(g.resultType)||H(g.resultType)&&!g.resultType.resolvedConcreteType)&&g.isInsideCond){let $=g.resultType;if(g.futureType){let C=jn(g.futureType);C&&($=C.isFuture.outputType)}let k=se($,t);h.push(` ${k} await_result_${g.index};`)}if(h.length>0){n.emitDeclarationLine(" // Await result temporaries");for(let g of h)n.emitDeclarationLine(g);n.emitDeclarationLine("")}}if(l.awaitPoints.length>0){let h=l.awaitPoints.filter(g=>g.futureVariableId===void 0);if(h.length>0){n.emitDeclarationLine(" // Future references for awaits");for(let g of h){let T=g.expr;if(T.tag!=="FnCall")continue;let E=T.args[0],$=(y=E==null?void 0:E.$)==null?void 0:y.type;if(!$)throw new Error(`Internal error: await expression missing type info for future argument in async block ${r}`);let k=se($,t);n.emitDeclarationLine(` ${k} await_future_${g.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 v=l.awaitPoints.filter(h=>h.isInsideWhile);if(v.length>0){n.emitDeclarationLine(" // Loop state tracking for while loops with await");let h=l.awaitPoints.length;for(let g of v){n.emitDeclarationLine(` _Bool while_loop_${g.index}_active; // Whether while loop ${g.index} should continue`);let T=(g.whileNestingDepth??1)-1;for(let E=0;E<T;E++)n.emitDeclarationLine(` _Bool while_loop_${h}_active; // Whether outer while loop ${h} should continue`),h++}n.emitDeclarationLine("")}n.emitDeclarationLine("};"),n.emitDeclarationLine("")}function hA(e){var l;if(!e.deferredAsyncBlocks||e.deferredAsyncBlocks.length===0)return;let t=e.deferredAsyncBlocks,n=new Map;for(let u of t)n.set(u.structName,u);let r=new Map,i=new Map;for(let u of t)r.set(u.structName,new Set),i.set(u.structName,0);for(let u of t){let c=f=>{let _=r.get(f);_.has(u.structName)||(_.add(u.structName),i.set(u.structName,(i.get(u.structName)??0)+1))};for(let f of u.analysis.capturedVariables){let _;try{_=se(f.type,e)}catch{continue}let p=n.get(_);p&&p.structName!==u.structName&&c(p.structName)}for(let f of u.analysis.awaitPoints){if(f.futureVariableId!==void 0)continue;let _=f.expr;if(_.tag!=="FnCall")continue;let p=_.args[0],d=(l=p==null?void 0:p.$)==null?void 0:l.type;if(!d)continue;let v;try{v=se(d,e)}catch{continue}let y=n.get(v);y&&y.structName!==u.structName&&c(y.structName)}}let o=[];for(let[u,c]of i.entries())c===0&&o.push(u);let a=[];for(;o.length>0;){let u=o.shift();a.push(u);let c=r.get(u);if(c)for(let f of c){let _=(i.get(f)??0)-1;i.set(f,_),_===0&&o.push(f)}}let s=a.length===t.length?a.map(u=>n.get(u)).filter(Boolean):t;for(let u of s){let{crossBoundaryIds:c,awaitFutureTempVarAliases:f,variableSegments:_}=c_(u.bodyExpr,u.analysis),{slotAliases:p,slots:d}=f_(c,_,u.analysis.capturedVariables,f,e);K$({asyncBlockId:u.asyncBlockId,structName:u.structName,resultType:u.resultType,resultTypeCName:u.resultTypeCName,captureType:u.captureType,analysis:u.analysis,crossBoundaryIds:c,awaitFutureTempVarAliases:f,overlappingSlotAliases:p,overlappingSlots:d},e)}}function vA(e,t,n,r,i,o,a,s,l,u){var f;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&&mt(i)){let _=Object.values(u.types).find(p=>p.type===i);if(!_)c.emitLine(" /* Error: capture struct type not found in context */");else{let p=_.cName,d=i.trait.fields.find(v=>v.label===F.___drop[0]);if(d&&d.assignedValue&&Se(d.assignedValue)){let v=(f=u.functions[d.assignedValue.funcId])==null?void 0:f.cName;v&&(c.emitLine(' ASYNC_DEBUG(" Dropping capture struct\\n");'),c.emitLine(` ${v}(sm->__capture);`))}else c.emitLine(` /* Warning: ___drop function not found for capture struct ${p} */`)}}if(c.emitLine(""),!Ke(r)&&mt(r)){let _=se(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=zi(r,u);p?c.emitLine(` ${p}(sm->result);`):c.emitLine(` /* Warning: No ___drop function found for result type ${_} */`),c.emitLine(" }")}c.emitLine("");{let _=[];for(let p of o.capturedVariables){if(p.kind!=="local"||!s.has(p.id)||l.has(p.id)||p.isOwningTheSameRcValueAs!==void 0)continue;let v=`sm->${$r(p.id,"local")}`;if(ht(p.type))_.push(` if ((${v}).data != NULL) { __yo_decr_rc((void*)(${v}).data); }`);else if(Vn(p.type)||uo(p.type))_.push(` if (${v} != NULL) { __yo_decr_rc_atomic((void*)${v}); }`);else if(dn(p.type)||H(p.type)&&Ar(p.type)){let y=zi(p.type,u);y?_.push(` if (${v} != NULL) { ${y}(${v}); }`):_.push(` if (${v} != NULL) { __yo_decr_rc((void*)${v}); }`)}else if(mt(p.type)){let y=zi(p.type,u);y&&_.push(` ${y}(${v});`)}}if(_.length>0){c.emitLine(" // Drop local variables on escape (state == -2)"),c.emitLine(" if (sm->state == -2) {");for(let p of _)c.emitLine(p);c.emitLine(" }")}}c.emitLine(" // Memory freed by __yo_decr_rc after this function returns"),c.emitLine("}")}function TA(e,t,n,r,i,o,a,s,l,u){let c=u.emitter;if(l){let f=Object.values(u.types).find(p=>p.type===l),_=f?f.cName:`async_capture_${l.id}`;c.emitLine(`${t}* ${r}(${_} __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 f=u.disposeTypeIds.get(i);f===void 0&&(f=u.nextDisposeTypeId,u.nextDisposeTypeId=f+1,u.disposeTypeIds.set(i,f)),c.emitLine(` sm->header.type_id = ${f};`)}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)"),Ke(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 X$(e){if(!e.deferredAsyncBlocks||e.deferredAsyncBlocks.length===0)return;let t=e.emitter;hA(e),t.emitLine("// Deferred async block implementations");let n=0;for(;n<e.deferredAsyncBlocks.length;){let r=e.deferredAsyncBlocks[n],i=e.deferredAsyncBlocks.length,{bodyExpr:o,asyncBlockId:a,structName:s,resumeFunctionName:l,constructorName:u,disposeFunctionName:c,futureType:f,resultType:_,resultTypeCName:p,captureType:d,analysis:v}=r,y=e.stateMachineVariables,h=e.currentEvidenceParams,g=new Map,{crossBoundaryIds:T,awaitFutureTempVarAliases:E,variableSegments:$}=c_(o,v),{slotAliases:k}=f_(T,$,v.capturedVariables,E,e),C=v.capturedVariables.filter(V=>V.kind==="outer"||T.has(V.id)||E.has(V.id)||k.has(V.id)),w={...v,capturedVariables:C};for(let V of C)g.set(V.id,V);if(d)for(let V of d.fields)g.set(V.label,{id:V.label,name:V.label,type:V.type,kind:"outer",isOwningTheSameRcValueAs:void 0});e.stateMachineVariables=g;let I=e.stateMachineFieldAliases,L=new Map(E);for(let[V,M]of k)L.set(V,M);e.stateMachineFieldAliases=L;let x=z$(o,a,s,l,w,f,d,e);if(e.stateMachineVariables=y,e.currentEvidenceParams=h,e.stateMachineFieldAliases=I,t.emitLine(""),vA(a,s,c,_,d,w,x,T,E,e),t.emitLine(""),TA(a,s,l,u,c,f,_,p,d,e),t.emitLine(""),e.deferredAsyncBlocks.length>i){let V=e.deferredAsyncBlocks.slice(i);for(let M of V){let{crossBoundaryIds:q,awaitFutureTempVarAliases:P,variableSegments:R}=c_(M.bodyExpr,M.analysis),{slotAliases:te,slots:j}=f_(q,R,M.analysis.capturedVariables,P,e);K$({asyncBlockId:M.asyncBlockId,structName:M.structName,resultType:M.resultType,resultTypeCName:M.resultTypeCName,captureType:M.captureType,analysis:M.analysis,crossBoundaryIds:q,awaitFutureTempVarAliases:P,overlappingSlotAliases:te,overlappingSlots:j},e)}}n++}}function Q$(e){for(let t in e.functions){let{value:n}=e.functions[t];n.body&&J$(n.body,e)}}var EA=["__yo_poll_","__yo_fs_event_","__yo_async_"];function $A(e){return EA.some(t=>e.startsWith(t))}function J$(e,t){var n,r,i,o,a,s,l;if(e&&S(e)){let u=e;if(Qn(e)){t.usesAsync=!0;let c=(n=e.$)==null?void 0:n.type;if(c&&yt(c)&&jn(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(Qn(e)){let c=(i=e.$)==null?void 0:i.type;if(c&&yt(c)&&jn(c)){let _=((o=e.$)==null?void 0:o.variableName)||`io_async_block_${Date.now()}`,p=!!((a=e.$)!=null&&a.awaitAnalysis),d=p?`${_}_state_t`:`${_}_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"}`)}}(Or(e)||jf(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"&&$A(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)J$(c,t)}}function Z$(e,t,n){var C,w,I,L,x,V,M,q,P,R,te,j;let r=(C=e.$)==null?void 0:C.type;if(!r||!yt(r))return"/* Error: io.async must return a Future type */";let i=jn(r);if(!i)return"/* Error: Could not extract Future module type */";let o=i.isFuture.outputType;if(H(o))if(o.resolvedConcreteType)o=o.resolvedConcreteType;else{let Y=(I=(w=e.$)==null?void 0:w.runtimeArgExprsInOrder)==null?void 0:I[0],le=(L=Y==null?void 0:Y.$)==null?void 0:L.closureFunctionValue;if(le&&Se(le)){let Z=(V=(x=le.type)==null?void 0:x.return)==null?void 0:V.type;if(Z&&H(Z)&&Z.resolvedConcreteType)o=Z.resolvedConcreteType;else if((q=(M=le.body)==null?void 0:M.$)!=null&&q.type){let ce=le.body.$.type;H(ce)&&ce.resolvedConcreteType?o=ce.resolvedConcreteType:H(ce)||(o=ce)}}}let a=se(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,f=(te=(R=e.$)==null?void 0:R.runtimeArgExprsInOrder)==null?void 0:te[0];if(!(f!=null&&f.$))return"/* Error: Missing closure argument for io.async */";let _=J(f,t,n),p=f.$.type,d,v;if(H(p)&&p.resolvedConcreteType){let Y=p.resolvedConcreteType,le=n.implClosureCallMap.get(Y.id);le&&(d=le.functionCName);let Z=n.types[Y.id];Z&&(v=Z.cName)}if(!d||!v)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;"),Ke(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(` ${v} __capture;`),c.emitDeclarationLine("};"),c.emitDeclarationLine("");let y="";for(let Y in n.functions){let le=n.functions[Y];if(le.cName===d){let Z=Fn(le.value.type);Z.length>0&&(y=", "+Z.map(ce=>`(void*)sm->__capture.${ce.fieldPath.join(".")}`).join(", "));break}}c.emitDeclarationLine(`void ${u}(void* ptr) {`),c.emitDeclarationLine(` ${s}* sm = (${s}*)ptr;`),Ke(o)?c.emitDeclarationLine(` ${d}(&sm->__capture${y});`):c.emitDeclarationLine(` sm->result = ${d}(&sm->__capture${y});`),y&&(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=f.$.captureType,g=h&&mt(h)?zi(h,n):void 0,T=h&&mt(h)?Ur(h,n):void 0,E=zi(o,n);c.emitDeclarationLine(`void ${l}(void* ptr) {`),(g||E)&&(c.emitDeclarationLine(` ${s}* sm = (${s}*)ptr;`),g&&(c.emitDeclarationLine(" // Drop captured variables (future owns its references)"),c.emitDeclarationLine(` ${g}(sm->__capture);`)),E&&(c.emitDeclarationLine(" if (sm->state == -1) {"),c.emitDeclarationLine(` ${E}(sm->result);`),c.emitDeclarationLine(" }"))),c.emitDeclarationLine("}"),c.emitDeclarationLine("");let $=((j=e.$)==null?void 0:j.variableName)||"__io_async_result",k=fn(r,$,n);if(c.emitLine(`${t}${k} = (${s}*)__yo_malloc(sizeof(${s}));`),c.emitLine(`${t}memset(${$}, 0, sizeof(${s}));`),c.emitLine(`${t}${$}->header.ref_count = 1;`),n.needsCycleGC&&(c.emitLine(`${t}${$}->header.gc_flags = 0;`),c.emitLine(`${t}${$}->header.gc_mark = __YO_GC_UNMARKED;`),c.emitLine(`${t}${$}->header.gc_next = NULL;`),c.emitLine(`${t}${$}->header.gc_prev = NULL;`)),n.needsCycleGC)c.emitLine(`${t}${$}->header.dispose_fn = (void(*)(void*))${l};`);else{n.disposeTypeIds||(n.disposeTypeIds=new Map,n.nextDisposeTypeId=1);let Y=n.disposeTypeIds.get(l);Y===void 0&&(Y=n.nextDisposeTypeId,n.nextDisposeTypeId=Y+1,n.disposeTypeIds.set(l,Y)),c.emitLine(`${t}${$}->header.type_id = ${Y};`)}return n.needsCycleGC&&c.emitLine(`${t}${$}->header.traverse_fn = NULL;`),c.emitLine(`${t}${$}->__capture = ${_};`),T&&c.emitLine(`${t}${$}->__capture = ${T}(${$}->__capture);`),c.emitLine(`${t}${$}->state = 0;`),c.emitLine(`${t}${$}->__yo_resume_fn = ${u};`),c.emitLine(`${t}${$}->continuation_fn = NULL;`),c.emitLine(`${t}${$}->continuation_sm = NULL;`),$}function eb(e,t){for(let i=0;i<e.fields.length;i++){let o=e.fields[i];Se(o)&&(Uo(o.type,t),Ta(o.body,t))}if(t.moduleLevelInitExprs)for(let i of t.moduleLevelInitExprs)Ta(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(Uo(o.value.type,t),o.value.specializedType&&Uo(o.value.specializedType,t),Ta(o.value.body,t),o.value.calledComptimeFunctionCaches)for(let a of o.value.calledComptimeFunctionCaches)a.value&&a.value.type&&Zn(a.value.type,t),Ta(a.body,t)}}}function Uo(e,t){for(let n of e.parameters)Zn(n.type,t);for(let n of e.forallParameters)Zn(n.type,t);Zn(e.return.type,t)}function Ta(e,t){var n;if(e.$&&e.$.type&&Zn(e.$.type,t),e.$&&e.$.value&&Se(e.$.value)){let r=e.$.value;r.isControlFunction?(Uo(r.type,t),Hn(r.body,t)):t.functions[r.funcId]||r.type.parameters.map(a=>a.type).some(a=>H(a)&&yt(a)&&!a.resolvedConcreteType)||(t.functions[r.funcId]={value:r,cName:Ve(r.funcId)},Uo(r.type,t),Hn(r.body,t))}if(e.$&&e.$.deferredDropExpressions&&e.$.deferredDropExpressions.length>0)for(let r of e.$.deferredDropExpressions)Ta(r,t);if(e.$&&e.$.macroExpansion&&Ta(e.$.macroExpansion,t),e.$&&e.$.runtimeDestructurings)for(let{type:r}of e.$.runtimeDestructurings)Zn(r,t);if(e.$&&e.$.captureType&&Oe(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)Zn(i.type,t);for(let i of r.trait.fields)if(i.assignedValue&&Se(i.assignedValue)){let o=i.assignedValue;t.functions[o.funcId]||(t.functions[o.funcId]={value:o,cName:o.funcId},Uo(o.type,t),Hn(o.body,t))}}}switch(e.tag){case"FnCall":if(b(e,B.test))break;Ta(e.func,t);for(let r of e.args)Ta(r,t);break;case"Atom":(n=e.$)!=null&&n.value&&X(e.$.value)&&Zn(e.$.value.value,t);break}}function Zn(e,t){if(!t.types[e.id]){if(H(e)&&ur(e)){if(e.resolvedConcreteType){Zn(e.resolvedConcreteType,t);return}let n=Er(e);n&&Zn(n,t);return}if(H(e)&&yt(e)){let n=jn(e);n&&Zn(n.isFuture.outputType,t);return}if(H(e)&&e.resolvedConcreteType){Zn(e.resolvedConcreteType,t);return}if(!Xe(e)){if(Oe(e)||Ht(e)||Ye(e)||Tt(e)||ht(e)||rt(e)||_t(e)||Vt(e)||Vn(e)){let n=Vt(e)?se(e,t):e.isExtern==="c"&&e.externName?e.externName:`__yo_${e.id}`;if(t.types[e.id]={type:e,cName:n},Oe(e))for(let r of e.fields)Zn(r.type,t);if(Ye(e)){for(let r of e.variants)if(r.fields)for(let i of r.fields)Zn(i.type,t)}if(Ht(e))for(let r of e.fields)Zn(r.type,t);if(ht(e)){let r=e;for(let i of r.requiredTraits)Zn(i.traitType,t)}if(Vn(e)){let r=e;Zn(r.childType,t),se(r,t)}if(Vt(e)&&Zn(e.childType,t),rt(e)||_t(e)){for(let r of e.fields)Zn(r.type,t);for(let r of e.fields)if(r.assignedValue&&Se(r.assignedValue)){let i=r.assignedValue,o=i.type;if(o.parameters.every(s=>s.isCompileTimeOnly)&&o.return.isCompileTimeOnly)continue;t.functions[i.funcId]||(t.functions[i.funcId]={value:i,cName:Ve(i.funcId)},Uo(i.type,t),Hn(i.body,t))}else if(r.assignedValue&&(Rt(r.assignedValue)||on(r.assignedValue))){let i=r.assignedValue;gu(i,t,!1)}}}else if(ft(e)){let n=e,r=n.childType,i=n.length;if(Mt(i)){Zn(r,t);let o=se(r,t),a=`Array_${Ve(o)}_${i.value}`;t.arrayStructTypes.has(a)||t.arrayStructTypes.set(a,{childType:o,length:typeof i.value=="bigint"?Number(i.value):i.value}),t.types[e.id]={type:e,cName:a}}}else if(et(e)){if(Zn(e.childType,t),Vt(e.childType)){let r=e.childType.childType;Zn(r,t);let i=se(r,t),o=`Slice_${Ve(i)}`;t.sliceStructTypes.has(o)||t.sliceStructTypes.set(o,{childType:i})}t.types[e.id]={type:e,cName:se(e,t)}}else V$.has(e.tag)&&(t.types[e.id]={type:e,cName:se(e,t)});e.trait&&Zn(e.trait,t)}}}function ts(e){var t,n,r;if(e.$&&e.$.value&&Ge(e.$.value)&&!(_e(e.$.type)&&e.$.type.isExtern)){if(!Ke(e.$.type))return!0}if(S(e)){if(ts(e.func))return!0;for(let i of e.args)if(!((t=i.$)!=null&&t.type&&Ke(i.$.type))&&ts(i))return!0}if(e.$&&e.$.macroExpansion){if(e.$.type&&Ke(e.$.type))return!1;if(ts(e.$.macroExpansion))return!0}if((n=e.$)!=null&&n.deferredDupExpressions){for(let i of e.$.deferredDupExpressions)if(ts(i))return!0}if((r=e.$)!=null&&r.deferredDropExpressions){for(let i of e.$.deferredDropExpressions)if(ts(i))return!0}return!1}function gu(e,t,n=!0){for(let r=0;r<e.fields.length;r++){let i=e.fields[r],o=e.type.fields[r];if(Se(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=Ve(a);Object.values(t.functions).some(c=>c.cName===l)?t.functions[i.funcId]={value:i,cName:Ve(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:Ve(i.funcId)};else if(n&&t.currentModuleId&&i.funcId.startsWith(`fn_${t.currentModuleId}_`)){let l=Ve(a);Object.values(t.functions).some(c=>c.cName===l)?t.functions[i.funcId]={value:i,cName:Ve(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:Ve(i.funcId)};Hn(i.body,t)}}}function tb(e,t){for(let n=0;n<e.fields.length;n++){let r=e.fields[n];r&&Se(r)?t.functions[r.funcId]||(r.isModuleEffectMember=!0,t.functions[r.funcId]={value:r,cName:Ve(r.funcId)},Hn(r.body,t)):r&&Rt(r)&&tb(r,t)}}function Hn(e,t){var i,o,a,s,l,u,c,f,_,p,d,v;if((i=e.$)!=null&&i.value&&Rt(e.$.value)){let y=e.$.value;tb(y,t)}if(S(e)&&b(e,B.test)||S(e)&&b(e,F.comptime_expect_error))return;if(e.$&&e.$.macroExpansion&&Hn(e.$.macroExpansion,t),(o=e.$)!=null&&o.effectAnalysis){let y=e.$.effectAnalysis.handlerValue;y&&Se(y)&&Hn(y.body,t)}if(e.$&&e.$.closureFunctionValue){let y=e.$.closureFunctionValue;t.functions[y.funcId]||(t.functions[y.funcId]={value:y,cName:Ve(y.funcId)},Hn(y.body,t))}if((a=e.$)!=null&&a.indexMethodValue&&Se(e.$.indexMethodValue)){let y=e.$.indexMethodValue;t.functions[y.funcId]||(t.functions[y.funcId]={value:y,cName:Ve(y.funcId)},Hn(y.body,t))}if(S(e)&&e.$&&e.$.dynCallTraitValues&&e.$.dynCallTraitValues.length>0){let y=e.$.type,h=e.args[0];if(ht(y)&&h&&((s=h.$)!=null&&s.type)){let g=h.$.type,T=e.$.dynCallTraitValues;if(T.length>0&&(dn(g)||hr(g))){let E=hr(g)?g.fields[0].type:g,$=`${E.id}_${y.id}`;t.dynImpls.set($,{dynType:y,concreteType:E,dataType:g,traitValues:T})}}}if(S(e)){let y=(l=e.func.$)==null?void 0:l.type,h=(u=e.func.$)==null?void 0:u.value;if(e.func.token.value==="?=")return;if(_e(y)){if(Se(h)&&h.isControlFunction){Hn(h.body,t);for(let g of e.args)Hn(g,t);return}if(Se(h)){if(h.type.return.isCompileTimeOnly||jd(h)&&!h.specializedType)return;if(h.specializedType&&_o(h.specializedType)&&Fn(h.specializedType).length===0){Hn(e.func,t);for(let T of e.args)Hn(T,t);return}if(!t.functions[h.funcId]){let g=!1;if(ts(h.body)){let T=h.specializedType??h.type;if(g=T.implicitParameters.length>0&&(Fn(T).length>0||!_o(h.type)&&h.type.implicitParameters.length>0),!g)return}if(!g&&!(Fn(h.specializedType??h.type).length>0)&&(h.specializedType??h.type).parameters.map(k=>k.type).some(k=>H(k)&&yt(k)&&!k.resolvedConcreteType))return;t.functions[h.funcId]={value:h,cName:Ve(h.funcId)},Hn(h.body,t)}}else if(y.isExtern==="c"){let g=y.externName?y.externName:Q(e.func)?e.func.token.value:y.id;t.externFunctions[y.id]={type:y,cName:g}}else if(y.isExtern==="yo"){let g=y.externName;if(!(g&&g.startsWith("__yo_"))){let T=g?Ve(g):Q(e.func)?Ve(e.func.token.value):Ve(y.id);t.externFunctions[y.id]={type:y,cName:T}}}}Hn(e.func,t);for(let g of e.args)Hn(g,t)}let n=(c=e.$)==null?void 0:c.type,r=(f=e.$)==null?void 0:f.value;if(_e(n)){if(Se(r)&&r.isControlFunction){if(r.isModuleEffectMember=!0,t.functions[r.funcId]||(t.functions[r.funcId]={value:r,cName:Ve(r.funcId)}),r.specializedFunctionCaches)for(let y of r.specializedFunctionCaches){let h=y.specializedFunction;h&&!t.functions[h.funcId]&&(h.isModuleEffectMember=!0,t.functions[h.funcId]={value:h,cName:Ve(h.funcId)},Hn(h.body,t))}Hn(r.body,t);return}if(Se(r)){if(jd(r)&&!r.specializedFunctionCaches||t.functions[r.funcId])return;if(ts(r.body))return;t.functions[r.funcId]={value:r,cName:Ve(r.funcId)},Hn(r.body,t)}}if(X((_=e.$)==null?void 0:_.value)&&Zn(e.$.value.value,t),(p=e.$)!=null&&p.deferredDupExpressions)for(let y of e.$.deferredDupExpressions)Hn(y,t);if((d=e.$)!=null&&d.deferredDropExpressions)for(let y of e.$.deferredDropExpressions)Hn(y,t);if((v=e.$)!=null&&v.dynCallTraitValues)for(let y of e.$.dynCallTraitValues)gu(y,t,!1)}function nb(e){let t=F.dispose[0];for(let n in e.types){let{type:r}=e.types[n];if(!Oe(r)||!r.isReferenceSemantics)continue;let i=ki({concreteType:r,methodName:t,env:r.env});for(let o of i)if(o.value&&Se(o.value)){let a=o.value;if(e.functions[a.funcId])continue;a.funcName||(a.funcName=t),e.functions[a.funcId]={value:a,cName:Ve(a.funcId)},Uo(a.type,e),Hn(a.body,e)}}}function rb(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 ib(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=H(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=se(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 f=`__yo_dispose_${u}`;if(e.needsCycleGC)t.emitLine(` box->header.dispose_fn = ${f};`);else{e.disposeTypeIds||(e.disposeTypeIds=new Map,e.nextDisposeTypeId=1);let d=e.disposeTypeIds.get(f);d===void 0&&(d=e.nextDisposeTypeId,e.nextDisposeTypeId=d+1,e.disposeTypeIds.set(f,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=(H(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&&Se(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 ob(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(!Dn(c))continue;let f=c.isFn.callType,_=se(f.return.type,e),p=`__yo_wrap_${a}_call`,d=["void* self_ptr"];for(let v=0;v<f.parameters.length;v++){let y=f.parameters[v],h=se(y.type,e);d.push(`${h} arg${v+1}`)}if(t.emitDeclarationLine(`static ${_} ${p}(${d.join(", ")}) {`),hr(l)){let v=((n=e.types[l.id])==null?void 0:n.cName)||`unknown_${l.id}`,y=Ve(l.fields[0].label);t.emitDeclarationLine(` ${v}* box = (${v}*)self_ptr;`);let h=l.fields[0].type,g=H(h)&&h.resolvedConcreteType?h.resolvedConcreteType:h,T=e.implClosureCallMap.get(g.id),E=(()=>{var k;if(T)return T.functionCName;for(let[,C]of Object.entries(e.functions)){let I=C.value.closureInfo;if(((k=I==null?void 0:I.captureType)==null?void 0:k.id)===g.id)return C.cName}})(),$=[];if(E){$.push(`(void*)&box->${y}`);for(let k=0;k<f.parameters.length;k++)$.push(`arg${k+1}`);So(f.return.type)?t.emitDeclarationLine(` ${E}(${$.join(", ")});`):t.emitDeclarationLine(` return ${E}(${$.join(", ")});`)}else{$.push(`box->${y}.data`);for(let k=0;k<f.parameters.length;k++)$.push(`arg${k+1}`);So(f.return.type)?t.emitDeclarationLine(` box->${y}.call(${$.join(", ")});`):t.emitDeclarationLine(` return box->${y}.call(${$.join(", ")});`)}}else{t.emitDeclarationLine(" (void)self_ptr; /* Dyn(Fn): expected Box(...) data */");for(let v=0;v<f.parameters.length;v++)t.emitDeclarationLine(` (void)arg${v+1};`);So(f.return.type)?t.emitDeclarationLine(" return;"):(t.emitDeclarationLine(` ${_} zero = (${_})0;`),t.emitDeclarationLine(" return zero;"))}t.emitDeclarationLine("}"),t.emitDeclarationLine("")}for(let c=0;c<s.dynType.requiredTraits.length;c++){let{traitType:f}=s.dynType.requiredTraits[c];if(Dn(f))continue;let _=s.traitValues[c];if(!_){t.emitDeclarationLine(`/* Warning: Module value missing for module ${c} */`);continue}let d=_.type.fields;for(let v=0;v<d.length;v++){let y=d[v];if(y.label==="Self"||u.has(y.label))continue;let h=_.fields[v];if(!h||!Se(h)){t.emitDeclarationLine(`/* Warning: Module field ${y.label} is not a function value */`);continue}let g=y.type;if(!_e(g)){t.emitDeclarationLine(`/* Warning: Module field ${y.label} is not a function type */`);continue}let T=h.funcId,E=(r=e.functions[T])==null?void 0:r.cName;if(!E){t.emitDeclarationLine(`/* Warning: Impl function for ${y.label} not found */`);continue}let $=`__yo_wrap_${a}_${y.label}`,k=se(g.return.type,e),C=["void* self_ptr"];for(let x=1;x<g.parameters.length;x++){let V=g.parameters[x],M=se(V.type,e);C.push(`${M} arg${x}`)}t.emitDeclarationLine(`static ${k} ${$}(${C.join(", ")}) {`);let w=(i=g.parameters[0])==null?void 0:i.type,I;if(hr(l)){let x=((o=e.types[l.id])==null?void 0:o.cName)||`unknown_${l.id}`,V=Ve(l.fields[0].label);t.emitDeclarationLine(` ${x}* box = (${x}*)self_ptr;`),w&&et(w)?I=`&box->${V}`:I=`box->${V}`}else{let x=se(s.concreteType,e);t.emitDeclarationLine(` ${x} concrete_value = (${x})self_ptr;`),w&&et(w)?I="&concrete_value":I="concrete_value"}let L=[I];for(let x=1;x<g.parameters.length;x++)L.push(`arg${x}`);So(g.return.type)?t.emitDeclarationLine(` ${E}(${L.join(", ")});`):t.emitDeclarationLine(` return ${E}(${L.join(", ")});`),t.emitDeclarationLine("}"),t.emitDeclarationLine("")}}}}}function ab(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=H(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=H(s.concreteType)&&s.concreteType.resolvedConcreteType?s.concreteType.resolvedConcreteType:s.concreteType,c=((o=e.types[u.id])==null?void 0:o.cName)||`unknown_${u.id}`,f=`__yo_vtable_${a}`,_=`${l}_vtable`,p=`__yo_typeid_${c}`;t.emitDeclarationLine(`// Vtable for impl(${c}, ${s.dynType.requiredTraits.map(({traitType:y})=>y.typeName||"?").join(" + ")})`),t.emitDeclarationLine(`static const ${_} ${f} = {`),t.emitDeclarationLine(` .__yo_type_id = (uintptr_t)&${p},`);let d=new Set,v=new Set([F.___dup[0],F.___drop[0],F.___dispose[0],F.dispose[0]]);for(let{traitType:y}of s.dynType.requiredTraits){if(Dn(y)){let h=`__yo_wrap_${a}_call`;t.emitDeclarationLine(` .call = ${h},`),d.add("call");continue}for(let h of y.fields)if(h.label!=="Self"&&!v.has(h.label)&&!d.has(h.label)&&(d.add(h.label),_e(h.type))){let g=h.type;if(g.parameters.length>0){let T=g.parameters[0];if(T&&T.label==="self"){let E=`__yo_wrap_${a}_${h.label}`;t.emitDeclarationLine(` .${Ve(h.label)} = ${E},`)}}}}t.emitDeclarationLine("};"),t.emitDeclarationLine("")}}function sb(e,t){let r=Jn(t)?"__declspec(thread)":"_Thread_local";e.emitLine(`
236
+ `;if(f.isNewtype&&f.fields.length===1&&e.fields.length===1){let p=yr(e.fields[0],t);return`((${_})(${p}))`}if(f.isReferenceSemantics){let p=e.fields.map(v=>yr(v,t));return`${`__yo_new_${_}`}(${p.join(", ")})`}else{let p=e.fields.map((d,v)=>{let y=d,h=Tt(f)?`_${v}`:Ve(f.fields[v].label),g=yr(y,t);return`.${h} = ${g}`});return`(${_}){ ${p.join(", ")} }`}}}else if(qr(e)){let f=e.type,_=se(f,t),p=e.elements.map(d=>yr(d,t));return`(${_}){ .data = { ${p.join(", ")} } }`}else if(Ie(e)){let f=(l=t.functions[e.funcId])==null?void 0:l.cName;return f||`// Error: No C function name found for function value with ID ${e.funcId}
237
+ `}else if(X(e)){let f=e.value;if(f)return t.types[f.id]?t.types[f.id].cName:`/* Error: No C type name found for type ${O(f)} */`}else if(bi(e)){let f=e.targetValue[0];if(f){let _=((u=n==null?void 0:n.$)==null?void 0:u.convertedRuntimeType)||((c=n==null?void 0:n.$)==null?void 0:c.type);if(_&&et(_)){let p=_.childType,d=yr(f,t,{$:{type:p,convertedRuntimeType:p}});if(d&&!d.startsWith("/*")&&!d.startsWith("//"))return`(&${d})`}}return`/* Error: Cannot generate pointer value ${bt(e)} */`}}return`/* skip generating: ${bt(e)} */`}function il(e,t,n){if(e===t)return!0;if(e.tag==="FnCall"){if(n&&n(e))return!1;if(il(e.func,t,n))return!0;for(let r of e.args)if(il(r,t,n))return!0}return!1}function iA(e,t,n){for(let r=0;r<t.length;r++)if(il(e,t[r].expr,n))return r;return-1}function R$(e,t,n){let r=[],i=n==null?void 0:n.shouldSkipBody;if(e.tag!=="FnCall"||!b(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=iA(l,t,i),c=(n==null?void 0:n.handleReturnStatements)&&(Tn(l,"return")||b(l,"return"));if(u!==-1){if(s.push(l),a.push(s),s=[],n!=null&&n.handleSequentialSuspensions)for(let f=u+1;f<t.length&&il(l,t[f].expr,i);f++)a.push([])}else if(c){s.push(l),a.push(s),s=[];break}else s.push(l)}s.length>0&&a.push(s);for(let l=0;l<a.length;l++){let u=a[l],c=l<t.length?t[l]:null;r.push({stateNumber:l,expressions:u,suspensionPoint:c})}return r}function Lm(e,t){let r=R$(e,t,{shouldSkipBody:Qn,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 oA(e,t){return il(e,t,Qn)}function O$(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&&oA(a,e.awaitPoint.expr),u=e.awaitPoint&&a.tag==="FnCall"&&(b(a,B.while)||b(a,B.cond)||b(a,B.match))&&Fr(a);if((l||u)&&e.awaitPoint)ll(a,e.awaitPoint,e.stateNumber,t,n);else if(s&&r){let c=J(a,t,n);c&&(i.emitLine(`${t}// Store final expression result`),i.emitLine(`${t}sm->result = ${c};`))}else{let c=J(a,t,n);!c||!a.$||un(a.$.env.modulePath,c)||i.emitLine(`${t}${c};`)}}}function ll(e,t,n,r,i){var a,s;let o=i.emitter;if(e.tag==="FnCall"&&Or(e)){let l=e.args[0];if(!l){o.emitLine(`${r}// Error: await without argument`);return}if(t.futureVariableId===void 0){let u=J(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"&&b(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"&&Or(u)){let c=u.args[0];if(!c){o.emitLine(`${r}// Error: await without argument`);return}let f=(a=l.token)==null?void 0:a.value;if(!f||!l.$){o.emitLine(`${r}// Error: Invalid variable name`);return}if(t.futureVariableId===void 0){let _=J(c,r,i);o.emitLine(`${r}// Store Future for await (variable: ${f})`),o.emitLine(`${r}sm->await_future_${t.index} = ${_};`)}else o.emitLine(`${r}// Store Future for await (variable: ${f}) - future already in state machine`);return}if(u.tag==="FnCall"&&b(u,B.cond)){let c;if(l.tag==="Atom"&&l.token.type==="identifier"&&l.$){let f=l.token.value,_=ve(l.$.env,f);_.length>0&&(c=_[_.length-1].id)}du(u,t,r,i,c);return}if(u.tag==="FnCall"&&b(u,B.match)){let c;if(l.tag==="Atom"&&l.token.type==="identifier"&&l.$){let f=l.token.value,_=ve(l.$.env,f);_.length>0&&(c=_[_.length-1].id)}mu(u,t,r,i,c);return}}if(e.tag==="FnCall"&&b(e,"=")){let l=e.args[0],u=e.args[1];if(l&&u){if(u.tag==="FnCall"&&b(u,B.cond)){let c=J(l,r,i);du(u,t,r,i,void 0,c||void 0);return}if(u.tag==="FnCall"&&b(u,B.match)){let c=J(l,r,i);mu(u,t,r,i,void 0,c||void 0);return}}}if(e.tag==="FnCall"&&b(e,B.cond)){du(e,t,r,i);return}if(e.tag==="FnCall"&&b(e,B.match)){mu(e,t,r,i);return}if(e.tag==="FnCall"&&b(e,B.while)){Im(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 du(e,t,n,r,i,o){var y,h,g,T,E,$,k,C,w,I,L,x,V,M,q,P;let a=r.emitter;if(e.tag!=="FnCall"||!b(e,B.cond)){a.emitLine(`${n}// Error: Expected cond expression`);return}let s=e.args;if(s.length===0){a.emitLine(`${n}// Error: cond must have at least one branch`);return}let l=[],u=-1;for(let R=0;R<s.length;R++){let te=s[R];if(te.tag==="FnCall"&&b(te,"=>")){let j=te.args[0];if(j&&!(Ut((y=j.$)==null?void 0:y.value)&&j.$.value.value===!1)){u=R;break}}}let c=!1;if(u>=0){let R=s[u];if(R.tag==="FnCall"&&b(R,"=>")){let te=R.args[0];te&&Ut((h=te.$)==null?void 0:h.value)&&te.$.value.value===!0&&(c=!0)}}if(c&&u>=0){let R=s[u],te=S(R)?R.args[1]:void 0;if(te)if(va(te)){let Z=sl(te,t,n,r),ce=(g=r.asyncWhileLoopInfo)==null?void 0:g.get(t.index);if(ce&&Z.length>0){let Te=(T=r.asyncCondBranchInfo)==null?void 0:T.get(t.index),Se=(Te==null?void 0:Te.branches.some(ge=>ge.hasAwait&&ge.remainingExprs&&ge.remainingExprs.length>0))??!1;ce.condBranchPostWhileExprs={branchIndex:u,condBranchFieldIndex:t.index,exprs:Z,deferredDropExpressions:(E=te.$)==null?void 0:E.deferredDropExpressions,skipCondBranchCheck:Se},l.push({index:u,value:te,hasAwait:!0,remainingExprs:[],deferredDropExpressions:($=te.$)==null?void 0:$.deferredDropExpressions})}else l.push({index:u,value:te,hasAwait:!0,remainingExprs:Z,deferredDropExpressions:(k=te.$)==null?void 0:k.deferredDropExpressions})}else{if(ol(e,te,r,i,o))al(te,n,r);else if(S(te)&&b(te,B.begin)){let Z=te.args;for(let ce=0;ce<Z.length;ce++){let Te=Z[ce],Se=J(Te,n,r);if(Se==="break"&&t.isInsideWhile)a.emitLine(`${n}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${n}goto while_loop_${t.index}_end;`);else{let ge=Se==="break"||Se==="continue"||(Se==null?void 0:Se.includes("return"));Se&&(ge||Te.$&&!un(Te.$.env.modulePath,Se))&&a.emitLine(`${n}${Se};`)}}if((C=te.$)!=null&&C.deferredDropExpressions)for(let ce of te.$.deferredDropExpressions){let Te=J(ce,n,r);Te&&a.emitLine(`${n}${Te};`)}}else{let Z=J(te,n,r);if(Z==="break"&&t.isInsideWhile)a.emitLine(`${n}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${n}goto while_loop_${t.index}_end;`);else{let ce=Z==="break"||Z==="continue"||(Z==null?void 0:Z.includes("return"));Z&&(ce||te.$&&!un(te.$.env.modulePath,Z))&&a.emitLine(`${n}${Z};`)}}l.push({index:u,value:te,hasAwait:!1})}r.asyncCondBranchInfo||(r.asyncCondBranchInfo=new Map);let j=r.asyncCondBranchInfo.get(t.index);((j==null?void 0:j.branches.some(le=>le.hasAwait&&le.remainingExprs&&le.remainingExprs.length>0))??!1)||r.asyncCondBranchInfo.set(t.index,{branches:l,targetVariableId:i,targetAssignmentCode:o});return}let f=!1,_=0,p=n;for(let R=0;R<s.length;R++){let te=s[R];if(te.tag!=="FnCall"||!b(te,"=>")){a.emitLine(`${p}// Error: Expected => pair in cond`);continue}let j=te.args[0],Y=te.args[1];if(!j||!Y){a.emitLine(`${p}// Error: Invalid pair in cond`);continue}if(Ut((w=j.$)==null?void 0:w.value)&&j.$.value.value===!1)continue;f&&(a.emitLine(`${p}else {`),_++,p+=" ");let le=R===s.length-1&&j.tag==="Atom"&&((I=j.token)==null?void 0:I.value)==="true"?null:J(j,p,r);le?a.emitLine(`${p}if (${le}) {`):a.emitLine(`${p}{`),f=!0;let Z=`${p} `;if(va(Y)){a.emitLine(`${Z}sm->cond_branch_${t.index} = ${R};`);let Te=sl(Y,t,Z,r),Se=(L=r.asyncWhileLoopInfo)==null?void 0:L.get(t.index);if(Se&&Te.length>0){let ge=(x=r.asyncCondBranchInfo)==null?void 0:x.get(t.index),be=(ge==null?void 0:ge.branches.some(De=>De.hasAwait&&De.remainingExprs&&De.remainingExprs.length>0))??!1;Se.condBranchPostWhileExprs={branchIndex:R,condBranchFieldIndex:t.index,exprs:Te,deferredDropExpressions:(V=Y.$)==null?void 0:V.deferredDropExpressions,skipCondBranchCheck:be},l.push({index:R,value:Y,hasAwait:!0,remainingExprs:[],deferredDropExpressions:(M=Y.$)==null?void 0:M.deferredDropExpressions})}else l.push({index:R,value:Y,hasAwait:!0,remainingExprs:Te,deferredDropExpressions:(q=Y.$)==null?void 0:q.deferredDropExpressions})}else{if(ol(e,Y,r,i,o))al(Y,Z,r);else if(S(Y)&&b(Y,B.begin)){let Te=Y.args;for(let Se=0;Se<Te.length;Se++){let ge=Te[Se],be=J(ge,Z,r);if(be==="break"&&t.isInsideWhile)a.emitLine(`${Z}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${Z}goto while_loop_${t.index}_end;`);else{let De=be==="break"||be==="continue"||(be==null?void 0:be.includes("return"));be&&(De||ge.$&&!un(ge.$.env.modulePath,be))&&a.emitLine(`${Z}${be};`)}}if((P=Y.$)!=null&&P.deferredDropExpressions)for(let Se of Y.$.deferredDropExpressions){let ge=J(Se,Z,r);ge&&a.emitLine(`${Z}${ge};`)}}else{let Te=J(Y,Z,r);if(Te==="break"&&t.isInsideWhile)a.emitLine(`${Z}sm->while_loop_${t.index}_active = false;`),a.emitLine(`${Z}goto while_loop_${t.index}_end;`);else{let Se=Te==="break"||Te==="continue"||(Te==null?void 0:Te.includes("return"));Te&&(Se||Y.$&&!un(Y.$.env.modulePath,Te))&&a.emitLine(`${Z}${Te};`)}}l.push({index:R,value:Y,hasAwait:!1})}a.emitLine(`${p}}`)}for(let R=0;R<_;R++)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(R=>R.hasAwait&&R.remainingExprs&&R.remainingExprs.length>0))??!1)||r.asyncCondBranchInfo.set(t.index,{branches:l,targetVariableId:i,targetAssignmentCode:o})}function ol(e,t,n,r,i){return!r&&!i&&n.asyncBodyReturnExpr!==void 0&&e===n.asyncBodyReturnExpr&&!!n.inAsyncStateMachine&&!P$(t)}function al(e,t,n){var o,a;let r=n.emitter,i=Ke((o=e.$)==null?void 0:o.type);if(S(e)&&b(e,B.begin)){let s=e.args;for(let u=0;u<s.length-1;u++){let c=s[u],f=J(c,t,n);f&&c.$&&!un(c.$.env.modulePath,f)&&r.emitLine(`${t}${f};`)}let l=s[s.length-1];if(l&&!i){let u=J(l,t,n);u&&r.emitLine(`${t}sm->result = ${u};`)}if((a=e.$)!=null&&a.deferredDropExpressions)for(let u of e.$.deferredDropExpressions){let c=J(u,t,n);c&&r.emitLine(`${t}${c};`)}}else if(!i){let s=J(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=J(s,t,n);l&&l.includes("sm->")&&r.emitLine(`${t}${l};`)}Oo({emitter:r,indent:t,resultCode:void 0,debugLabel:n.currentFunctionName}),r.emitLine(`${t}return;`)}function va(e){if(e.tag==="FnCall"&&Or(e))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(va(t))return!0}return!1}function P$(e){if(Tn(e,"return")||b(e,"return"))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(P$(t))return!0}return!1}function mu(e,t,n,r,i,o){var d,v,y,h,g,T;let a=r.emitter;if(e.tag!=="FnCall"||!b(e,B.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=J(s,n,r),c=(d=s.$)==null?void 0:d.type;if(!c){a.emitLine(`${n}// Error: match value has no type`);return}if((v=e.$)!=null&&v.isPrimitiveMatch){sA(e,l,u,t,n,r,i,o);return}if(!Ye(c)){a.emitLine(`${n}// Error: match requires an enum type or primitive type`);return}let f=c,_=(y=r.types[f.id])==null?void 0:y.cName;if(!_){a.emitLine(`${n}// Error: enum type has no C name`);return}let p=fr(f);if(p){let E=-1,$=-1,k;for(let C=0;C<l.length;C++){let w=l[C];if(S(w)&&b(w,"=>",2)){let I=w.args[0];if(I&&S(I)&&b(I,"."))E=C;else if(I&&S(I)){let L=I.func;L&&S(L)&&b(L,".")&&($=C,I.args.length>0&&Q(I.args[0])&&(k=I.args[0].token.value))}}}if(a.emitLine(`${n}if (${u} != NULL) {`),$>=0){let C=l[$];if(!S(C))a.emitLine(`${n} // Error: Expected => in case`);else{let w=C.args[1];if(k){let I=r,L=!1,x;if(I.stateMachineVariables){for(let[V,M]of I.stateMachineVariables)if(M.name===k){L=!0,x=V;break}}if(L&&x){let V=$r(x,"local",I.stateMachineFieldAliases);a.emitLine(`${n} sm->${V} = ${u};`)}else a.emitLine(`${n} ${se(p,r)} ${k} = ${u};`)}if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${$};`),va(w)){let I=sl(w,t,n+" ",r);if(I.length>0){let L=r;L.asyncCondBranchInfo||(L.asyncCondBranchInfo=new Map);let x=L.asyncCondBranchInfo.get(t.index)||{branches:[]};x.branches.push({index:$,value:w,hasAwait:!0,remainingExprs:I,deferredDropExpressions:(h=w.$)==null?void 0:h.deferredDropExpressions}),L.asyncCondBranchInfo.set(t.index,x)}}else if(ol(e,w,r,i,o))al(w,n+" ",r);else{let I=J(w,n+" ",r);if(i){let L=Ve(`var_${i}`);I&&a.emitLine(`${n} sm->${L} = ${I};`)}else o?I&&a.emitLine(`${n} ${o} = ${I};`):I&&w.$&&!un(w.$.env.modulePath,I)&&a.emitLine(`${n} ${I};`)}}}if(a.emitLine(`${n}} else {`),E>=0){let C=l[E];if(!S(C))a.emitLine(`${n} // Error: Expected => in case`);else{let w=C.args[1];if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${E};`),va(w)){let I=sl(w,t,n+" ",r);if(I.length>0){let L=r;L.asyncCondBranchInfo||(L.asyncCondBranchInfo=new Map);let x=L.asyncCondBranchInfo.get(t.index)||{branches:[]};x.branches.push({index:E,value:w,hasAwait:!0,remainingExprs:I,deferredDropExpressions:(g=w.$)==null?void 0:g.deferredDropExpressions}),L.asyncCondBranchInfo.set(t.index,x)}}else if(ol(e,w,r,i,o))al(w,n+" ",r);else{let I=J(w,n+" ",r);if(i){let L=Ve(`var_${i}`);I&&a.emitLine(`${n} sm->${L} = ${I};`)}else o?I&&a.emitLine(`${n} ${o} = ${I};`):I&&w.$&&!un(w.$.env.modulePath,I)&&a.emitLine(`${n} ${I};`)}}}a.emitLine(`${n}}`)}else{a.emitLine(`${n}switch (${u}.tag) {`);let E=!1;for(let $=0;$<l.length;$++){let k=l[$];if(!S(k)||!b(k,"=>",2))continue;let C=k.args[0],w=k.args[1],I=Q(C)&&C.token.value==="_",L;if(!I){if(S(C)&&b(C,".",1))L=C.args[0].token.value;else if(S(C)){let x=C.func;x&&S(x)&&b(x,".",1)&&(L=x.args[0].token.value)}}if(!I&&!L){a.emitLine(`${n} // Error: Could not extract variant name`);continue}if(I)E=!0,a.emitLine(`${n} default: {`);else{let x=`${_.toUpperCase()}_${L.toUpperCase()}`;a.emitLine(`${n} case ${x}: {`)}if(a.emitLine(`${n} sm->cond_branch_${t.index} = ${$};`),S(C)&&C.args.length>=1){let x=C.func;if(x&&S(x)&&b(x,".")){let V=f.variants.find(M=>M.name===L);if(V&&V.fields)for(let M=0;M<Math.min(C.args.length,V.fields.length);M++){let q=C.args[M],P=V.fields[M];if(Q(q)&&P){let R=q.token.value,te=Ve(R),j=r,Y=!1,le;if(j.stateMachineVariables){for(let[Te,Se]of j.stateMachineVariables)if(Se.name===R){Y=!0,le=Te;break}}let Z=Ve(P.label,P.type.isExtern==="c"),ce=`${u}.data.${L}.${Z}`;if(Y&&le){let Te=$r(le,"local",j.stateMachineFieldAliases);a.emitLine(`${n} sm->${Te} = ${ce};`)}else{let Te=se(P.type,r);a.emitLine(`${n} ${Te} ${te} = ${ce};`)}}}}}if(va(w)){let x=sl(w,t,n+" ",r);if(x.length>0){let V=r;V.asyncCondBranchInfo||(V.asyncCondBranchInfo=new Map);let M=V.asyncCondBranchInfo.get(t.index)||{branches:[]};M.branches.push({index:$,value:w,hasAwait:!0,remainingExprs:x,deferredDropExpressions:(T=w.$)==null?void 0:T.deferredDropExpressions}),V.asyncCondBranchInfo.set(t.index,M)}}else if(ol(e,w,r,i,o))al(w,n+" ",r);else{let x=J(w,n+" ",r);if(i){let V=Ve(`var_${i}`);x&&a.emitLine(`${n} sm->${V} = ${x};`)}else o?x&&a.emitLine(`${n} ${o} = ${x};`):x&&w.$&&!un(w.$.env.modulePath,x)&&a.emitLine(`${n} ${x};`)}a.emitLine(`${n} break;`),a.emitLine(`${n} }`)}E||a.emitLine(`${n} default: break;`),a.emitLine(`${n}}`)}}function aA(e){return S(e)?b(e,"|",2):!1}function Fm(e){if(!aA(e))return[e];if(e.tag!=="FnCall")return[e];let t=e.args[0],n=e.args[1];return[...Fm(t),...Fm(n)]}function sA(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)||!b(d,"=>",2))continue;let v=d.args[0],y=d.args[1];if(Tn(v,"_"))l.emitLine(`${i} default:`);else{let h=(c=v.$)==null?void 0:c.primitivePatternValues;if(h&&h.length>0){for(let g of h)if(g!==void 0){let T=yr(g,o);l.emitLine(`${i} case ${T}:`)}}else{let g=Fm(v);for(let T of g){let E=(f=T.$)==null?void 0:f.value;if(E!==void 0){let $=yr(E,o);l.emitLine(`${i} case ${$}:`)}}}}if(l.emitLine(`${i} sm->cond_branch_${r.index} = ${p};`),va(y)){let h=sl(y,r,i+" ",o);u.push({index:p,value:y,hasAwait:!0,remainingExprs:h,deferredDropExpressions:(_=y.$)==null?void 0:_.deferredDropExpressions})}else{if(ol(e,y,o,a,s))al(y,i+" ",o);else{let h=J(y,i+" ",o);if(a){let g=Ve(`var_${a}`);h&&l.emitLine(`${i} sm->${g} = ${h};`)}else s?h&&l.emitLine(`${i} ${s} = ${h};`):h&&y.$&&!un(y.$.env.modulePath,h)&&l.emitLine(`${i} ${h};`)}u.push({index:p,value:y,hasAwait:!1})}l.emitLine(`${i} break;`)}l.emitLine(`${i}}`),o.asyncCondBranchInfo||(o.asyncCondBranchInfo=new Map),o.asyncCondBranchInfo.set(r.index,{branches:u,targetVariableId:a,targetAssignmentCode:s})}function sl(e,t,n,r){let i=r.emitter,o=[];if(e.tag!=="FnCall"||!b(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(va(l))if(s=!0,l.tag==="FnCall"&&b(l,":=")){let u=l.args[1];if(u&&u.tag==="FnCall"&&Or(u)){let c=u.args[0];if(c){let f=J(c,n,r);i.emitLine(`${n}// Store Future for await ${t.index} (cond branch)`),i.emitLine(`${n}sm->await_future_${t.index} = ${f};`)}}}else if(l.tag==="FnCall"&&Or(l)){let u=l.args[0];if(u)if(t.futureVariableId===void 0){let c=J(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"&&b(l,B.cond)){let u=l===a[a.length-1],c=r.asyncBodyReturnExpr;u&&r.asyncBodyReturnExpr!==void 0&&(r.asyncBodyReturnExpr=l),du(l,t,n,r),r.asyncBodyReturnExpr=c}else if(l.tag==="FnCall"&&b(l,B.match)){let u=l===a[a.length-1],c=r.asyncBodyReturnExpr;u&&r.asyncBodyReturnExpr!==void 0&&(r.asyncBodyReturnExpr=l),mu(l,t,n,r),r.asyncBodyReturnExpr=c}else l.tag==="FnCall"&&b(l,B.while)&&Im(l,t,n,r);else{let u=J(l,n,r);u&&l.$&&!un(l.$.env.modulePath,u)&&i.emitLine(`${n}${u};`)}}return o}function Im(e,t,n,r){let i=r.emitter;if(e.tag!=="FnCall"||!b(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=uA(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 f=J(a,n,r);i.emitLine(`${n}if (!(${f})) {`),i.emitLine(`${n} sm->while_loop_${c}_active = false;`),i.emitLine(`${n} goto while_loop_${c}_end;`),i.emitLine(`${n}}`);let _=lA(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:_})}else r.asyncWhileLoopInfo.set(t.index,{conditionExpr:a,stepExpr:s,bodyExpr:l,bodyExprsAfterAwait:_})}function lA(e,t,n,r,i){var p;let o=r.emitter,a=[],s=[];e.tag==="FnCall"&&b(e,"begin")?s=e.args:s=[e];let l=-1;for(let d=0;d<s.length;d++){let v=s[d];if(Fr(v)){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,f=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 v=s[d],y=J(v,n,r);y&&v.$&&!un(v.$.env.modulePath,y)&&o.emitLine(`${n}${y};`)}r.smWhileBreakInfo=u,r.smWhileContinueInfo=c,r.smWhileBodyDrops=f;let _=s[l];if(S(_)&&b(_,B.while)&&Fr(_)){Im(_,t,n,r);for(let d=l+1;d<s.length;d++)a.push(s[d]);return a}if(S(_)&&b(_,":=")){let d=_.args[1];if(d&&d.tag==="FnCall"&&Or(d)){let v=d.args[0];if(v){let y=J(v,n,r);o.emitLine(`${n}// Store Future for await ${t.index} (while loop body)`),o.emitLine(`${n}sm->await_future_${t.index} = ${y};`)}}}else if(_.tag==="FnCall"&&Or(_)){let d=_.args[0];if(d&&t.futureVariableId===void 0){let v=J(d,n,r);o.emitLine(`${n}// Store Future for await ${t.index} (while loop body)`),o.emitLine(`${n}sm->await_future_${t.index} = ${v};`)}}else if(S(_)&&b(_,B.cond)){du(_,t,n,r,void 0);for(let d=l+1;d<s.length;d++)a.push(s[d]);return a}else if(S(_)&&b(_,B.match)){mu(_,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 uA(e){let t=e.tag==="FnCall"&&b(e,"begin")?e.args:[e];for(let n of t)if(n.tag==="FnCall"&&b(n,B.while)&&Fr(n))return!0;return!1}function es(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=ve(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(Qn(e)){if((r=e.$)!=null&&r.deferredDupExpressions)for(let a of e.$.deferredDupExpressions)es(a,t,n);break}es(e.func,t,n);for(let a of e.args)es(a,t,n);if((i=e.$)!=null&&i.deferredDropExpressions)for(let a of e.$.deferredDropExpressions)es(a,t,n);if((o=e.$)!=null&&o.deferredDupExpressions)for(let a of e.$.deferredDupExpressions)es(a,t,n);break}}function c_(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=Lm(e,n);for(let v of a)((f=v.awaitPoint)!=null&&f.isInsideCond||(_=v.awaitPoint)!=null&&_.isInsideWhile)&&o.add(v.stateNumber);let s=new Map;for(let v of a){let y=new Set;for(let h of v.expressions)es(h,y,i);for(let h of y){let g=s.get(h);g||(g=new Set,s.set(h,g)),g.add(v.stateNumber)}}let l=-1;if((p=e.$)!=null&&p.deferredDropExpressions){let v=new Set;for(let y of e.$.deferredDropExpressions)es(y,v,i);for(let y of v){let h=s.get(y);h||(h=new Set,s.set(y,h)),h.add(l)}}let u=new Set;for(let v of r){if(v.kind==="outer")continue;let y=s.get(v.id);if(!y)u.add(v.id);else if(y.size>1)u.add(v.id);else if(y.has(l))u.add(v.id);else{let h=y.values().next().value;o.has(h)&&u.add(v.id)}}let c=new Map;for(let v of n){if(v.futureVariableId!==void 0)continue;let y=v.expr;if(!S(y))continue;let h=y.args[0];if(!h)continue;let g=(d=h.$)==null?void 0:d.variableName;if(!g)continue;let T=r.find(E=>E.kind==="local"&&(E.name===g||E.id===g));T&&(c.set(T.id,`await_future_${v.index}`),u.delete(T.id))}return{crossBoundaryIds:u,awaitFutureTempVarAliases:c,variableSegments:s}}function f_(e,t,n,r,i){let o={slotAliases:new Map,slots:[]},a=n.filter(_=>_.kind==="local"&&e.has(_.id)&&!r.has(_.id)&&!mt(_.type));if(a.length<2)return o;let s=new Map;for(let _ of a){let p=t.get(_.id);if(!p||p.size===0)continue;let d=[...p].filter(h=>h>=0);if(d.length===0)continue;let v=Math.min(...d),y=Math.max(...d);s.set(_.id,[v,y])}if(s.size<2)return o;let l=new Map;for(let[_]of s){let p=a.find(y=>y.id===_);if(!p)continue;let d=se(p.type,i),v=l.get(d);v||(v=[],l.set(d,v)),v.push(_)}let u=new Map,c=[],f=0;for(let[_,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 g=h+1;g<p.length;g++){let[T,E]=s.get(p[h]),[$,k]=s.get(p[g]);T<=k&&$<=E&&(d.get(p[h]).add(p[g]),d.get(p[g]).add(p[h]))}let v=new Map;for(let h of p){let g=new Set;for(let E of d.get(h))v.has(E)&&g.add(v.get(E));let T=0;for(;g.has(T);)T++;v.set(h,T)}let y=new Map;for(let[h,g]of v){let T=y.get(g);T||(T=[],y.set(g,T)),T.push(h)}for(let[,h]of y){if(h.length<2)continue;let g=`slot_${f}`,T=h.map(E=>{var $;return(($=a.find(k=>k.id===E))==null?void 0:$.name)??E});for(let E of h)u.set(E,g);c.push({fieldName:g,cType:_,variableNames:T}),f++}}return{slotAliases:u,slots:c}}function Sm(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 yu(e){return!e||!H(e)?!1:e.resolvedConcreteType&&H(e.resolvedConcreteType)&&e.resolvedConcreteType.isExtern?!0:e.requiredTraits.some(t=>Kc(t.traitType))}function $r(e,t,n){if(t==="outer")return`__capture.${Ve(e)}`;let r=n==null?void 0:n.get(e);return r||Ve(`var_${e}`)}function z$(e,t,n,r,i,o,a,s){var y,h,g,T,E,$,k,C,w,I,L,x,V,M,q,P,R,te,j,Y,le,Z,ce,Te,Se,ge,be;let l=s.emitter,c=jn(o).isFuture.outputType,f=Ke(c);s.asyncCondBranchInfo=new Map,s.asyncWhileLoopInfo=new Map,s.asyncNextWhileLoopIndex=i.awaitPoints.length;let _=Lm(e,i.awaitPoints),p=e.tag==="FnCall"&&b(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(" int __yo_inline_budget = 32; // bounded inline fast-path for sync-completed awaits"),l.emitLine(" switch (sm->state) {");let v=[];for(let De=0;De<_.length;De++){let ze=_[De];if(!ze)continue;let We=ze.stateNumber,pe=De===_.length-1;if(l.emitLine(`
238
+ state_${We}:`),l.emitLine(` case ${We}: { // State ${We}`),l.emitLine(` ASYNC_DEBUG("${t}: Entering state ${We}\\n");`),We>0&&i.awaitPoints[We-1]){let st=i.awaitPoints[We-1],Ct=Sm(st,i);st.isInsideCond&&l.emitLine(` if (sm->${Ct} != NULL) {`);let rn=Ke(st.resultType)||H(st.resultType)&&!st.resultType.resolvedConcreteType;if(l.emitLine(" // Check if the awaited Future was aborted"),l.emitLine(` if (sm->${Ct}->state == -2) {`),l.emitLine(` __yo_decr_rc((void*)sm->${Ct});`),l.emitLine(` sm->${Ct} = NULL;`),gi({emitter:l,indent:" ",debugLabel:t}),l.emitLine(" }"),st&&!rn){l.emitLine(` // Extract result from await ${We-1}`),l.emitLine(` int state_before_read = sm->${Ct}->state;`),l.emitLine(` ASYNC_DEBUG("${t}: Reading result from await ${We-1}, state=%d\\n", state_before_read);`);let gt=!!st.isInsideCond,ut;if(gt?ut=`sm->await_result_${We-1}`:st.targetVariableId&&(ut=`sm->${$r(st.targetVariableId,"local",s.stateMachineFieldAliases)}`),ut)if(mt(st.resultType)){let Nt=Ur(st.resultType,s);Nt?l.emitLine(` ${ut} = ${Nt}(sm->${Ct}->result);`):(l.emitLine(" /* Warning: No ___dup function found for result type, shallow copy may cause use-after-free */"),l.emitLine(` ${ut} = sm->${Ct}->result;`))}else l.emitLine(` ${ut} = sm->${Ct}->result;`);if(gt&&st.targetVariableId){let Nt=$r(st.targetVariableId,"local",s.stateMachineFieldAliases);l.emitLine(` sm->${Nt} = sm->await_result_${We-1};`)}l.emitLine("")}if(!st.futureVariableId){let gt=st.expr;if(gt.tag==="FnCall"){let ut=gt.args[0],Nt=(y=ut==null?void 0:ut.$)==null?void 0:y.type;Nt&&(H(Nt)||ht(Nt))&&(l.emitLine(` if (sm->${Ct} != NULL) { __yo_decr_rc((void*)sm->${Ct}); sm->${Ct} = NULL; }`),l.emitLine(""))}}let Bt=s;if(st){let gt=(h=Bt.asyncCondBranchInfo)==null?void 0:h.get(st.index);if(gt&&gt.branches.some(Nt=>Nt.hasAwait)){let Nt=gt.condBranchFieldIndex??st.index,Yt=Nt===-1;l.emitLine(" // Execute remaining code from chosen cond branch"),Yt||l.emitLine(` switch (sm->cond_branch_${Nt}) {`);let wt=((g=ze.awaitPoint)==null?void 0:g.isInsideCond)??!1;for(let Ft of gt.branches)if(Ft.hasAwait){if(Yt||l.emitLine(` case ${Ft.index}: {`),l.emitLine(` ASYNC_DEBUG("${t}: Executing remaining code from branch ${Ft.index}\\n");`),Ft.remainingExprs&&Ft.remainingExprs.length>0){let ee=s.inAsyncStateMachine,W=s.stateMachineVariables,oe=s.variableIdRemapping,me=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let de=(T=Bt.asyncWhileLoopInfo)==null?void 0:T.get(st.index);s.pendingDeferredDrops=[...Ft.deferredDropExpressions??[],...((E=de==null?void 0:de.bodyExpr.$)==null?void 0:E.deferredDropExpressions)??[],...(($=e.$)==null?void 0:$.deferredDropExpressions)??[]];let ye=new Map;for(let Pe of i.capturedVariables)ye.set(Pe.id,Pe);if(a)for(let Pe of a.fields)ye.set(Pe.label,{id:Pe.label,name:Pe.label,type:Pe.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=ye;let he=!1,Be=[],qe=gt.targetAssignmentCode;for(let Pe=0;Pe<Ft.remainingExprs.length;Pe++){let ie=Ft.remainingExprs[Pe],ae=Pe===Ft.remainingExprs.length-1;if(he){Be.push(ie);continue}if(wt&&Fr(ie)){he=!0,u_(ie,ze.awaitPoint,i," ",s);continue}let we=J(ie," ",s);!we||!ie.$||un(ie.$.env.modulePath,we)||(ae&&qe?l.emitLine(` ${qe} = ${we};`):l.emitLine(` ${we};`))}if(Ft.remainingExprs.length===0&&qe&&l.emitLine(` ${qe} = sm->await_result_${st.index};`),he&&ze.awaitPoint){let Pe=ze.awaitPoint.index;Bt.asyncCondBranchInfo||(Bt.asyncCondBranchInfo=new Map);let ie=Bt.asyncCondBranchInfo.get(Pe);if(ie)ie.chainedBranches||(ie.chainedBranches=[]),ie.chainedBranches.push({branches:[{index:Ft.index,value:Ft.value,hasAwait:Be.length>0||Be.some(ae=>Fr(ae)),remainingExprs:Be,deferredDropExpressions:Ft.deferredDropExpressions}],condBranchFieldIndex:Nt});else{let ae={branches:[{index:Ft.index,value:Ft.value,hasAwait:Be.length>0||Be.some(we=>Fr(we)),remainingExprs:Be,deferredDropExpressions:Ft.deferredDropExpressions}],condBranchFieldIndex:Nt};Bt.asyncCondBranchInfo.set(Pe,ae)}}else if(Ft.deferredDropExpressions)for(let Pe of Ft.deferredDropExpressions){let ie=J(Pe," ",s);ie&&ie.includes("sm->")&&l.emitLine(` ${ie};`)}s.inAsyncStateMachine=ee,s.stateMachineVariables=W,s.variableIdRemapping=oe,s.pendingDeferredDrops=me}Yt||(l.emitLine(" break;"),l.emitLine(" }"))}if(Yt||l.emitLine(" }"),gt.chainedBranches){for(let Ft of gt.chainedBranches)for(let ee of Ft.branches)if(ee.hasAwait&&ee.remainingExprs&&ee.remainingExprs.length>0){let W=s.inAsyncStateMachine,oe=s.stateMachineVariables,me=s.variableIdRemapping,de=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let ye=(k=Bt.asyncWhileLoopInfo)==null?void 0:k.get(st.index);s.pendingDeferredDrops=[...ee.deferredDropExpressions??[],...((C=ye==null?void 0:ye.bodyExpr.$)==null?void 0:C.deferredDropExpressions)??[],...((w=e.$)==null?void 0:w.deferredDropExpressions)??[]];let he=new Map;for(let ie of i.capturedVariables)he.set(ie.id,ie);if(a)for(let ie of a.fields)he.set(ie.label,{id:ie.label,name:ie.label,type:ie.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=he;let Be=((I=ze.awaitPoint)==null?void 0:I.isInsideCond)??!1,qe=!1,Pe=[];for(let ie of ee.remainingExprs){if(qe){Pe.push(ie);continue}if(Be&&Fr(ie)){qe=!0,u_(ie,ze.awaitPoint,i," ",s);continue}let ae=J(ie," ",s);!ae||!ie.$||un(ie.$.env.modulePath,ae)||l.emitLine(` ${ae};`)}if(qe&&ze.awaitPoint){let ie=ze.awaitPoint.index;Bt.asyncCondBranchInfo||(Bt.asyncCondBranchInfo=new Map);let ae=Bt.asyncCondBranchInfo.get(ie);ae?(ae.chainedBranches||(ae.chainedBranches=[]),ae.chainedBranches.push({branches:[{index:ee.index,value:ee.value,hasAwait:Pe.length>0||Pe.some(we=>Fr(we)),remainingExprs:Pe,deferredDropExpressions:ee.deferredDropExpressions}],condBranchFieldIndex:Ft.condBranchFieldIndex})):Bt.asyncCondBranchInfo.set(ie,{branches:[{index:ee.index,value:ee.value,hasAwait:Pe.length>0||Pe.some(we=>Fr(we)),remainingExprs:Pe,deferredDropExpressions:ee.deferredDropExpressions}],condBranchFieldIndex:Ft.condBranchFieldIndex})}else if(ee.deferredDropExpressions)for(let ie of ee.deferredDropExpressions){let ae=J(ie," ",s);ae&&ae.includes("sm->")&&l.emitLine(` ${ae};`)}s.inAsyncStateMachine=W,s.stateMachineVariables=oe,s.variableIdRemapping=me,s.pendingDeferredDrops=de}}if(gt.targetVariableId){let Ft=$r(gt.targetVariableId,"local",s.stateMachineFieldAliases);l.emitLine(" // Assign cond result to target variable"),l.emitLine(` sm->${Ft} = sm->await_result_${st.index};`)}l.emitLine("")}st.isInsideCond&&l.emitLine(" }");let ut=(L=Bt.asyncWhileLoopInfo)==null?void 0:L.get(st.index);if(ut){let Nt=ut.whileLoopOriginIndex??st.index;l.emitLine(" // Execute remaining code from while loop body and continue loop"),l.emitLine(` if (sm->while_loop_${Nt}_active) {`);let Yt=!1;if(ut.bodyExprsAfterAwait&&ut.bodyExprsAfterAwait.length>0){let wt=s.inAsyncStateMachine,Ft=s.stateMachineVariables,ee=s.variableIdRemapping,W=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...((x=ut.bodyExpr.$)==null?void 0:x.deferredDropExpressions)??[],...((V=e.$)==null?void 0:V.deferredDropExpressions)??[]];let oe=new Map;for(let he of i.capturedVariables)oe.set(he.id,he);if(a)for(let he of a.fields)oe.set(he.label,{id:he.label,name:he.label,type:he.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=oe;let me=s.smWhileBreakInfo,de=s.smWhileContinueInfo,ye=s.smWhileBodyDrops;s.smWhileBreakInfo={label:`after_while_loop_${Nt}`,activeIndex:Nt},s.smWhileContinueInfo={label:`while_loop_${Nt}_continue`},s.smWhileBodyDrops=[...((M=ut.bodyExpr.$)==null?void 0:M.deferredDropExpressions)??[]];for(let he=0;he<ut.bodyExprsAfterAwait.length;he++){let Be=ut.bodyExprsAfterAwait[he];if(Fr(Be)&&ze.awaitPoint){u_(Be,ze.awaitPoint,i," ",s);let Pe=ut.bodyExprsAfterAwait.slice(he+1);Bt.asyncWhileLoopInfo.set(ze.awaitPoint.index,{conditionExpr:ut.conditionExpr,stepExpr:ut.stepExpr,bodyExpr:ut.bodyExpr,bodyExprsAfterAwait:Pe,whileLoopOriginIndex:Nt,isChainedAwait:!0,condBranchPostWhileExprs:ut.condBranchPostWhileExprs,outerWhileLoop:ut.outerWhileLoop}),Yt=!0;break}let qe=J(Be," ",s);!qe||!Be.$||un(Be.$.env.modulePath,qe)||l.emitLine(` ${qe};`)}s.smWhileBreakInfo=me,s.smWhileContinueInfo=de,s.smWhileBodyDrops=ye,s.inAsyncStateMachine=wt,s.stateMachineVariables=Ft,s.variableIdRemapping=ee,s.pendingDeferredDrops=W}if(Yt)l.emitLine(" }"),l.emitLine("");else{l.emitLine(` while_loop_${Nt}_continue:`);{let ye=((q=ut.bodyExpr.$)==null?void 0:q.deferredDropExpressions)??[];if(ye.length>0){let he=s.inAsyncStateMachine,Be=s.stateMachineVariables,qe=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let Pe=new Map;for(let ie of i.capturedVariables)Pe.set(ie.id,ie);if(a)for(let ie of a.fields)Pe.set(ie.label,{id:ie.label,name:ie.label,type:ie.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Pe;for(let ie of ye){let ae=J(ie," ",s);ae&&ae.includes("sm->")&&l.emitLine(` ${ae};`)}s.inAsyncStateMachine=he,s.stateMachineVariables=Be,s.variableIdRemapping=qe}}l.emitLine(` ASYNC_DEBUG("${t}: Re-evaluating while loop condition\\n");`);let wt=s.declaredTempVars;if(s.declaredTempVars=void 0,ut.stepExpr){let ye=s.inAsyncStateMachine,he=s.stateMachineVariables,Be=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let qe=new Map;for(let ie of i.capturedVariables)qe.set(ie.id,ie);if(a)for(let ie of a.fields)qe.set(ie.label,{id:ie.label,name:ie.label,type:ie.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=qe;let Pe=J(ut.stepExpr," ",s);Pe&&l.emitLine(` ${Pe};`),s.inAsyncStateMachine=ye,s.stateMachineVariables=he,s.variableIdRemapping=Be}let Ft=s.inAsyncStateMachine,ee=s.stateMachineVariables,W=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let oe=new Map;for(let ye of i.capturedVariables)oe.set(ye.id,ye);if(a)for(let ye of a.fields)oe.set(ye.label,{id:ye.label,name:ye.label,type:ye.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=oe;let me=J(ut.conditionExpr," ",s);s.inAsyncStateMachine=Ft,s.stateMachineVariables=ee,s.variableIdRemapping=W,s.declaredTempVars=wt,l.emitLine(` if (!(${me})) {`),l.emitLine(` sm->while_loop_${Nt}_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 de=Nt;l.emitLine(" // Loop back by transitioning to while loop state"),l.emitLine(` sm->state = ${de};`),l.emitLine(` goto while_loop_${de}_start;`),l.emitLine(" }"),l.emitLine(" }"),l.emitLine(""),l.emitLine(` after_while_loop_${Nt}:`)}if(!Yt&&ut.condBranchPostWhileExprs){let wt=ut.condBranchPostWhileExprs,Ft=wt.condBranchFieldIndex,ee=wt.branchIndex;wt.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_${Ft} == ${ee}) {`));let W=s.inAsyncStateMachine,oe=s.stateMachineVariables,me=s.variableIdRemapping,de=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...((P=e.$)==null?void 0:P.deferredDropExpressions)??[]];let ye=new Map;for(let Pe of i.capturedVariables)ye.set(Pe.id,Pe);if(a)for(let Pe of a.fields)ye.set(Pe.label,{id:Pe.label,name:Pe.label,type:Pe.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=ye;let he=ze.awaitPoint!=null,Be=!1,qe=[];for(let Pe=0;Pe<wt.exprs.length;Pe++){let ie=wt.exprs[Pe];if(Be){qe.push(ie);continue}if(he&&Fr(ie)){Be=!0,u_(ie,ze.awaitPoint,i," ",s);continue}let ae=J(ie," ",s);!ae||!ie.$||un(ie.$.env.modulePath,ae)||l.emitLine(` ${ae};`)}if(Be&&ze.awaitPoint){let Pe=ze.awaitPoint.index;Bt.asyncCondBranchInfo||(Bt.asyncCondBranchInfo=new Map);let ie=wt.skipCondBranchCheck?-1:wt.condBranchFieldIndex,ae=Bt.asyncCondBranchInfo.get(Pe);ae?(ae.chainedBranches||(ae.chainedBranches=[]),ae.chainedBranches.push({branches:[{index:wt.branchIndex,value:wt.exprs[0],hasAwait:qe.length>0||qe.some(we=>Fr(we)),remainingExprs:qe,deferredDropExpressions:wt.deferredDropExpressions}],condBranchFieldIndex:ie})):Bt.asyncCondBranchInfo.set(Pe,{branches:[{index:wt.branchIndex,value:wt.exprs[0],hasAwait:qe.length>0||qe.some(we=>Fr(we)),remainingExprs:qe,deferredDropExpressions:wt.deferredDropExpressions}],condBranchFieldIndex:ie})}if(!Be&&wt.deferredDropExpressions)for(let Pe of wt.deferredDropExpressions){let ie=J(Pe," ",s);ie&&ie.includes("sm->")&&l.emitLine(` ${ie};`)}l.emitLine(" }"),s.inAsyncStateMachine=W,s.stateMachineVariables=oe,s.variableIdRemapping=me,s.pendingDeferredDrops=de}if(ut.outerWhileLoop){let wt=ut.outerWhileLoop,Ft=wt.whileLoopIndex;if(l.emitLine(" // Execute remaining code from outer while loop body"),l.emitLine(` if (sm->while_loop_${Ft}_active) {`),wt.bodyExprsAfterAwait.length>0){let W=s.inAsyncStateMachine,oe=s.stateMachineVariables,me=s.variableIdRemapping,de=s.pendingDeferredDrops;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping,s.pendingDeferredDrops=[...((R=wt.bodyExpr.$)==null?void 0:R.deferredDropExpressions)??[],...((te=e.$)==null?void 0:te.deferredDropExpressions)??[]];let ye=new Map;for(let Pe of i.capturedVariables)ye.set(Pe.id,Pe);if(a)for(let Pe of a.fields)ye.set(Pe.label,{id:Pe.label,name:Pe.label,type:Pe.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=ye;let he=s.smWhileBreakInfo,Be=s.smWhileContinueInfo,qe=s.smWhileBodyDrops;s.smWhileBreakInfo={label:`after_while_loop_${Ft}`,activeIndex:Ft},s.smWhileContinueInfo={label:`while_loop_${Ft}_continue`},s.smWhileBodyDrops=[...((j=wt.bodyExpr.$)==null?void 0:j.deferredDropExpressions)??[]];for(let Pe of wt.bodyExprsAfterAwait){let ie=J(Pe," ",s);!ie||!Pe.$||un(Pe.$.env.modulePath,ie)||l.emitLine(` ${ie};`)}s.smWhileBreakInfo=he,s.smWhileContinueInfo=Be,s.smWhileBodyDrops=qe,s.inAsyncStateMachine=W,s.stateMachineVariables=oe,s.variableIdRemapping=me,s.pendingDeferredDrops=de}l.emitLine(` while_loop_${Ft}_continue:`);{let W=((Y=wt.bodyExpr.$)==null?void 0:Y.deferredDropExpressions)??[];if(W.length>0){let oe=s.inAsyncStateMachine,me=s.stateMachineVariables,de=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let ye=new Map;for(let he of i.capturedVariables)ye.set(he.id,he);if(a)for(let he of a.fields)ye.set(he.label,{id:he.label,name:he.label,type:he.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=ye;for(let he of W){let Be=J(he," ",s);Be&&Be.includes("sm->")&&l.emitLine(` ${Be};`)}s.inAsyncStateMachine=oe,s.stateMachineVariables=me,s.variableIdRemapping=de}}let ee=s.declaredTempVars;if(s.declaredTempVars=void 0,wt.stepExpr){let W=s.inAsyncStateMachine,oe=s.stateMachineVariables,me=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let de=new Map;for(let he of i.capturedVariables)de.set(he.id,he);if(a)for(let he of a.fields)de.set(he.label,{id:he.label,name:he.label,type:he.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=de;let ye=J(wt.stepExpr," ",s);ye&&l.emitLine(` ${ye};`),s.inAsyncStateMachine=W,s.stateMachineVariables=oe,s.variableIdRemapping=me}{let W=s.inAsyncStateMachine,oe=s.stateMachineVariables,me=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let de=new Map;for(let he of i.capturedVariables)de.set(he.id,he);if(a)for(let he of a.fields)de.set(he.label,{id:he.label,name:he.label,type:he.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=de;let ye=J(wt.conditionExpr," ",s);s.inAsyncStateMachine=W,s.stateMachineVariables=oe,s.variableIdRemapping=me,l.emitLine(` if (!(${ye})) {`),l.emitLine(` sm->while_loop_${Ft}_active = false;`),l.emitLine(" } else {"),l.emitLine(` sm->state = ${st.index};`),l.emitLine(` goto while_loop_${Ft}_start;`),l.emitLine(" }")}s.declaredTempVars=ee,l.emitLine(" }"),l.emitLine(""),l.emitLine(` after_while_loop_${Ft}:`)}}}}let fe=s.inAsyncStateMachine,$e=s.stateMachineVariables,Le=s.variableIdRemapping;s.inAsyncStateMachine={futureType:o},s.variableIdRemapping=i.variableIdRemapping;let Me=new Map;for(let st of i.capturedVariables)Me.set(st.id,st);if(a)for(let st of a.fields)Me.set(st.label,{id:st.label,name:st.label,type:st.type,kind:"outer",isOwningTheSameRcValueAs:void 0});s.stateMachineVariables=Me;let Ze=s.pendingDeferredDrops;s.pendingDeferredDrops=[...((le=e.$)==null?void 0:le.deferredDropExpressions)??[]];let $t=pe&&!f&&ze.expressions.length>0,It=ze.expressions.length>0?ze.expressions[ze.expressions.length-1]:void 0,jt=s.asyncBodyReturnExpr;if(!f&&It&&d&&It===d&&ze.awaitPoint?s.asyncBodyReturnExpr=It:s.asyncBodyReturnExpr=void 0,O$(ze," ",s,$t),s.asyncBodyReturnExpr=jt,s.pendingDeferredDrops=Ze,l.emitLine(""),ze.awaitPoint){s.inAsyncStateMachine=fe,s.stateMachineVariables=$e,s.variableIdRemapping=Le;let st=We+1;{let Ct=Sm(ze.awaitPoint,i),Bt=(Z=ze.awaitPoint.expr.args)==null?void 0:Z[0],gt=yu((ce=Bt==null?void 0:Bt.$)==null?void 0:ce.type),ut=(Te=ze.awaitPoint)==null?void 0:Te.isInsideCond;ut&&(l.emitLine(" // Only await if the cond branch with await was taken"),l.emitLine(` if (sm->${Ct} != NULL) {`));let Nt=(Se=ze.awaitPoint)==null?void 0:Se.isInsideWhile,Yt=Nt?(ge=s.asyncWhileLoopInfo)==null?void 0:ge.get(ze.awaitPoint.index):void 0;if(Nt&&Yt){let wt=Yt.whileLoopOriginIndex??ze.awaitPoint.index;l.emitLine(" // Only await if while loop is still active (not broken)"),l.emitLine(` if (sm->while_loop_${wt}_active) {`)}if(l.emitLine(" // Transition to next state after await"),l.emitLine(` sm->state = ${st};`),l.emitLine(""),l.emitLine(" // Check if future is ready"),l.emitLine(` int future_state = sm->${Ct}->state;`),l.emitLine(" if (future_state == -1 || future_state == -2) { // -1 = completed, -2 = aborted"),l.emitLine(" // Already complete \u2014 bounded inline fast-path to avoid scheduler round-trip"),l.emitLine(" if (__yo_inline_budget > 0) {"),l.emitLine(" __yo_inline_budget--;"),l.emitLine(` goto state_${st};`),l.emitLine(" }"),l.emitLine(" // Budget exhausted \u2014 yield once for fairness (microtask yield)"),l.emitLine(` __yo_async_spawn_task((void (*)(void*))${r}, (void*)sm);`),l.emitLine(" return;"),l.emitLine(" }"),l.emitLine(""),gt?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->${Ct}); // event loop reference`)),gt||(l.emitLine(" if (future_state == 0) { // 0 = cold (not started)"),fA(ze.awaitPoint.expr,`sm->${Ct}`," ",s),l.emitLine(" // Cold future \u2014 start it via stored resume function pointer"),l.emitLine(` sm->${Ct}->__yo_resume_fn((void*)sm->${Ct});`),l.emitLine(""),l.emitLine(" // Re-check: may have completed synchronously"),l.emitLine(` future_state = sm->${Ct}->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->${Ct}->continuation_fn = (void (*)(void*))${r};`),l.emitLine(` sm->${Ct}->continuation_sm = (void*)sm;`),l.emitLine(" return;"),Nt&&Yt){let wt=Yt.whileLoopOriginIndex??ze.awaitPoint.index;l.emitLine(" } else {"),l.emitLine(" // While loop was broken, jump to code after loop"),l.emitLine(` goto after_while_loop_${wt};`),l.emitLine(" }")}ut&&(l.emitLine(" } else {"),l.emitLine(" // Non-await cond branch was taken, skip directly to next state"),l.emitLine(` sm->state = ${st};`),l.emitLine(` goto state_${st};`),l.emitLine(" }"))}}else if(pe){if(!ze.expressions.some(Ct=>B$(Ct))){if((be=e.$)!=null&&be.deferredDropExpressions){let Ct=new nl,rn=s.emitter;s.emitter=Ct;for(let gt of e.$.deferredDropExpressions){let ut=J(gt,"",s);ut&&Ct.emitLine(`${ut};`)}s.emitter=rn;let Bt=Ct.print().trim();if(Bt){l.emitLine(" // Drop local variables before completion");for(let gt of Bt.split(`
239
+ `)){let ut=gt.trim();ut&&(l.emitLine(` ${ut}`),v.push(ut))}l.emitLine("")}}l.emitLine(" // Final state - complete the Future"),Oo({emitter:l,indent:" ",debugLabel:"Future %p completed"})}s.inAsyncStateMachine=fe,s.stateMachineVariables=$e,s.variableIdRemapping=Le}else s.inAsyncStateMachine=fe,s.stateMachineVariables=$e,s.variableIdRemapping=Le;l.emitLine(" }")}return l.emitLine(" }"),l.emitLine("}"),l.emitLine(""),v}function u_(e,t,n,r,i){let o=i.emitter,a=Sm(t,n);if(e.tag==="FnCall"&&b(e,":=")){let s=e.args[1];if(s&&s.tag==="FnCall"&&Or(s)){let l=s.args[0];if(l){let u=J(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"&&Or(e)){let s=e.args[0];if(s){let l=J(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"&&b(e,B.cond)){ll(e,t,0,r,i);return}if(e.tag==="FnCall"&&b(e,B.match)){ll(e,t,0,r,i);return}if(e.tag==="FnCall"&&b(e,B.while)){ll(e,t,0,r,i);return}if(e.tag==="FnCall"&&b(e,B.begin)){ll(e,t,0,r,i);return}o.emitLine(`${r}// Warning: unhandled await pattern in remaining expressions`)}function B$(e){if(Tn(e,"return")||b(e,"return"))return!0;if(e.tag==="FnCall"){for(let t of e.args)if(B$(t))return!0}return!1}function cA(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;H(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),ln(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function fA(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=jn(i.$.type);if(!((f=o==null?void 0:o.isFuture.effects)!=null&&f.length))return;let a=cA(o.isFuture.effects),s=r.emitter,l=(_=e.args)==null?void 0:_.find(d=>S(d)&&b(d,B.using));if(l){let d=l.args;for(let v=0;v<a.length&&v<d.length;v++){let y=a[v],h=d[v];if(_e(y.type)){if(y.type.forallParameters.length>0)continue;let g=J(h,n,r),T=y.label;s.emitLine(`${n}${t}->__capture.${T} = (void*)${g};`)}else rt(y.type)&&U$(y.type,t,n,(p=h.$)==null?void 0:p.value,r,e)}}else for(let d of a)if(_e(d.type)){if(d.type.forallParameters.length>0)continue;let v=_A(d.label,r,e);v&&s.emitLine(`${n}${t}->__capture.${d.label} = (void*)${v};`)}else rt(d.type)&&U$(d.type,t,n,void 0,r,e)}function U$(e,t,n,r,i,o){var s,l,u,c;let a=i.emitter;for(let f of e.fields){if(!_e(f.type))continue;let _;if(i.stateMachineVariables){for(let[,p]of i.stateMachineVariables)if(p.name===f.label&&p.kind==="outer"){_=`sm->__capture.${f.label}`;break}}if(!_&&r&&Rt(r)){let p=e.fields.indexOf(f),d=r.fields[p];if(d&&Ie(d)){let v=i.functions[d.funcId];v&&(_=v.cName)}}if(!_&&i.currentEvidenceParams){for(let p of i.currentEvidenceParams.values())if(p.fieldLabel===f.label){_=p.cParamName;break}}if(!_){let p=((s=o.$)==null?void 0:s.env)??((l=o.func.$)==null?void 0:l.env);if(p){let d=Pr(p,v=>v.isImplicit===!0);for(let v=d.length-1;v>=0;v--){let y=d[v],h=(u=y.value)==null?void 0:u[y.value.length-1];if(h&&Rt(h)){let g=h.type.fields.findIndex(T=>T.label===f.label);if(g>=0){let T=h.fields[g];if(T&&Ie(T)){let E=(c=i.functions[T.funcId])==null?void 0:c.cName;if(E){_=E;break}}}}}}}_&&a.emitLine(`${n}${t}->__capture.${f.label} = (void*)${_};`)}}function _A(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 pA=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 q$(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(pA.has(l))continue;Am(u,l,!0,e);continue}u.isExtern==="c"&&u.cInclude||l.startsWith("__atomic_")||l.startsWith("__sync_")||Am(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"),mA(e),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Closure constructors"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Capture dispose functions"),yA(e),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Dyn type constructors"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Regular functions");for(let s in e.functions){let{cName:l,value:u}=e.functions[s],c=l==="__yo_user_main",f=(r=(n=u.body)==null?void 0:n.$)==null?void 0:r.effectAnalysis,_=f&&f.hasEffects;if(!c&&!u.type.isClosure&&((i=u.specializedFunctionCaches)==null?void 0:i.length)>0||!c&&!_&&!u.isModuleEffectMember&&!u.type.isClosure&&!u.specializedType&&(((o=u.specializedFunctionCaches)==null?void 0:o.length)??0)===0&&Fn(u.specializedType??u.type).length===0&&[...u.type.implicitParameters,...u.type.parameters.filter(E=>E.isImplicit)].some(E=>_e(E.type)))continue;let d=u.specializedType??u.type,v=Fn(d).length>0;if(!c&&u.isIoAsyncStateMachineClosure||!c&&!_&&!v&&!u.isModuleEffectMember&&(_o(u.type)&&!u.type.isClosure||((a=u.specializedFunctionCaches)==null?void 0:a.length)>0&&!u.type.isClosure||ha(u)||$o(u)||u.isIoAsyncStateMachineClosure))continue;let y=u.specializedType??u.type,h=!_&&!u.isModuleEffectMember&&(y.parameters.some(E=>Xe(E.type))||y.forallParameters.length>0),g=Xe(y.return.type),T=H(y.return.type)&&y.return.type.requiredTraits.length>0;h||g&&!T&&!u.isModuleEffectMember||Am(y,l,!1,e,u.isModuleEffectMember?void 0:u.body,u.specializedType&&Fn(y).length===0&&Fn(u.type).some(E=>E.fieldFunctionType.forallParameters&&E.fieldFunctionType.forallParameters.length>0)?u.type:void 0)}t.emitDeclarationLine("/// Closure vtable instances"),t.emitDeclarationLine("")}function Fn(e){let t=[],n=dA(e.implicitParameters);for(let r of n)rt(r.type)?G$(r.label,r.type,[],t):_e(r.type)&&t.push({implicitLabel:r.label,fieldLabel:r.label,fieldPath:[r.label],fieldFunctionType:r.type,cParamName:Ve(r.label)});return t}function G$(e,t,n,r){for(let i of t.fields)if(_e(i.type)){let o=[...n,i.label],a=o.join("__");r.push({implicitLabel:e,fieldLabel:a,fieldPath:o,fieldFunctionType:i.type,cParamName:Ve(`${e}__${a}`)})}else rt(i.type)&&G$(e,i.type,[...n,i.label],r)}function dA(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;H(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),ln(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function bo(e,t,n,r,i){let o=r||se(e.return.type,n),a=e.parameters.filter(f=>!f.isCompileTimeOnly),s=[];e.isClosure&&s.push("void* closure_context");let l=a.map((f,_)=>{let p=Ve(f.label||`param${_}`);if(_e(f.type))return bo(f.type,"(*)",n).replace(" (*)(",` (*${p})(`);{let d;return H(f.type)&&yt(f.type)?f.type.resolvedConcreteType?d=se(f.type.resolvedConcreteType,n)+"*":d=se(f.type,n):d=se(f.type,n),`${d} ${p}`}});s.push(...l);let u=Fn(i??e);for(let f of u)if(f.fieldFunctionType.forallParameters&&f.fieldFunctionType.forallParameters.length>0)s.push(`void* ${f.cParamName}`);else{let _=bo(f.fieldFunctionType,"(*)",n).replace(" (*)(",` (*${f.cParamName})(`);s.push(_)}let c=s.join(", ");return`${o} ${t}(${c})`}function Am(e,t,n,r,i,o){var _,p,d,v;let a;if(i&&yt(e.return.type)){let y=pu(i);(_=y==null?void 0:y.$)!=null&&_.asyncStateMachineStructName?a=`${y.$.asyncStateMachineStructName}*`:(p=i.$)!=null&&p.type&&H(i.$.type)&&yt(i.$.type)&&(a=se(i.$.type,r))}if(i&&H(e.return.type)&&!yt(e.return.type)&&(d=i.$)!=null&&d.type&&(a=se(i.$.type,r)),!a&&i&&((v=i.$)!=null&&v.type)&&!yt(e.return.type)){let y=se(e.return.type,r),h=se(i.$.type,r);y!==h&&(a=h)}let s=a?bo(e,t,r,a,o):bo(e,t,r,void 0,o),l=O(e),u=t==="__yo_user_main"||r.exportedFunctionLabels&&[...r.exportedFunctionLabels.values()].some(y=>Ve(y)===t),c=!n&&!u&&(t.includes("___drop")||t.includes("___dup")||t.includes("___dispose")),f=n?"extern ":u?"":c?"static inline __attribute__((always_inline)) ":"static inline ";r.emitter.emitDeclarationLine(`${f}${s}; // ${l}`)}function mA(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(Oe(r)&&r.isReferenceSemantics){if(r.fields.some(l=>Xe(l.type)))continue;let a=`__yo_new_${i}`,s=r.fields.map(l=>{let u=se(l.type,e),c=Ve(l.label);return`${u} ${c}`}).join(", ");t.emitDeclarationLine(`static ${i}* ${a}(${s}); // Constructor`)}}}function yA(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 W$(e){let t=new Set;for(let n in e.functions){let{value:r,cName:i}=e.functions[n],o=r.specializedType;if(ha(r)||!o||!Di(r.type)||Di(o))continue;let a=o.parameters.some(f=>Xe(f.type)),s=Xe(o.return.type);if(a||s||Fn(r.type).some(f=>f.fieldFunctionType.forallParameters&&f.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}${bo(o,i,e)}; // specialized function: ${O(r.type)}`)}}function Co(e,t,n){let r=ve(t,e);return r.length===0?!1:r[r.length-1].frameLevel<=n}function j$(e){var t,n;return!!((t=e.$)!=null&&t.closureFunctionValue&&((n=e.$)!=null&&n.type)&&ur(e.$.type))}function gA(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 v=l_(d);v&&l.set(v,d)}let u=e.fields.map(d=>{var g,T;if(d.isEffectParam)return"NULL";let v,y=d.exprs.expr;if((T=(g=y.$)==null?void 0:g.deferredDupExpressions)!=null&&T.length&&(v=y.$.deferredDupExpressions[0]),!v){let E=[d.label];Q(y)&&E.push(y.token.value);for(let $ of E){let k=l.get($);if(k){v=k;break}}}if(v)return J(v,r,i);let h={tag:"Atom",token:y.token,$:y.$};return J(h,r,i)}),c=`(${s}){ ${u.map((d,v)=>{let y=e.fields[v];return y?`.${y.label} = ${d}`:`/* Error: missing field at index ${v} */`}).join(", ")} }`,f=n.token.position.row!==void 0?`${Date.now()}_${n.token.position.row}`:`${Date.now()}_${Math.random().toString(36).substr(2,9)}`,_=`__capture_${t}_${f}`;return o?i.emitter.emitLine(`${r}${s} ${_} = ${c};`):(i.emitter.emitLine(`${r}${s}* ${_} = (${s}*)__yo_malloc(sizeof(${s}));`),i.emitter.emitLine(`${r}*${_} = ${c};`)),{captureTempVar:_,captureCName:s}}function H$(e,t,n){var d,v;if(!e.$||!e.$.type||!e.$.closureFunctionValue)return"// Error: Missing closure metadata";let r=Er(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=ht(e.$.type),u;if(l){let y=n.types[e.$.type.id];if(!y)return"// Error: Dyn closure type not found in context";u=y.cName}let c=a&&Oe(a)&&a.fields.length>0,f=se(i.return.type,n),_=i.parameters.map(y=>se(y.type,n)).join(", "),p=`(${f} (*)(void*${_?", "+_:""}))${s}`;if(c&&a&&Oe(a)){let y=!l,h=gA(a,i.id,e,t,n,y);if(!h)return"// Error: Failed to allocate closure capture";let{captureTempVar:g}=h;if(l){let T=`__yo_create_${u}`,E=`__yo_dispose_${u}`;return`${T}(${g}, ${E}, ${p})`}else return n.implClosureCallMap.set(a.id,{functionCName:s,callTypeId:r.isFn.callType.id,callType:r.isFn.callType,consumedCaptures:(v=o.closureInfo)==null?void 0:v.consumedCaptures}),g}else if(l){let y=`__yo_create_${u}`,h=`__yo_dispose_${u}`;return`${y}(NULL, ${h}, ${p})`}else{if(e.$.type.tag==="SomeType"){let y=e.$.type;if(y.resolvedConcreteType)return n.implClosureCallMap.set(y.resolvedConcreteType.id,{functionCName:s,callTypeId:r.isFn.callType.id,callType:r.isFn.callType}),`(${se(y.resolvedConcreteType,n)}){}`}return"// Error: Impl(Fn(...)) without captures missing resolvedConcreteType"}}function xm(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=J(a,t,n);s&&n.emitter.emitLine(`${t}${s};`)}}}function ul(e,t,n=""){var a,s,l,u,c,f,_,p,d,v,y,h,g,T,E,$,k,C,w,I,L,x,V,M,q,P,R,te,j;let r=t;if(e.token.value==="continue"){if(r.currentContinueLabel)return xm(r,n,t),`goto ${r.currentContinueLabel}`;if(r.currentLoopLabel)return xm(r,n,t),"continue";if(r.smWhileContinueInfo){if(r.smWhileContinueInfo.emitDropsBeforeGoto&&r.smWhileBodyDrops&&r.smWhileBodyDrops.length>0){let Y=t.emitter;for(let le of r.smWhileBodyDrops){let Z=J(le,n,t);Z&&Z.includes("sm->")&&Y.emitLine(`${n}${Z};`)}}if(r.smWhileContinueInfo.stepExpr){let Y=t.emitter,le=J(r.smWhileContinueInfo.stepExpr,n,t);le&&Y.emitLine(`${n}${le};`)}return`goto ${r.smWhileContinueInfo.label}`}return"continue"}if(e.token.value==="break"){if(r.currentLoopLabel)return xm(r,n,t),r.insideMatch?`goto ${r.currentLoopLabel}`:"break";if(r.smWhileBreakInfo){let{label:Y,activeIndex:le}=r.smWhileBreakInfo;if(r.smWhileBodyDrops&&r.smWhileBodyDrops.length>0){let Z=t.emitter;for(let ce of r.smWhileBodyDrops){let Te=J(ce,n,t);Te&&Te.includes("sm->")&&Z.emitLine(`${n}${Te};`)}}return le!==void 0?(t.emitter.emitLine(`${n}sm->while_loop_${le}_active = false;`),`goto ${Y}`):`goto ${Y}`}return"break"}if(e.token.value==="return"){if(r.inAsyncStateMachine){let Y=t.emitter,le=r.inAsyncStateMachine.futureType,ce=jn(le).isFuture.outputType,Te=Ke(ce);if((a=e.$)!=null&&a.deferredDropExpressions)for(let ge of e.$.deferredDropExpressions){let be=J(ge,n,t);be&&be.includes("sm->")&&Y.emitLine(`${n}${be};`)}if(r.pendingDeferredDrops&&r.pendingDeferredDrops.length>0){Y.emitLine(`${n}// Drop local variables before early completion`);for(let ge of r.pendingDeferredDrops){let be=J(ge,n,t);be&&be.includes("sm->")&&Y.emitLine(`${n}${be};`)}}Y.emitLine(`${n}// Early return - complete the result Future`);let Se=Te?void 0:`(${se(ce,t)}){0}`;return Oo({emitter:Y,indent:n,resultCode:Se,debugLabel:t.currentFunctionName}),""}return"return"}if((s=e.$)!=null&&s.type&&Ke(e.$.type))return"";if((r.inAsyncStateMachine||r.inEffectStateMachine)&&r.stateMachineVariables){let Y=e.token.value;if((l=r.localShadowedVariables)!=null&&l.has(Y))return Ve(Y);let le=!1;if((u=e.$)!=null&&u.env){let Z=ve(e.$.env,Y);if(Z.length>0){let ce=Z[Z.length-1],Te=ce.isOwningTheSameRcValueAs?ce.isOwningTheSameRcValueAs.id:ce.id;(c=r.variableIdRemapping)!=null&&c.has(Te)&&(Te=r.variableIdRemapping.get(Te));let Se=r.stateMachineVariables.get(Te);if(Se){let ge=(f=r.stateMachineFieldAliases)==null?void 0:f.get(Te);if(ge)return le=!0,`sm->${ge}`;let be=Se.kind==="outer"?`__capture.${Y}`:`var_${Se.id}`;return le=!0,`sm->${be}`}}}if(!le){for(let[Z,ce]of r.stateMachineVariables)if(ce.name===Y){let Te=(_=r.stateMachineFieldAliases)==null?void 0:_.get(Z);if(Te)return le=!0,`sm->${Te}`;let Se=ce.kind==="outer"?`__capture.${Y}`:`var_${Z}`;return le=!0,`sm->${Se}`}}if((p=e.$)!=null&&p.env){let Z=ve(e.$.env,Y);if(Z.length>0){let ce=Z[Z.length-1];if(ce.isOwningTheSameRcValueAs){let Te=ce.isOwningTheSameRcValueAs.name,Se=ce.isOwningTheSameRcValueAs.id;for(let[ge,be]of r.stateMachineVariables)if(be.name===Te||ge===Se)return`sm->${be.kind==="outer"?`__capture.${Te}`:`var_${ge}`}`}}}if(r.currentClosureCaptures&&r.currentClosureCaptures.includes(Y)&&r.currentClosureCaptureFrameLevel!==void 0){let Z=r.currentClosureCaptureTypeCName;return Z?`((${Z}*)closure_context)->${ot(Y,(d=e.$)==null?void 0:d.env)}`:`closure_context->${ot(Y,(v=e.$)==null?void 0:v.env)}`}if((y=e.$)!=null&&y.variableName){if((h=e.$)!=null&&h.env&&((g=e.$)!=null&&g.value)&&!Ge(e.$.value)){let Z=ve(e.$.env,e.$.variableName);if(Z.length>0&&Z[Z.length-1].isCompileTimeOnly)return yr(e.$.value,t,e)}return ot(e.$.variableName,e.$.env)}}if((T=e.$)!=null&&T.variableName){if((E=e.$)!=null&&E.env&&(($=e.$)!=null&&$.value)&&!Ge(e.$.value)){let Y=ve(e.$.env,e.$.variableName);if(Y.length>0&&Y[Y.length-1].isCompileTimeOnly)return yr(e.$.value,t,e)}if(!(r.currentClosureCaptures&&r.currentClosureCaptures.includes(e.token.value)&&((k=e.$)!=null&&k.env)&&r.currentClosureCaptureFrameLevel!==void 0&&Co(e.token.value,e.$.env,r.currentClosureCaptureFrameLevel)))return ot(e.$.variableName,(C=e.$)==null?void 0:C.env)}if((w=e.$)!=null&&w.value&&!Ge(e.$.value))return yr(e.$.value,t,e);let i=(I=e.$)!=null&&I.env&&r.currentClosureCaptureFrameLevel!==void 0?Co(e.token.value,e.$.env,r.currentClosureCaptureFrameLevel):!1;if(r.currentClosureCaptures&&r.currentClosureCaptures.includes(e.token.value)&&r.currentClosureCaptureFrameLevel!==void 0&&(!((L=e.$)!=null&&L.env)||i)){let Y=r.currentClosureCaptureTypeCName;return Y?`((${Y}*)closure_context)->${ot(e.token.value,(x=e.$)==null?void 0:x.env)}`:`closure_context->${ot(e.token.value,(V=e.$)==null?void 0:V.env)}`}if(r.currentFunctionName&&!r.currentClosureCaptures){let Y=Object.values(r.functions).find(le=>le.cName===r.currentFunctionName);if(Y&&Y.value.type.isClosure){let le=Object.values(r.types).find(Z=>_e(Z.type)&&Z.type.isClosure&&Z.type===Y.value.type);if(le)return`((${`${le.cName}_capture`}*)closure_context->data)->${ot(e.token.value,(M=e.$)==null?void 0:M.env)}`}}if((q=e.$)!=null&&q.env){let Y=ve(e.$.env,e.token.value);if(Y.length>0){let le=Y[Y.length-1];if((P=le.value)!=null&&P[0]&&Ie(le.value[0])){let Z=(R=t.functions[le.value[0].funcId])==null?void 0:R.cName;if(Z)return Z}else if(_e(le.type)&&(Ge((te=le.value)==null?void 0:te[0])||le.value===void 0)){let Z=Object.entries(t.functions).find(([ce,Te])=>Te.value.funcName===e.token.value);if(Z)return Z[1].cName}}}return ot(e.token.value,(j=e.$)==null?void 0:j.env)}function Y$(e,t,n){var y,h,g,T,E,$,k,C,w,I,L,x,V,M,q,P,R,te,j,Y;let r;if(Qn(e)){let le=(h=(y=e.$)==null?void 0:y.runtimeArgExprsInOrder)==null?void 0:h[0],Z=(g=le==null?void 0:le.$)==null?void 0:g.closureFunctionValue;Z&&Ie(Z)&&(r=Z.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||!yt(i))return"/* Error: async block must have Future type */";let o=jn(i);if(!o)return"/* Error: Could not extract Future module type */";let a=((E=e.$)==null?void 0:E.variableName)||`async_block_${Date.now()}`,s=`${a}_state_t`,l=`${a}_resume`,u=`__yo_new_${a}`,c=`${a}_state_dispose`;n.types[i.id]={type:i,cName:s};let f=($=e.$)==null?void 0:$.awaitAnalysis;if(!f)throw new Error("Missing await analysis for async block. This should have been computed during evaluation.");let _=o.isFuture.outputType;if(H(_))if(_.resolvedConcreteType)_=_.resolvedConcreteType;else{let le=(C=(k=e.$)==null?void 0:k.runtimeArgExprsInOrder)==null?void 0:C[0],Z=(w=le==null?void 0:le.$)==null?void 0:w.closureFunctionValue;if(Z&&Ie(Z)){let ce=(L=(I=Z.type)==null?void 0:I.return)==null?void 0:L.type;if(ce&&H(ce)&&ce.resolvedConcreteType)_=ce.resolvedConcreteType;else if((V=(x=Z.body)==null?void 0:x.$)!=null&&V.type){let Te=Z.body.$.type;H(Te)&&Te.resolvedConcreteType?_=Te.resolvedConcreteType:H(Te)||(_=Te)}}}let p=se(_,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(""),(M=e.$)!=null&&M.captureType){let le=e.$.captureType,Z=Object.values(n.types).find(Te=>Te.type===le),ce=Z?Z.cName:`async_capture_${le.id}`;d.emitDeclarationLine(`${s}* ${u}(${ce} __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:_,resultTypeCName:p,captureType:(q=e.$)==null?void 0:q.captureType,analysis:f});let v=(P=e.$)==null?void 0:P.captureType;if(v){let le=Object.values(n.types).find(We=>We.type===v),Z=le?le.cName:`async_capture_${v.id}`,ce=n,Te=ce.currentClosureCaptures!==void 0||ce.inAsyncStateMachine!==void 0||ce.inEffectStateMachine!==void 0,Se=!1,ge=v.fields.map(We=>{var $e,Le;if(We.isEffectParam)return`.${We.label} = NULL`;let pe;if(!Te&&(($e=e.$)!=null&&$e.deferredDupExpressions))for(let Me of e.$.deferredDupExpressions){let Ze;if(S(Me)&&(Me.args.length>0&&Q(Me.args[0])?Ze=Me.args[0].token.value:Me.args.length===0&&S(Me.func)&&b(Me.func,".")&&Me.func.args.length>=2&&Q(Me.func.args[0])&&(Ze=Me.func.args[0].token.value)),Ze===We.label){pe=Me;break}}if(pe)return Se=!0,(Le=pe.$)!=null&&Le.variableName?(J(pe,t,n),`.${We.label} = ${pe.$.variableName}`):`.${We.label} = ${J(pe,t,n)}`;let fe={tag:"Atom",token:We.exprs.expr.token,$:We.exprs.expr.$};return`.${We.label} = ${ul(fe,n)}`}).join(", "),be=`(${Z}){${ge}}`;if(!Se){let We=Ur(v,n);We&&(be=`${We}(${be})`)}let De=((R=e.$)==null?void 0:R.variableName)||"async_result",ze=`${u}(${be})`;if(De&&((te=e.$)!=null&&te.type)){let We=fn(e.$.type,De,n);return n.emitter.emitLine(`${t}${We} = ${ze};`),De}else return ze}else{let le=((j=e.$)==null?void 0:j.variableName)||"async_result",Z=`${u}()`;if(le&&((Y=e.$)!=null&&Y.type)){let ce=fn(e.$.type,le,n);return n.emitter.emitLine(`${t}${ce} = ${Z};`),le}else return Z}}function K$(e,t){var y;let n=t.emitter,{asyncBlockId:r,structName:i,resultType:o,resultTypeCName:a,captureType:s,analysis:l,crossBoundaryIds:u,awaitFutureTempVarAliases:c,overlappingSlotAliases:f,overlappingSlots:_}=e;if(n.emitDeclarationLine(`// State machine for async block ${r} - implements Future(${O(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)"),Ke(o)?n.emitDeclarationLine(" uint8_t result; // Dummy result for unit type"):n.emitDeclarationLine(` ${a} result; // The result value of type ${O(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),g=h?h.cName:`async_capture_${s.id}`;n.emitDeclarationLine(" // Captured variables from outer scope"),n.emitDeclarationLine(` ${g} __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))&&!(f!=null&&f.has(h.id)))),p.length>0){n.emitDeclarationLine(" // Local variables");for(let h of p){let g=se(h.type,t),T=$r(h.id,"local");n.emitDeclarationLine(` ${g} ${T}; // ${h.name}`)}n.emitDeclarationLine("")}if(_&&_.length>0){n.emitDeclarationLine(" // Overlapping storage slots (Phase 2)");for(let h of _)n.emitDeclarationLine(` ${h.cType} ${h.fieldName}; // shared: ${h.variableNames.join(", ")}`);n.emitDeclarationLine("")}if(l.awaitPoints.length>0){let h=[];for(let g of l.awaitPoints)if(!(Ke(g.resultType)||H(g.resultType)&&!g.resultType.resolvedConcreteType)&&g.isInsideCond){let $=g.resultType;if(g.futureType){let C=jn(g.futureType);C&&($=C.isFuture.outputType)}let k=se($,t);h.push(` ${k} await_result_${g.index};`)}if(h.length>0){n.emitDeclarationLine(" // Await result temporaries");for(let g of h)n.emitDeclarationLine(g);n.emitDeclarationLine("")}}if(l.awaitPoints.length>0){let h=l.awaitPoints.filter(g=>g.futureVariableId===void 0);if(h.length>0){n.emitDeclarationLine(" // Future references for awaits");for(let g of h){let T=g.expr;if(T.tag!=="FnCall")continue;let E=T.args[0],$=(y=E==null?void 0:E.$)==null?void 0:y.type;if(!$)throw new Error(`Internal error: await expression missing type info for future argument in async block ${r}`);let k=se($,t);n.emitDeclarationLine(` ${k} await_future_${g.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 v=l.awaitPoints.filter(h=>h.isInsideWhile);if(v.length>0){n.emitDeclarationLine(" // Loop state tracking for while loops with await");let h=l.awaitPoints.length;for(let g of v){n.emitDeclarationLine(` _Bool while_loop_${g.index}_active; // Whether while loop ${g.index} should continue`);let T=(g.whileNestingDepth??1)-1;for(let E=0;E<T;E++)n.emitDeclarationLine(` _Bool while_loop_${h}_active; // Whether outer while loop ${h} should continue`),h++}n.emitDeclarationLine("")}n.emitDeclarationLine("};"),n.emitDeclarationLine("")}function hA(e){var l;if(!e.deferredAsyncBlocks||e.deferredAsyncBlocks.length===0)return;let t=e.deferredAsyncBlocks,n=new Map;for(let u of t)n.set(u.structName,u);let r=new Map,i=new Map;for(let u of t)r.set(u.structName,new Set),i.set(u.structName,0);for(let u of t){let c=f=>{let _=r.get(f);_.has(u.structName)||(_.add(u.structName),i.set(u.structName,(i.get(u.structName)??0)+1))};for(let f of u.analysis.capturedVariables){let _;try{_=se(f.type,e)}catch{continue}let p=n.get(_);p&&p.structName!==u.structName&&c(p.structName)}for(let f of u.analysis.awaitPoints){if(f.futureVariableId!==void 0)continue;let _=f.expr;if(_.tag!=="FnCall")continue;let p=_.args[0],d=(l=p==null?void 0:p.$)==null?void 0:l.type;if(!d)continue;let v;try{v=se(d,e)}catch{continue}let y=n.get(v);y&&y.structName!==u.structName&&c(y.structName)}}let o=[];for(let[u,c]of i.entries())c===0&&o.push(u);let a=[];for(;o.length>0;){let u=o.shift();a.push(u);let c=r.get(u);if(c)for(let f of c){let _=(i.get(f)??0)-1;i.set(f,_),_===0&&o.push(f)}}let s=a.length===t.length?a.map(u=>n.get(u)).filter(Boolean):t;for(let u of s){let{crossBoundaryIds:c,awaitFutureTempVarAliases:f,variableSegments:_}=c_(u.bodyExpr,u.analysis),{slotAliases:p,slots:d}=f_(c,_,u.analysis.capturedVariables,f,e);K$({asyncBlockId:u.asyncBlockId,structName:u.structName,resultType:u.resultType,resultTypeCName:u.resultTypeCName,captureType:u.captureType,analysis:u.analysis,crossBoundaryIds:c,awaitFutureTempVarAliases:f,overlappingSlotAliases:p,overlappingSlots:d},e)}}function vA(e,t,n,r,i,o,a,s,l,u){var f;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&&mt(i)){let _=Object.values(u.types).find(p=>p.type===i);if(!_)c.emitLine(" /* Error: capture struct type not found in context */");else{let p=_.cName,d=i.trait.fields.find(v=>v.label===F.___drop[0]);if(d&&d.assignedValue&&Ie(d.assignedValue)){let v=(f=u.functions[d.assignedValue.funcId])==null?void 0:f.cName;v&&(c.emitLine(' ASYNC_DEBUG(" Dropping capture struct\\n");'),c.emitLine(` ${v}(sm->__capture);`))}else c.emitLine(` /* Warning: ___drop function not found for capture struct ${p} */`)}}if(c.emitLine(""),!Ke(r)&&mt(r)){let _=se(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=zi(r,u);p?c.emitLine(` ${p}(sm->result);`):c.emitLine(` /* Warning: No ___drop function found for result type ${_} */`),c.emitLine(" }")}c.emitLine("");{let _=[];for(let p of o.capturedVariables){if(p.kind!=="local"||!s.has(p.id)||l.has(p.id)||p.isOwningTheSameRcValueAs!==void 0)continue;let v=`sm->${$r(p.id,"local")}`;if(ht(p.type))_.push(` if ((${v}).data != NULL) { __yo_decr_rc((void*)(${v}).data); }`);else if(Vn(p.type)||uo(p.type))_.push(` if (${v} != NULL) { __yo_decr_rc_atomic((void*)${v}); }`);else if(dn(p.type)||H(p.type)&&Ar(p.type)){let y=zi(p.type,u);y?_.push(` if (${v} != NULL) { ${y}(${v}); }`):_.push(` if (${v} != NULL) { __yo_decr_rc((void*)${v}); }`)}else if(mt(p.type)){let y=zi(p.type,u);y&&_.push(` ${y}(${v});`)}}if(_.length>0){c.emitLine(" // Drop local variables on escape (state == -2)"),c.emitLine(" if (sm->state == -2) {");for(let p of _)c.emitLine(p);c.emitLine(" }")}}c.emitLine(" // Memory freed by __yo_decr_rc after this function returns"),c.emitLine("}")}function TA(e,t,n,r,i,o,a,s,l,u){let c=u.emitter;if(l){let f=Object.values(u.types).find(p=>p.type===l),_=f?f.cName:`async_capture_${l.id}`;c.emitLine(`${t}* ${r}(${_} __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 f=u.disposeTypeIds.get(i);f===void 0&&(f=u.nextDisposeTypeId,u.nextDisposeTypeId=f+1,u.disposeTypeIds.set(i,f)),c.emitLine(` sm->header.type_id = ${f};`)}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)"),Ke(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 X$(e){if(!e.deferredAsyncBlocks||e.deferredAsyncBlocks.length===0)return;let t=e.emitter;hA(e),t.emitLine("// Deferred async block implementations");let n=0;for(;n<e.deferredAsyncBlocks.length;){let r=e.deferredAsyncBlocks[n],i=e.deferredAsyncBlocks.length,{bodyExpr:o,asyncBlockId:a,structName:s,resumeFunctionName:l,constructorName:u,disposeFunctionName:c,futureType:f,resultType:_,resultTypeCName:p,captureType:d,analysis:v}=r,y=e.stateMachineVariables,h=e.currentEvidenceParams,g=new Map,{crossBoundaryIds:T,awaitFutureTempVarAliases:E,variableSegments:$}=c_(o,v),{slotAliases:k}=f_(T,$,v.capturedVariables,E,e),C=v.capturedVariables.filter(V=>V.kind==="outer"||T.has(V.id)||E.has(V.id)||k.has(V.id)),w={...v,capturedVariables:C};for(let V of C)g.set(V.id,V);if(d)for(let V of d.fields)g.set(V.label,{id:V.label,name:V.label,type:V.type,kind:"outer",isOwningTheSameRcValueAs:void 0});e.stateMachineVariables=g;let I=e.stateMachineFieldAliases,L=new Map(E);for(let[V,M]of k)L.set(V,M);e.stateMachineFieldAliases=L;let x=z$(o,a,s,l,w,f,d,e);if(e.stateMachineVariables=y,e.currentEvidenceParams=h,e.stateMachineFieldAliases=I,t.emitLine(""),vA(a,s,c,_,d,w,x,T,E,e),t.emitLine(""),TA(a,s,l,u,c,f,_,p,d,e),t.emitLine(""),e.deferredAsyncBlocks.length>i){let V=e.deferredAsyncBlocks.slice(i);for(let M of V){let{crossBoundaryIds:q,awaitFutureTempVarAliases:P,variableSegments:R}=c_(M.bodyExpr,M.analysis),{slotAliases:te,slots:j}=f_(q,R,M.analysis.capturedVariables,P,e);K$({asyncBlockId:M.asyncBlockId,structName:M.structName,resultType:M.resultType,resultTypeCName:M.resultTypeCName,captureType:M.captureType,analysis:M.analysis,crossBoundaryIds:q,awaitFutureTempVarAliases:P,overlappingSlotAliases:te,overlappingSlots:j},e)}}n++}}function Q$(e){for(let t in e.functions){let{value:n}=e.functions[t];n.body&&J$(n.body,e)}}var EA=["__yo_poll_","__yo_fs_event_","__yo_async_"];function $A(e){return EA.some(t=>e.startsWith(t))}function J$(e,t){var n,r,i,o,a,s,l;if(e&&S(e)){let u=e;if(Qn(e)){t.usesAsync=!0;let c=(n=e.$)==null?void 0:n.type;if(c&&yt(c)&&jn(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(Qn(e)){let c=(i=e.$)==null?void 0:i.type;if(c&&yt(c)&&jn(c)){let _=((o=e.$)==null?void 0:o.variableName)||`io_async_block_${Date.now()}`,p=!!((a=e.$)!=null&&a.awaitAnalysis),d=p?`${_}_state_t`:`${_}_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"}`)}}(Or(e)||jf(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"&&$A(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)J$(c,t)}}function Z$(e,t,n){var C,w,I,L,x,V,M,q,P,R,te,j;let r=(C=e.$)==null?void 0:C.type;if(!r||!yt(r))return"/* Error: io.async must return a Future type */";let i=jn(r);if(!i)return"/* Error: Could not extract Future module type */";let o=i.isFuture.outputType;if(H(o))if(o.resolvedConcreteType)o=o.resolvedConcreteType;else{let Y=(I=(w=e.$)==null?void 0:w.runtimeArgExprsInOrder)==null?void 0:I[0],le=(L=Y==null?void 0:Y.$)==null?void 0:L.closureFunctionValue;if(le&&Ie(le)){let Z=(V=(x=le.type)==null?void 0:x.return)==null?void 0:V.type;if(Z&&H(Z)&&Z.resolvedConcreteType)o=Z.resolvedConcreteType;else if((q=(M=le.body)==null?void 0:M.$)!=null&&q.type){let ce=le.body.$.type;H(ce)&&ce.resolvedConcreteType?o=ce.resolvedConcreteType:H(ce)||(o=ce)}}}let a=se(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,f=(te=(R=e.$)==null?void 0:R.runtimeArgExprsInOrder)==null?void 0:te[0];if(!(f!=null&&f.$))return"/* Error: Missing closure argument for io.async */";let _=J(f,t,n),p=f.$.type,d,v;if(H(p)&&p.resolvedConcreteType){let Y=p.resolvedConcreteType,le=n.implClosureCallMap.get(Y.id);le&&(d=le.functionCName);let Z=n.types[Y.id];Z&&(v=Z.cName)}if(!d||!v)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;"),Ke(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(` ${v} __capture;`),c.emitDeclarationLine("};"),c.emitDeclarationLine("");let y="";for(let Y in n.functions){let le=n.functions[Y];if(le.cName===d){let Z=Fn(le.value.type);Z.length>0&&(y=", "+Z.map(ce=>`(void*)sm->__capture.${ce.fieldPath.join(".")}`).join(", "));break}}c.emitDeclarationLine(`void ${u}(void* ptr) {`),c.emitDeclarationLine(` ${s}* sm = (${s}*)ptr;`),Ke(o)?c.emitDeclarationLine(` ${d}(&sm->__capture${y});`):c.emitDeclarationLine(` sm->result = ${d}(&sm->__capture${y});`),y&&(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=f.$.captureType,g=h&&mt(h)?zi(h,n):void 0,T=h&&mt(h)?Ur(h,n):void 0,E=zi(o,n);c.emitDeclarationLine(`void ${l}(void* ptr) {`),(g||E)&&(c.emitDeclarationLine(` ${s}* sm = (${s}*)ptr;`),g&&(c.emitDeclarationLine(" // Drop captured variables (future owns its references)"),c.emitDeclarationLine(` ${g}(sm->__capture);`)),E&&(c.emitDeclarationLine(" if (sm->state == -1) {"),c.emitDeclarationLine(` ${E}(sm->result);`),c.emitDeclarationLine(" }"))),c.emitDeclarationLine("}"),c.emitDeclarationLine("");let $=((j=e.$)==null?void 0:j.variableName)||"__io_async_result",k=fn(r,$,n);if(c.emitLine(`${t}${k} = (${s}*)__yo_malloc(sizeof(${s}));`),c.emitLine(`${t}memset(${$}, 0, sizeof(${s}));`),c.emitLine(`${t}${$}->header.ref_count = 1;`),n.needsCycleGC&&(c.emitLine(`${t}${$}->header.gc_flags = 0;`),c.emitLine(`${t}${$}->header.gc_mark = __YO_GC_UNMARKED;`),c.emitLine(`${t}${$}->header.gc_next = NULL;`),c.emitLine(`${t}${$}->header.gc_prev = NULL;`)),n.needsCycleGC)c.emitLine(`${t}${$}->header.dispose_fn = (void(*)(void*))${l};`);else{n.disposeTypeIds||(n.disposeTypeIds=new Map,n.nextDisposeTypeId=1);let Y=n.disposeTypeIds.get(l);Y===void 0&&(Y=n.nextDisposeTypeId,n.nextDisposeTypeId=Y+1,n.disposeTypeIds.set(l,Y)),c.emitLine(`${t}${$}->header.type_id = ${Y};`)}return n.needsCycleGC&&c.emitLine(`${t}${$}->header.traverse_fn = NULL;`),c.emitLine(`${t}${$}->__capture = ${_};`),T&&c.emitLine(`${t}${$}->__capture = ${T}(${$}->__capture);`),c.emitLine(`${t}${$}->state = 0;`),c.emitLine(`${t}${$}->__yo_resume_fn = ${u};`),c.emitLine(`${t}${$}->continuation_fn = NULL;`),c.emitLine(`${t}${$}->continuation_sm = NULL;`),$}function eb(e,t){for(let i=0;i<e.fields.length;i++){let o=e.fields[i];Ie(o)&&(Uo(o.type,t),Ta(o.body,t))}if(t.moduleLevelInitExprs)for(let i of t.moduleLevelInitExprs)Ta(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(Uo(o.value.type,t),o.value.specializedType&&Uo(o.value.specializedType,t),Ta(o.value.body,t),o.value.calledComptimeFunctionCaches)for(let a of o.value.calledComptimeFunctionCaches)a.value&&a.value.type&&Zn(a.value.type,t),Ta(a.body,t)}}}function Uo(e,t){for(let n of e.parameters)Zn(n.type,t);for(let n of e.forallParameters)Zn(n.type,t);Zn(e.return.type,t)}function Ta(e,t){var n;if(e.$&&e.$.type&&Zn(e.$.type,t),e.$&&e.$.value&&Ie(e.$.value)){let r=e.$.value;r.isControlFunction?(Uo(r.type,t),Hn(r.body,t)):t.functions[r.funcId]||r.type.parameters.map(a=>a.type).some(a=>H(a)&&yt(a)&&!a.resolvedConcreteType)||(t.functions[r.funcId]={value:r,cName:Ve(r.funcId)},Uo(r.type,t),Hn(r.body,t))}if(e.$&&e.$.deferredDropExpressions&&e.$.deferredDropExpressions.length>0)for(let r of e.$.deferredDropExpressions)Ta(r,t);if(e.$&&e.$.macroExpansion&&Ta(e.$.macroExpansion,t),e.$&&e.$.runtimeDestructurings)for(let{type:r}of e.$.runtimeDestructurings)Zn(r,t);if(e.$&&e.$.captureType&&Oe(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)Zn(i.type,t);for(let i of r.trait.fields)if(i.assignedValue&&Ie(i.assignedValue)){let o=i.assignedValue;t.functions[o.funcId]||(t.functions[o.funcId]={value:o,cName:o.funcId},Uo(o.type,t),Hn(o.body,t))}}}switch(e.tag){case"FnCall":if(b(e,B.test))break;Ta(e.func,t);for(let r of e.args)Ta(r,t);break;case"Atom":(n=e.$)!=null&&n.value&&X(e.$.value)&&Zn(e.$.value.value,t);break}}function Zn(e,t){if(!t.types[e.id]){if(H(e)&&ur(e)){if(e.resolvedConcreteType){Zn(e.resolvedConcreteType,t);return}let n=Er(e);n&&Zn(n,t);return}if(H(e)&&yt(e)){let n=jn(e);n&&Zn(n.isFuture.outputType,t);return}if(H(e)&&e.resolvedConcreteType){Zn(e.resolvedConcreteType,t);return}if(!Xe(e)){if(Oe(e)||Ht(e)||Ye(e)||Tt(e)||ht(e)||rt(e)||_t(e)||Vt(e)||Vn(e)){let n=Vt(e)?se(e,t):e.isExtern==="c"&&e.externName?e.externName:`__yo_${e.id}`;if(t.types[e.id]={type:e,cName:n},Oe(e))for(let r of e.fields)Zn(r.type,t);if(Ye(e)){for(let r of e.variants)if(r.fields)for(let i of r.fields)Zn(i.type,t)}if(Ht(e))for(let r of e.fields)Zn(r.type,t);if(ht(e)){let r=e;for(let i of r.requiredTraits)Zn(i.traitType,t)}if(Vn(e)){let r=e;Zn(r.childType,t),se(r,t)}if(Vt(e)&&Zn(e.childType,t),rt(e)||_t(e)){for(let r of e.fields)Zn(r.type,t);for(let r of e.fields)if(r.assignedValue&&Ie(r.assignedValue)){let i=r.assignedValue,o=i.type;if(o.parameters.every(s=>s.isCompileTimeOnly)&&o.return.isCompileTimeOnly)continue;t.functions[i.funcId]||(t.functions[i.funcId]={value:i,cName:Ve(i.funcId)},Uo(i.type,t),Hn(i.body,t))}else if(r.assignedValue&&(Rt(r.assignedValue)||on(r.assignedValue))){let i=r.assignedValue;gu(i,t,!1)}}}else if(ft(e)){let n=e,r=n.childType,i=n.length;if(Mt(i)){Zn(r,t);let o=se(r,t),a=`Array_${Ve(o)}_${i.value}`;t.arrayStructTypes.has(a)||t.arrayStructTypes.set(a,{childType:o,length:typeof i.value=="bigint"?Number(i.value):i.value}),t.types[e.id]={type:e,cName:a}}}else if(et(e)){if(Zn(e.childType,t),Vt(e.childType)){let r=e.childType.childType;Zn(r,t);let i=se(r,t),o=`Slice_${Ve(i)}`;t.sliceStructTypes.has(o)||t.sliceStructTypes.set(o,{childType:i})}t.types[e.id]={type:e,cName:se(e,t)}}else V$.has(e.tag)&&(t.types[e.id]={type:e,cName:se(e,t)});e.trait&&Zn(e.trait,t)}}}function ts(e){var t,n,r;if(e.$&&e.$.value&&Ge(e.$.value)&&!(_e(e.$.type)&&e.$.type.isExtern)){if(!Ke(e.$.type))return!0}if(S(e)){if(ts(e.func))return!0;for(let i of e.args)if(!((t=i.$)!=null&&t.type&&Ke(i.$.type))&&ts(i))return!0}if(e.$&&e.$.macroExpansion){if(e.$.type&&Ke(e.$.type))return!1;if(ts(e.$.macroExpansion))return!0}if((n=e.$)!=null&&n.deferredDupExpressions){for(let i of e.$.deferredDupExpressions)if(ts(i))return!0}if((r=e.$)!=null&&r.deferredDropExpressions){for(let i of e.$.deferredDropExpressions)if(ts(i))return!0}return!1}function gu(e,t,n=!0){for(let r=0;r<e.fields.length;r++){let i=e.fields[r],o=e.type.fields[r];if(Ie(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=Ve(a);Object.values(t.functions).some(c=>c.cName===l)?t.functions[i.funcId]={value:i,cName:Ve(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:Ve(i.funcId)};else if(n&&t.currentModuleId&&i.funcId.startsWith(`fn_${t.currentModuleId}_`)){let l=Ve(a);Object.values(t.functions).some(c=>c.cName===l)?t.functions[i.funcId]={value:i,cName:Ve(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:Ve(i.funcId)};Hn(i.body,t)}}}function tb(e,t){for(let n=0;n<e.fields.length;n++){let r=e.fields[n];r&&Ie(r)?t.functions[r.funcId]||(r.isModuleEffectMember=!0,t.functions[r.funcId]={value:r,cName:Ve(r.funcId)},Hn(r.body,t)):r&&Rt(r)&&tb(r,t)}}function Hn(e,t){var i,o,a,s,l,u,c,f,_,p,d,v;if((i=e.$)!=null&&i.value&&Rt(e.$.value)){let y=e.$.value;tb(y,t)}if(S(e)&&b(e,B.test)||S(e)&&b(e,F.comptime_expect_error))return;if(e.$&&e.$.macroExpansion&&Hn(e.$.macroExpansion,t),(o=e.$)!=null&&o.effectAnalysis){let y=e.$.effectAnalysis.handlerValue;y&&Ie(y)&&Hn(y.body,t)}if(e.$&&e.$.closureFunctionValue){let y=e.$.closureFunctionValue;t.functions[y.funcId]||(t.functions[y.funcId]={value:y,cName:Ve(y.funcId)},Hn(y.body,t))}if((a=e.$)!=null&&a.indexMethodValue&&Ie(e.$.indexMethodValue)){let y=e.$.indexMethodValue;t.functions[y.funcId]||(t.functions[y.funcId]={value:y,cName:Ve(y.funcId)},Hn(y.body,t))}if(S(e)&&e.$&&e.$.dynCallTraitValues&&e.$.dynCallTraitValues.length>0){let y=e.$.type,h=e.args[0];if(ht(y)&&h&&((s=h.$)!=null&&s.type)){let g=h.$.type,T=e.$.dynCallTraitValues;if(T.length>0&&(dn(g)||hr(g))){let E=hr(g)?g.fields[0].type:g,$=`${E.id}_${y.id}`;t.dynImpls.set($,{dynType:y,concreteType:E,dataType:g,traitValues:T})}}}if(S(e)){let y=(l=e.func.$)==null?void 0:l.type,h=(u=e.func.$)==null?void 0:u.value;if(e.func.token.value==="?=")return;if(_e(y)){if(Ie(h)&&h.isControlFunction){Hn(h.body,t);for(let g of e.args)Hn(g,t);return}if(Ie(h)){if(h.type.return.isCompileTimeOnly||jd(h)&&!h.specializedType)return;if(h.specializedType&&_o(h.specializedType)&&Fn(h.specializedType).length===0){Hn(e.func,t);for(let T of e.args)Hn(T,t);return}if(!t.functions[h.funcId]){let g=!1;if(ts(h.body)){let T=h.specializedType??h.type;if(g=T.implicitParameters.length>0&&(Fn(T).length>0||!_o(h.type)&&h.type.implicitParameters.length>0),!g)return}if(!g&&!(Fn(h.specializedType??h.type).length>0)&&(h.specializedType??h.type).parameters.map(k=>k.type).some(k=>H(k)&&yt(k)&&!k.resolvedConcreteType))return;t.functions[h.funcId]={value:h,cName:Ve(h.funcId)},Hn(h.body,t)}}else if(y.isExtern==="c"){let g=y.externName?y.externName:Q(e.func)?e.func.token.value:y.id;t.externFunctions[y.id]={type:y,cName:g}}else if(y.isExtern==="yo"){let g=y.externName;if(!(g&&g.startsWith("__yo_"))){let T=g?Ve(g):Q(e.func)?Ve(e.func.token.value):Ve(y.id);t.externFunctions[y.id]={type:y,cName:T}}}}Hn(e.func,t);for(let g of e.args)Hn(g,t)}let n=(c=e.$)==null?void 0:c.type,r=(f=e.$)==null?void 0:f.value;if(_e(n)){if(Ie(r)&&r.isControlFunction){if(r.isModuleEffectMember=!0,t.functions[r.funcId]||(t.functions[r.funcId]={value:r,cName:Ve(r.funcId)}),r.specializedFunctionCaches)for(let y of r.specializedFunctionCaches){let h=y.specializedFunction;h&&!t.functions[h.funcId]&&(h.isModuleEffectMember=!0,t.functions[h.funcId]={value:h,cName:Ve(h.funcId)},Hn(h.body,t))}Hn(r.body,t);return}if(Ie(r)){if(jd(r)&&!r.specializedFunctionCaches||t.functions[r.funcId])return;if(ts(r.body))return;t.functions[r.funcId]={value:r,cName:Ve(r.funcId)},Hn(r.body,t)}}if(X((_=e.$)==null?void 0:_.value)&&Zn(e.$.value.value,t),(p=e.$)!=null&&p.deferredDupExpressions)for(let y of e.$.deferredDupExpressions)Hn(y,t);if((d=e.$)!=null&&d.deferredDropExpressions)for(let y of e.$.deferredDropExpressions)Hn(y,t);if((v=e.$)!=null&&v.dynCallTraitValues)for(let y of e.$.dynCallTraitValues)gu(y,t,!1)}function nb(e){let t=F.dispose[0];for(let n in e.types){let{type:r}=e.types[n];if(!Oe(r)||!r.isReferenceSemantics)continue;let i=ki({concreteType:r,methodName:t,env:r.env});for(let o of i)if(o.value&&Ie(o.value)){let a=o.value;if(e.functions[a.funcId])continue;a.funcName||(a.funcName=t),e.functions[a.funcId]={value:a,cName:Ve(a.funcId)},Uo(a.type,e),Hn(a.body,e)}}}function rb(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 ib(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=H(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=se(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 f=`__yo_dispose_${u}`;if(e.needsCycleGC)t.emitLine(` box->header.dispose_fn = ${f};`);else{e.disposeTypeIds||(e.disposeTypeIds=new Map,e.nextDisposeTypeId=1);let d=e.disposeTypeIds.get(f);d===void 0&&(d=e.nextDisposeTypeId,e.nextDisposeTypeId=d+1,e.disposeTypeIds.set(f,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=(H(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&&Ie(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 ob(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(!Dn(c))continue;let f=c.isFn.callType,_=se(f.return.type,e),p=`__yo_wrap_${a}_call`,d=["void* self_ptr"];for(let v=0;v<f.parameters.length;v++){let y=f.parameters[v],h=se(y.type,e);d.push(`${h} arg${v+1}`)}if(t.emitDeclarationLine(`static ${_} ${p}(${d.join(", ")}) {`),hr(l)){let v=((n=e.types[l.id])==null?void 0:n.cName)||`unknown_${l.id}`,y=Ve(l.fields[0].label);t.emitDeclarationLine(` ${v}* box = (${v}*)self_ptr;`);let h=l.fields[0].type,g=H(h)&&h.resolvedConcreteType?h.resolvedConcreteType:h,T=e.implClosureCallMap.get(g.id),E=(()=>{var k;if(T)return T.functionCName;for(let[,C]of Object.entries(e.functions)){let I=C.value.closureInfo;if(((k=I==null?void 0:I.captureType)==null?void 0:k.id)===g.id)return C.cName}})(),$=[];if(E){$.push(`(void*)&box->${y}`);for(let k=0;k<f.parameters.length;k++)$.push(`arg${k+1}`);So(f.return.type)?t.emitDeclarationLine(` ${E}(${$.join(", ")});`):t.emitDeclarationLine(` return ${E}(${$.join(", ")});`)}else{$.push(`box->${y}.data`);for(let k=0;k<f.parameters.length;k++)$.push(`arg${k+1}`);So(f.return.type)?t.emitDeclarationLine(` box->${y}.call(${$.join(", ")});`):t.emitDeclarationLine(` return box->${y}.call(${$.join(", ")});`)}}else{t.emitDeclarationLine(" (void)self_ptr; /* Dyn(Fn): expected Box(...) data */");for(let v=0;v<f.parameters.length;v++)t.emitDeclarationLine(` (void)arg${v+1};`);So(f.return.type)?t.emitDeclarationLine(" return;"):(t.emitDeclarationLine(` ${_} zero = (${_})0;`),t.emitDeclarationLine(" return zero;"))}t.emitDeclarationLine("}"),t.emitDeclarationLine("")}for(let c=0;c<s.dynType.requiredTraits.length;c++){let{traitType:f}=s.dynType.requiredTraits[c];if(Dn(f))continue;let _=s.traitValues[c];if(!_){t.emitDeclarationLine(`/* Warning: Module value missing for module ${c} */`);continue}let d=_.type.fields;for(let v=0;v<d.length;v++){let y=d[v];if(y.label==="Self"||u.has(y.label))continue;let h=_.fields[v];if(!h||!Ie(h)){t.emitDeclarationLine(`/* Warning: Module field ${y.label} is not a function value */`);continue}let g=y.type;if(!_e(g)){t.emitDeclarationLine(`/* Warning: Module field ${y.label} is not a function type */`);continue}let T=h.funcId,E=(r=e.functions[T])==null?void 0:r.cName;if(!E){t.emitDeclarationLine(`/* Warning: Impl function for ${y.label} not found */`);continue}let $=`__yo_wrap_${a}_${y.label}`,k=se(g.return.type,e),C=["void* self_ptr"];for(let x=1;x<g.parameters.length;x++){let V=g.parameters[x],M=se(V.type,e);C.push(`${M} arg${x}`)}t.emitDeclarationLine(`static ${k} ${$}(${C.join(", ")}) {`);let w=(i=g.parameters[0])==null?void 0:i.type,I;if(hr(l)){let x=((o=e.types[l.id])==null?void 0:o.cName)||`unknown_${l.id}`,V=Ve(l.fields[0].label);t.emitDeclarationLine(` ${x}* box = (${x}*)self_ptr;`),w&&et(w)?I=`&box->${V}`:I=`box->${V}`}else{let x=se(s.concreteType,e);t.emitDeclarationLine(` ${x} concrete_value = (${x})self_ptr;`),w&&et(w)?I="&concrete_value":I="concrete_value"}let L=[I];for(let x=1;x<g.parameters.length;x++)L.push(`arg${x}`);So(g.return.type)?t.emitDeclarationLine(` ${E}(${L.join(", ")});`):t.emitDeclarationLine(` return ${E}(${L.join(", ")});`),t.emitDeclarationLine("}"),t.emitDeclarationLine("")}}}}}function ab(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=H(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=H(s.concreteType)&&s.concreteType.resolvedConcreteType?s.concreteType.resolvedConcreteType:s.concreteType,c=((o=e.types[u.id])==null?void 0:o.cName)||`unknown_${u.id}`,f=`__yo_vtable_${a}`,_=`${l}_vtable`,p=`__yo_typeid_${c}`;t.emitDeclarationLine(`// Vtable for impl(${c}, ${s.dynType.requiredTraits.map(({traitType:y})=>y.typeName||"?").join(" + ")})`),t.emitDeclarationLine(`static const ${_} ${f} = {`),t.emitDeclarationLine(` .__yo_type_id = (uintptr_t)&${p},`);let d=new Set,v=new Set([F.___dup[0],F.___drop[0],F.___dispose[0],F.dispose[0]]);for(let{traitType:y}of s.dynType.requiredTraits){if(Dn(y)){let h=`__yo_wrap_${a}_call`;t.emitDeclarationLine(` .call = ${h},`),d.add("call");continue}for(let h of y.fields)if(h.label!=="Self"&&!v.has(h.label)&&!d.has(h.label)&&(d.add(h.label),_e(h.type))){let g=h.type;if(g.parameters.length>0){let T=g.parameters[0];if(T&&T.label==="self"){let E=`__yo_wrap_${a}_${h.label}`;t.emitDeclarationLine(` .${Ve(h.label)} = ${E},`)}}}}t.emitDeclarationLine("};"),t.emitDeclarationLine("")}}function sb(e,t){let r=Jn(t)?"__declspec(thread)":"_Thread_local";e.emitLine(`
240
240
  // ============================================================================
241
241
  // Async/Await Runtime - Per-Thread Cooperative Scheduler
242
242
  // ============================================================================
@@ -10898,7 +10898,7 @@ ${o} __yo_iso_extract_${r}(${r} iso) {
10898
10898
  result.data.Some.value = iso->value;
10899
10899
  }
10900
10900
  return result;
10901
- }`)}i.extractGenerated=!0}}}}function LA(e,t,n){let r=n.emitter;if(e.isNewtype&&e.fields.length===1){let i=e.fields[0].type,o=se(i,n);r.emitDeclarationLine(`typedef ${o} ${t}; // ${e.typeName} : ${O(e)} (newtype - zero-cost abstraction)`),r.emitDeclarationLine("");return}if(e.isReferenceSemantics){let i=e.isAtomicRc?" atomic":"";r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${O(e)} (${i?"atomic ":""}reference counted)`),r.emitDeclarationLine(` __yo_ref_header_t header; // ${i?"Atomic r":"R"}eference count header`);for(let o of e.fields){let a=se(o.type,n),s=Ve(o.label);r.emitDeclarationLine(` ${a} ${s};`)}r.emitDeclarationLine("};")}else{r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${O(e)}`);for(let i of e.fields){let o=se(i.type,n),a=Ve(i.label);r.emitDeclarationLine(` ${o} ${a};`)}r.emitDeclarationLine("};")}r.emitDeclarationLine("")}function IA(e,t,n){let r=n.emitter;if(r.emitDeclarationLine(`typedef struct { // ${e.typeName} : ${O(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=se(o.type,n),s=`_${i}`;r.emitDeclarationLine(` ${a} ${s};`)}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("")}function SA(e,t,n){let r=n.emitter;r.emitDeclarationLine(`typedef union { // ${e.typeName} : ${O(e)}`);for(let i of e.fields){let o=se(i.type,n),a=Ve(i.label);r.emitDeclarationLine(` ${o} ${a};`)}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("")}function Mm(e,t,n){let r=n.emitter,i=fr(e);if(i){let l=se(i,n);r.emitDeclarationLine(`typedef ${l} ${t}; // ${e.typeName} : ${O(e)} (optimized as nullable pointer)`),r.emitDeclarationLine("");return}if(ui(e)){r.emitDeclarationLine(`typedef enum { // ${e.typeName} : ${O(e)} (optimized as simple enum)`);for(let l=0;l<e.variants.length;l++){let u=e.variants[l];if(u){let c=or(e,u.name,n),f=l<e.variants.length-1?",":"",_=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=or(e,u.name,n),f=l<e.variants.length-1?",":"",_=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=>!Ke(c.type));if(u.length>0){let c=l.name;r.emitDeclarationLine(" struct {");for(let f of u){let _=se(f.type,n),p=Ve(f.label);r.emitDeclarationLine(` ${_} ${p};`)}r.emitDeclarationLine(` } ${c};`)}}r.emitDeclarationLine(`} ${s};`),r.emitDeclarationLine(""),r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${O(e)}`),r.emitDeclarationLine(` ${a} tag;`),r.emitDeclarationLine(` ${s} data;`),r.emitDeclarationLine("};"),r.emitDeclarationLine("")}function AA(e,t){let n=yi(t,"Dispose");if(!n)return;let r={...n,receiverType:e};if(e.trait)for(let o of e.trait.fields){if(!o.assignedValue||!on(o.assignedValue))continue;let a=o.assignedValue,s=a.type;if(Ce({type:r,env:t},{type:s,env:t}))return a}let i=t_({concreteType:e,traitType:n,env:t});if(i)return i.traitValue}function xA(e,t,n){var s;let r=AA(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(!Se(o))return;let a=(s=n.functions[o.funcId])==null?void 0:s.cName;if(a){let l=o.specializedType??o.type;return{cName:a,selfType:l.SelfType}}for(let l in n.functions){let u=n.functions[l],c=u.value,f=c.specializedType??c.type;if(c.funcName===F.dispose[0]&&f.SelfType&&Ce({type:f.SelfType,env:t},{type:e,env:t}))return{cName:u.cName,selfType:f.SelfType}}}function bb(e){var t,n,r,i,o,a,s,l;e.emitter.emitLine("// Function implementations"),yb(e.emitter,e.targetInfo),e.usesAsync&&hb(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&&Eb(e.emitter,e.debugParallelism,e.targetInfo,e.usesAsync??!1),DA(e),OA(e);for(let u in e.functions){let{value:c,cName:f}=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(!_&&!c.type.isClosure&&((r=c.specializedFunctionCaches)==null?void 0:r.length)>0||!_&&!d&&!c.isModuleEffectMember&&!c.type.isClosure&&!c.specializedType&&(((i=c.specializedFunctionCaches)==null?void 0:i.length)??0)===0&&Fn(c.specializedType??c.type).length===0&&[...c.type.implicitParameters,...c.type.parameters.filter(I=>I.isImplicit)].some(I=>_e(I.type)))continue;let y=c.specializedType&&!Di(c.type),h=c.specializedType??c.type,g=Fn(h).length>0,T=c.type.parameters.some(I=>I.isCompileTimeOnly);if(!_&&(!c.isModuleEffectMember||T)&&!c.specializedType&&(((o=c.specializedFunctionCaches)==null?void 0:o.length)??0)===0&&(_o(c.type)||ha(c))||!_&&c.isIoAsyncStateMachineClosure||!_&&!d&&!g&&!c.isModuleEffectMember&&(_o(c.type)&&!c.type.isClosure||((a=c.specializedFunctionCaches)==null?void 0:a.length)>0&&!c.type.isClosure||c.specializedType&&!y||ha(c)||$o(c)||c.isIoAsyncStateMachineClosure))continue;let E=c.specializedType??c.type,$=!d&&!c.isModuleEffectMember&&(E.parameters.some(I=>Xe(I.type))||E.forallParameters.length>0),k=Xe(E.return.type),C=H(E.return.type)&&E.return.type.requiredTraits.length>0;if($||k&&!C&&!c.isModuleEffectMember)continue;let w=(l=(s=c.body)==null?void 0:s.$)==null?void 0:l.effectAnalysis;w&&w.hasEffects,Lb(c,f,e)}Rm(e)}function Cb(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(Q(l)&&((r=l.$)!=null&&r.type))c=l;else if(S(l)&&b(l,":",2)){let d=l.args[0];Q(d)&&((i=d.$)!=null&&i.type)&&(c=d)}if(!c||!((o=c.$)!=null&&o.type))continue;let f=((a=c.$)==null?void 0:a.variableName)??c.token.value,_=ot(f,c.$.env),p=se(c.$.type,e);t.emitDeclarationLine(`static ${p} ${_}; // module-level mutable variable`),n.push({cVarName:_,cTypeStr:p,rhs:u})}return n}function kb(e,t){if(t.length===0)return;let n=e.emitter;n.emitLine(`
10901
+ }`)}i.extractGenerated=!0}}}}function LA(e,t,n){let r=n.emitter;if(e.isNewtype&&e.fields.length===1){let i=e.fields[0].type,o=se(i,n);r.emitDeclarationLine(`typedef ${o} ${t}; // ${e.typeName} : ${O(e)} (newtype - zero-cost abstraction)`),r.emitDeclarationLine("");return}if(e.isReferenceSemantics){let i=e.isAtomicRc?" atomic":"";r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${O(e)} (${i?"atomic ":""}reference counted)`),r.emitDeclarationLine(` __yo_ref_header_t header; // ${i?"Atomic r":"R"}eference count header`);for(let o of e.fields){let a=se(o.type,n),s=Ve(o.label);r.emitDeclarationLine(` ${a} ${s};`)}r.emitDeclarationLine("};")}else{r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${O(e)}`);for(let i of e.fields){let o=se(i.type,n),a=Ve(i.label);r.emitDeclarationLine(` ${o} ${a};`)}r.emitDeclarationLine("};")}r.emitDeclarationLine("")}function IA(e,t,n){let r=n.emitter;if(r.emitDeclarationLine(`typedef struct { // ${e.typeName} : ${O(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=se(o.type,n),s=`_${i}`;r.emitDeclarationLine(` ${a} ${s};`)}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("")}function SA(e,t,n){let r=n.emitter;r.emitDeclarationLine(`typedef union { // ${e.typeName} : ${O(e)}`);for(let i of e.fields){let o=se(i.type,n),a=Ve(i.label);r.emitDeclarationLine(` ${o} ${a};`)}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("")}function Mm(e,t,n){let r=n.emitter,i=fr(e);if(i){let l=se(i,n);r.emitDeclarationLine(`typedef ${l} ${t}; // ${e.typeName} : ${O(e)} (optimized as nullable pointer)`),r.emitDeclarationLine("");return}if(ui(e)){r.emitDeclarationLine(`typedef enum { // ${e.typeName} : ${O(e)} (optimized as simple enum)`);for(let l=0;l<e.variants.length;l++){let u=e.variants[l];if(u){let c=or(e,u.name,n),f=l<e.variants.length-1?",":"",_=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=or(e,u.name,n),f=l<e.variants.length-1?",":"",_=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=>!Ke(c.type));if(u.length>0){let c=l.name;r.emitDeclarationLine(" struct {");for(let f of u){let _=se(f.type,n),p=Ve(f.label);r.emitDeclarationLine(` ${_} ${p};`)}r.emitDeclarationLine(` } ${c};`)}}r.emitDeclarationLine(`} ${s};`),r.emitDeclarationLine(""),r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${O(e)}`),r.emitDeclarationLine(` ${a} tag;`),r.emitDeclarationLine(` ${s} data;`),r.emitDeclarationLine("};"),r.emitDeclarationLine("")}function AA(e,t){let n=yi(t,"Dispose");if(!n)return;let r={...n,receiverType:e};if(e.trait)for(let o of e.trait.fields){if(!o.assignedValue||!on(o.assignedValue))continue;let a=o.assignedValue,s=a.type;if(Ce({type:r,env:t},{type:s,env:t}))return a}let i=t_({concreteType:e,traitType:n,env:t});if(i)return i.traitValue}function xA(e,t,n){var s;let r=AA(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(!Ie(o))return;let a=(s=n.functions[o.funcId])==null?void 0:s.cName;if(a){let l=o.specializedType??o.type;return{cName:a,selfType:l.SelfType}}for(let l in n.functions){let u=n.functions[l],c=u.value,f=c.specializedType??c.type;if(c.funcName===F.dispose[0]&&f.SelfType&&Ce({type:f.SelfType,env:t},{type:e,env:t}))return{cName:u.cName,selfType:f.SelfType}}}function bb(e){var t,n,r,i,o,a,s,l;e.emitter.emitLine("// Function implementations"),yb(e.emitter,e.targetInfo),e.usesAsync&&hb(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&&Eb(e.emitter,e.debugParallelism,e.targetInfo,e.usesAsync??!1),DA(e),OA(e);for(let u in e.functions){let{value:c,cName:f}=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(!_&&!c.type.isClosure&&((r=c.specializedFunctionCaches)==null?void 0:r.length)>0||!_&&!d&&!c.isModuleEffectMember&&!c.type.isClosure&&!c.specializedType&&(((i=c.specializedFunctionCaches)==null?void 0:i.length)??0)===0&&Fn(c.specializedType??c.type).length===0&&[...c.type.implicitParameters,...c.type.parameters.filter(I=>I.isImplicit)].some(I=>_e(I.type)))continue;let y=c.specializedType&&!Di(c.type),h=c.specializedType??c.type,g=Fn(h).length>0,T=c.type.parameters.some(I=>I.isCompileTimeOnly);if(!_&&(!c.isModuleEffectMember||T)&&!c.specializedType&&(((o=c.specializedFunctionCaches)==null?void 0:o.length)??0)===0&&(_o(c.type)||ha(c))||!_&&c.isIoAsyncStateMachineClosure||!_&&!d&&!g&&!c.isModuleEffectMember&&(_o(c.type)&&!c.type.isClosure||((a=c.specializedFunctionCaches)==null?void 0:a.length)>0&&!c.type.isClosure||c.specializedType&&!y||ha(c)||$o(c)||c.isIoAsyncStateMachineClosure))continue;let E=c.specializedType??c.type,$=!d&&!c.isModuleEffectMember&&(E.parameters.some(I=>Xe(I.type))||E.forallParameters.length>0),k=Xe(E.return.type),C=H(E.return.type)&&E.return.type.requiredTraits.length>0;if($||k&&!C&&!c.isModuleEffectMember)continue;let w=(l=(s=c.body)==null?void 0:s.$)==null?void 0:l.effectAnalysis;w&&w.hasEffects,Lb(c,f,e)}Rm(e)}function Cb(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(Q(l)&&((r=l.$)!=null&&r.type))c=l;else if(S(l)&&b(l,":",2)){let d=l.args[0];Q(d)&&((i=d.$)!=null&&i.type)&&(c=d)}if(!c||!((o=c.$)!=null&&o.type))continue;let f=((a=c.$)==null?void 0:a.variableName)??c.token.value,_=ot(f,c.$.env),p=se(c.$.type,e);t.emitDeclarationLine(`static ${p} ${_}; // module-level mutable variable`),n.push({cVarName:_,cTypeStr:p,rhs:u})}return n}function kb(e,t){if(t.length===0)return;let n=e.emitter;n.emitLine(`
10902
10902
  // Library initialization - call before using library functions
10903
10903
  void __yo_module_init(void) {`),n.emitLine(" // Initialize module-level mutable variables");for(let{cVarName:r,rhs:i}of t){let o=J(i," ",e);n.emitLine(` ${r} = ${o};`)}n.emitLine(`}
10904
10904
  `)}function wb(e){var a,s,l,u;let t=e.emitter,n=!1,r=null;for(let c in e.functions){let{cName:f,value:_}=e.functions[c];if(f==="__yo_user_main"){n=!0,r=_;break}}if(!n||!r)return;let i=r.type.return.type;if(!Ke(i))throw new Error(`main function must return unit , but it returns ${O(i)}. Use 'main :: (fn() -> unit)' instead. For exit codes, use 'exit(code)' from std/libc/stdlib.yo`);{let f=Fn(r.type).map(()=>"NULL").join(", "),_=f?`(${f})`:"()",p=e.usesAsync?`
@@ -11407,7 +11407,7 @@ static void __yo_init_process_cleanup(void) {
11407
11407
  if (cleanup_initialized) return;
11408
11408
  cleanup_initialized = true;
11409
11409
  atexit(__yo_process_cleanup);
11410
- }`}`)}function RA(e){let t=e.emitter;for(let n in e.types){let{type:r,cName:i}=e.types[n];if(Oe(r)&&r.isReferenceSemantics){if(r.isAtomicRc||r.fields.some(s=>Xe(s.type)))continue;let a=`__yo_traverse_${i}`;t.emitLine(`static void ${a}(void* ptr, void (*visit)(void*)) {`),t.emitLine(` ${i}* obj = (${i}*)ptr;`);for(let s of r.fields){let l=Ve(s.label),u=s.type;if(Oe(u)&&u.isReferenceSemantics)t.emitLine(` if (obj->${l}) {`),t.emitLine(` visit(obj->${l});`),t.emitLine(" }");else if(Ye(u)){let c=u;if(!fr(c)){if(!ui(c)){t.emitLine(` switch (obj->${l}.tag) {`);for(let _ of c.variants||[])if(_.fields&&_.fields.length>0){let p=_.fields.filter(d=>Oe(d.type)&&d.type.isReferenceSemantics);if(p.length>0){let d=or(c,_.name,e);t.emitLine(` case ${d}:`);for(let v of p)t.emitLine(` if (obj->${l}.data.${_.name}.${Ve(v.label)}) {`),t.emitLine(` visit(obj->${l}.data.${_.name}.${Ve(v.label)});`),t.emitLine(" }");t.emitLine(" break;")}}t.emitLine(" }")}}}}t.emitLine("}"),t.emitLine("")}}}function OA(e){var n;let t=e.emitter;e.needsCycleGC&&RA(e);for(let r in e.types){let{type:i,cName:o}=e.types[r];if(Oe(i)&&i.isReferenceSemantics){if(i.fields.some(c=>Xe(c.type)))continue;let s=`__yo_new_${o}`,l=i.fields.map(c=>{let f=se(c.type,e),_=Ve(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&&!i.isAtomicRc&&(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&&Se(c.assignedValue));if(u&&Se(u.assignedValue)){let c=u.assignedValue,f=((n=e.functions[c.funcId])==null?void 0:n.cName)||c.funcId;if(e.needsCycleGC)t.emitLine(` obj->header.dispose_fn = (void(*)(void*))${f};`);else{e.disposeTypeIds||(e.disposeTypeIds=new Map,e.nextDisposeTypeId=1);let _=e.disposeTypeIds.get(f);_===void 0&&(_=e.nextDisposeTypeId,e.nextDisposeTypeId=_+1,e.disposeTypeIds.set(f,_)),t.emitLine(` obj->header.type_id = ${_};`)}}else e.needsCycleGC?t.emitLine(" obj->header.dispose_fn = NULL;"):t.emitLine(" obj->header.type_id = 0;");if(e.needsCycleGC&&!i.isAtomicRc){let c=`__yo_traverse_${o}`;t.emitLine(` obj->header.traverse_fn = ${c};`)}i.fields.forEach(c=>{let f=Ve(c.label);t.emitLine(` obj->${f} = ${f};`)}),e.needsCycleGC&&!i.isAtomicRc&&Ji(i,new Set,i.env)&&t.emitLine(" __yo_gc_register(obj);"),t.emitLine(" return obj;"),t.emitLine("}"),t.emitLine("")}}}function Sb(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(f=>f.label===F.___drop[0]);if(!l||!l.assignedValue||!Se(l.assignedValue))continue;let u=l.assignedValue,c=(n=e.functions[u.funcId])==null?void 0:n.cName;c&&(t.emitLine(`static void ${s}(void* closure_ptr) { // Dispose for ${i} with ${a} (Impl closure - value type)`),t.emitLine(" if (closure_ptr) {"),t.emitLine(` ${i}* closure = (${i}*)closure_ptr;`),t.emitLine(" if (closure->data) {"),t.emitLine(` ${c}(*(${a}*)closure->data); // Drop the capture struct (dereference pointer to pass by value)`),t.emitLine(" // Note: capture data is stack-allocated for Impl closures, no __yo_free needed"),t.emitLine(" }"),t.emitLine(" }"),t.emitLine("}"),t.emitLine(""))}}}function Ab(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=H(r.concreteType)&&r.concreteType.resolvedConcreteType?r.concreteType.resolvedConcreteType:r.concreteType,s=`${(()=>{var f,_;let l=(f=e.types[o.id])==null?void 0:f.cName;if(l)return l;let u=Er(o);return(u?(_=e.types[u.id])==null?void 0:_.cName:void 0)||`unknown_${o.id}`})()}_${i}`;t.set(s,r)}e.dynImpls=t}var __=class{constructor(){this.exportedFunctionNames=new Set;this._needsIntelAsmSyntax=!1;this._usesParallelism=!1;this.emitter=new nl}compileModule(t,n,r={}){this.emitter.emitDeclarationLine(`
11410
+ }`}`)}function RA(e){let t=e.emitter;for(let n in e.types){let{type:r,cName:i}=e.types[n];if(Oe(r)&&r.isReferenceSemantics){if(r.isAtomicRc||r.fields.some(s=>Xe(s.type)))continue;let a=`__yo_traverse_${i}`;t.emitLine(`static void ${a}(void* ptr, void (*visit)(void*)) {`),t.emitLine(` ${i}* obj = (${i}*)ptr;`);for(let s of r.fields){let l=Ve(s.label),u=s.type;if(Oe(u)&&u.isReferenceSemantics)t.emitLine(` if (obj->${l}) {`),t.emitLine(` visit(obj->${l});`),t.emitLine(" }");else if(Ye(u)){let c=u;if(!fr(c)){if(!ui(c)){t.emitLine(` switch (obj->${l}.tag) {`);for(let _ of c.variants||[])if(_.fields&&_.fields.length>0){let p=_.fields.filter(d=>Oe(d.type)&&d.type.isReferenceSemantics);if(p.length>0){let d=or(c,_.name,e);t.emitLine(` case ${d}:`);for(let v of p)t.emitLine(` if (obj->${l}.data.${_.name}.${Ve(v.label)}) {`),t.emitLine(` visit(obj->${l}.data.${_.name}.${Ve(v.label)});`),t.emitLine(" }");t.emitLine(" break;")}}t.emitLine(" }")}}}}t.emitLine("}"),t.emitLine("")}}}function OA(e){var n;let t=e.emitter;e.needsCycleGC&&RA(e);for(let r in e.types){let{type:i,cName:o}=e.types[r];if(Oe(i)&&i.isReferenceSemantics){if(i.fields.some(c=>Xe(c.type)))continue;let s=`__yo_new_${o}`,l=i.fields.map(c=>{let f=se(c.type,e),_=Ve(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&&!i.isAtomicRc&&(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&&Ie(c.assignedValue));if(u&&Ie(u.assignedValue)){let c=u.assignedValue,f=((n=e.functions[c.funcId])==null?void 0:n.cName)||c.funcId;if(e.needsCycleGC)t.emitLine(` obj->header.dispose_fn = (void(*)(void*))${f};`);else{e.disposeTypeIds||(e.disposeTypeIds=new Map,e.nextDisposeTypeId=1);let _=e.disposeTypeIds.get(f);_===void 0&&(_=e.nextDisposeTypeId,e.nextDisposeTypeId=_+1,e.disposeTypeIds.set(f,_)),t.emitLine(` obj->header.type_id = ${_};`)}}else e.needsCycleGC?t.emitLine(" obj->header.dispose_fn = NULL;"):t.emitLine(" obj->header.type_id = 0;");if(e.needsCycleGC&&!i.isAtomicRc){let c=`__yo_traverse_${o}`;t.emitLine(` obj->header.traverse_fn = ${c};`)}i.fields.forEach(c=>{let f=Ve(c.label);t.emitLine(` obj->${f} = ${f};`)}),e.needsCycleGC&&!i.isAtomicRc&&Ji(i,new Set,i.env)&&t.emitLine(" __yo_gc_register(obj);"),t.emitLine(" return obj;"),t.emitLine("}"),t.emitLine("")}}}function Sb(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(f=>f.label===F.___drop[0]);if(!l||!l.assignedValue||!Ie(l.assignedValue))continue;let u=l.assignedValue,c=(n=e.functions[u.funcId])==null?void 0:n.cName;c&&(t.emitLine(`static void ${s}(void* closure_ptr) { // Dispose for ${i} with ${a} (Impl closure - value type)`),t.emitLine(" if (closure_ptr) {"),t.emitLine(` ${i}* closure = (${i}*)closure_ptr;`),t.emitLine(" if (closure->data) {"),t.emitLine(` ${c}(*(${a}*)closure->data); // Drop the capture struct (dereference pointer to pass by value)`),t.emitLine(" // Note: capture data is stack-allocated for Impl closures, no __yo_free needed"),t.emitLine(" }"),t.emitLine(" }"),t.emitLine("}"),t.emitLine(""))}}}function Ab(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=H(r.concreteType)&&r.concreteType.resolvedConcreteType?r.concreteType.resolvedConcreteType:r.concreteType,s=`${(()=>{var f,_;let l=(f=e.types[o.id])==null?void 0:f.cName;if(l)return l;let u=Er(o);return(u?(_=e.types[u.id])==null?void 0:_.cName:void 0)||`unknown_${o.id}`})()}_${i}`;t.set(s,r)}e.dynImpls=t}var __=class{constructor(){this.exportedFunctionNames=new Set;this._needsIntelAsmSyntax=!1;this._usesParallelism=!1;this.emitter=new nl}compileModule(t,n,r={}){this.emitter.emitDeclarationLine(`
11411
11411
  // Module ${t}`),this.emitter.emitDeclarationLine(`// Module ID: ${Gs(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:cu(),deferredAsyncBlocks:[],allocator:r.allocator??"libc",isLibrary:r.isLibrary??!1,currentModuleId:Gs(t),moduleLevelInitExprs:r.allModuleLevelInitExprs??n.moduleLevelInitExprs};if(gu(n,i),i.moduleLevelInitExprs)for(let a of i.moduleLevelInitExprs)Hn(a,i);if(eb(n,i),r.isLibrary&&i.exportedFunctionLabels)for(let[a]of i.exportedFunctionLabels){let s=i.functions[a];s&&this.exportedFunctionNames.add(s.cName)}nb(i),N$(i),D$(i),this.emitter.emitDeclarationLine(`
11412
11412
  // Future state enum - shared by all Future types
11413
11413
  typedef enum {
@@ -11427,19 +11427,19 @@ static void __yo_dispose_dispatch(void* ptr) {
11427
11427
  switch (header->type_id) {`);for(let[a,s]of i.disposeTypeIds)this.emitter.emitLine(` case ${s}: ${a}(ptr); return;`);this.emitter.emitLine(` default: return;
11428
11428
  }
11429
11429
  }`)}else i.needsCycleGC||this.emitter.emitLine("static void __yo_dispose_dispatch(void* ptr) { (void)ptr; }");i.needsIntelAsmSyntax&&(this._needsIntelAsmSyntax=!0),i.usesParallelism&&(this._usesParallelism=!0)}print(){return this.emitter.print()}getExportedFunctionNames(){return this.exportedFunctionNames}get needsIntelAsmSyntax(){return this._needsIntelAsmSyntax}get usesParallelism(){return this._usesParallelism}};var xb=0;function p_(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(p_(r))return!0;if(e.func&&p_(e.func))return!0}return!1}function hu(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&&hu(e.args[0],t);else for(let o of e.args)hu(o,t);e.func&&!i&&hu(e.func,t)}}function Nb(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=ei(o);if(a&&e.has(a)){let s=J(o,t,n);s&&n.emitter.emitLine(`${t}${s};`),r.shortCircuitHandledDropVarNames.add(a)}}}}function Db(e,t,n){var l;if(e.args.length===0)return"true";if(e.args.length===1)return J(e.args[0],t,n);let r=[];for(let u of e.args){let c=(l=u.$)==null?void 0:l.value;if(Ut(c)){if(c.value===!1)return"false";continue}r.push(u)}if(r.length===0)return"true";if(r.length===1)return J(r[0],t,n);if(!r.slice(1).some(u=>p_(u)))return`(${r.map(c=>J(c,t,n)).join(" && ")})`;let o=`__yo_sc_${xb++}`;n.emitter.emitLine(`${t}bool ${o} = false;`);let a=t,s=r.length-1;for(let u=0;u<r.length;u++){let c=J(r[u],a,n);u<r.length-1?(n.emitter.emitLine(`${a}if (${c}) {`),a+=" "):n.emitter.emitLine(`${a}${o} = ${c};`)}for(let u=s-1;u>=0;u--){let c=r[u+1],f=new Set;hu(c,f),Nb(f,a,n),a=a.slice(2),n.emitter.emitLine(`${a}}`)}return o}function Vb(e,t,n){var l;if(e.args.length===0)return"false";if(e.args.length===1)return J(e.args[0],t,n);let r=[];for(let u of e.args){let c=(l=u.$)==null?void 0:l.value;if(Ut(c)){if(c.value===!0)return"true";continue}r.push(u)}if(r.length===0)return"false";if(r.length===1)return J(r[0],t,n);if(!r.slice(1).some(u=>p_(u)))return`(${r.map(c=>J(c,t,n)).join(" || ")})`;let o=`__yo_sc_${xb++}`;n.emitter.emitLine(`${t}bool ${o} = true;`);let a=t,s=r.length-1;for(let u=0;u<r.length;u++){let c=J(r[u],a,n);u<r.length-1?(n.emitter.emitLine(`${a}if (!(${c})) {`),a+=" "):n.emitter.emitLine(`${a}${o} = ${c};`)}for(let u=s-1;u>=0;u--){let c=r[u+1],f=new Set;hu(c,f),Nb(f,a,n),a=a.slice(2),n.emitter.emitLine(`${a}}`)}return o}function Mb(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(ft(i)&&r){let c=n,f=r.map(p=>{var v,y;let d=J(p,t,n);if((v=p.$)!=null&&v.deferredDupExpressions&&p.$.deferredDupExpressions.length>0){sn(p,t,c);let h=p.$.deferredDupExpressions[0];if(S(h)&&((y=h.$)!=null&&y.variableName))return ot(h.$.variableName,h.$.env)}return d}).join(", "),_=se(i,n);if(o&&((u=e.$)!=null&&u.type)){let p=`(${_}){ .data = { ${f} } }`,d=fn(e.$.type,o,n);return n.emitter.emitLine(`${t}${d} = ${p};`),o}else return`(${_}){ .data = { ${f} } }`}}function Rb(e,t,n){var p,d,v;let r=n.emitter,i=e.args[0],o=e.args[1],a=(p=i.$)==null?void 0:p.value;if(!a||!X(a)||!ft(a.value))return"/* ERROR: __yo_array_fill first argument must be an ArrayType */";let s=a.value,l=s.length;if(!Mt(l))return"/* ERROR: __yo_array_fill requires compile-time known array length */";let u=se(s,n),c=J(o,t,n),f=((d=e.$)==null?void 0:d.variableName)||`temp_array_${Date.now()}`,_=`i_${xt(((v=e.$)==null?void 0:v.env.modulePath)??"")}`;return r.emitLine(`${t}${u} ${f};`),r.emitLine(`${t}for (int ${_} = 0; ${_} < ${l.value}; ${_}++) {`),r.emitLine(`${t} ${f}.data[${_}] = ${c};`),r.emitLine(`${t}}`),f}function Ob(e,t,n){var l,u,c,f,_,p,d,v,y,h,g,T,E,$,k,C,w,I,L,x,V,M,q;if((l=e.$)!=null&&l.isCompileTimeOnlyAssignment)return"";let r=e.args[0],i=e.args[1],o=!1;if(S(r)&&b(r,":",2)&&(o=!0,r=r.args[0]),o&&Q(r)&&((u=r.$)!=null&&u.env)){let P=r.token.value,R=ve(r.$.env,P);if(R.length>0&&R[R.length-1].isModuleLevel)return""}if(S(r)&&b(r,B.comptime)||S(r)&&b(r,B.given))return"";if((c=r.$)!=null&&c.pathCollection&&((f=r.$)==null?void 0:f.pathCollection.length)>0){let P=r.$.pathCollection[0];if(P&&P.length>=2){let R=P[0];if(typeof R=="string"&&((_=r.$)!=null&&_.env)){let te=ve(r.$.env,R);if(te.length>0&&te[te.length-1].isCompileTimeOnly)return""}}}if(Q(r)&&((p=r.$)!=null&&p.env)){let P=r.token.value,R=ve(r.$.env,P);if(R.length>0&&R[R.length-1].isCompileTimeOnly)return""}if(!((d=r.$)!=null&&d.type))return`// Error: No type information for left-hand side ${A(r)}
11430
- `;let a=J(r,t,n),s=!1;if((v=e.$)!=null&&v.variableName){let P=e.$.variableName,R=n;if((R.inAsyncStateMachine||R.inEffectStateMachine)&&a.startsWith("sm->")){let j=(y=R.stateMachineVariables)==null?void 0:y.get(P);if(!j&&R.stateMachineVariables){for(let[,Y]of R.stateMachineVariables)if(Y.name===P){j=Y;break}}if(j&&j.kind!=="outer"){let Y=`var_${j.id}`;Ke(r.$.type)||n.emitter.emitLine(`${t}sm->${Y} = ${a}; // Save old value for deferred drop`)}else s=!0}else{let j=fn(r.$.type,P,n);ft(r.$.type)?n.emitter.emitLine(`${t}${j} = ${a}; // Save old value for later use`):Ke(r.$.type)||n.emitter.emitLine(`${t}${j} = ${a}; // Save old value for later use`)}}if(ft(r.$.type)){let P=J(i,t,n),R=S(i)&&((h=i.$)==null?void 0:h.closureFunctionValue)&&((g=i.$)==null?void 0:g.type)&&ur(i.$.type),te=n,j=P;if(!R&&((T=i.$)!=null&&T.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){if((E=i.$)!=null&&E.variableName&&(($=i.$)!=null&&$.type)){let le=ot(i.$.variableName,i.$.env);if(le!==P.trim()){let Z=i.$.convertedRuntimeType||i.$.type,ce=se(Z,n);n.emitter.emitLine(`${t}${ce} ${le} = ${P};`)}}sn(i,t,te);let Y=i.$.deferredDupExpressions[0];S(Y)&&((k=Y.$)!=null&&k.variableName)&&(j=ot(Y.$.variableName,Y.$.env))}if(o){let Y=fn(r.$.type,J(r,t,n),n);n.emitter.emitLine(`${t}${Y} = ${j};`)}else n.emitter.emitLine(`${t}${a} = ${j};`)}else{let P=J(i,t,n),R=S(i)&&((C=i.$)==null?void 0:C.closureFunctionValue)&&((w=i.$)==null?void 0:w.type)&&ur(i.$.type),te=n,j=P;if(!R&&((I=i.$)!=null&&I.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){if((L=i.$)!=null&&L.variableName&&((x=i.$)!=null&&x.type)){let le=ot(i.$.variableName,i.$.env);if(le!==P.trim()){let Z=i.$.convertedRuntimeType||i.$.type,ce=se(Z,n);n.emitter.emitLine(`${t}${ce} ${le} = ${P};`)}}sn(i,t,te);let Y=i.$.deferredDupExpressions[0];S(Y)&&((V=Y.$)!=null&&V.variableName)&&(j=ot(Y.$.variableName,Y.$.env))}if(!Ke(r.$.type)){let Y=r.$.type,le=(M=i.$)==null?void 0:M.type,Z,ce=un(i.$.env.modulePath,j.trim());ce&&n.tempVarAsyncStructNames&&(Z=n.tempVarAsyncStructNames.get(j.trim()));let Te=o&&le&&yt(Y)&&yt(le),Ie;ce&&Te?Z?Ie=`${Z}*`:Ie=se(le,n):Te&&Z?Ie=`${Z}*`:Ie=se(Te?le:Y,n);let ge=(te.inAsyncStateMachine||te.inEffectStateMachine)&&a.startsWith("sm->");n.emitter.emitLine(`${t}${o&&!ge?Ie+" ":""}${a} = ${j};`)}}return s?"":((q=e.$)==null?void 0:q.variableName)??""}function Ub(e,t,n){var s,l,u,c,f,_,p,d,v,y,h,g;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||!yt(i))return"// Error: await argument must be a Future type";let o=jn(i);if(!o)return"// Error: could not extract Future module from type";let a=n;if(a.inAsyncStateMachine||a.inEffectStateMachine)return"";if(Or(e)){let T=J(r,t,n),E=se(i,n),$=o.isFuture.outputType;H($)&&($.resolvedConcreteType?$=$.resolvedConcreteType:(l=e.$)!=null&&l.type&&!H(e.$.type)?$=e.$.type:(u=e.$)!=null&&u.type&&H(e.$.type)&&e.$.type.resolvedConcreteType&&($=e.$.type.resolvedConcreteType));let k=a.emitter,C=Ke($)||H($)&&Ke(((c=e.$)==null?void 0:c.type)??$),w=(f=e.$)!=null&&f.variableName?`__sync_future_${e.$.variableName}`:"__sync_future",I=(_=e.$)!=null&&_.variableName?`__pre_await_state_${e.$.variableName}`:"__pre_await_state";k.emitLine(`${t}// Synchronous await (io.await outside state machine)`),k.emitLine(`${t}${E} ${w} = ${T};`),k.emitLine(`${t}int ${I} = ${w}->state;`),yu((p=r.$)==null?void 0:p.type)||(k.emitLine(`${t}if (${I} == 0 && ${w}->__yo_resume_fn) {`),UA(e,w,t,n),k.emitLine(`${t} __yo_incr_rc((void*)${w}); // event loop reference`),k.emitLine(`${t} ${w}->__yo_resume_fn((void*)${w});`),k.emitLine(`${t}}`)),k.emitLine(`${t}{`),k.emitLine(`${t} int __await_state = ${w}->state;`),k.emitLine(`${t} while (__await_state != -1 && __await_state != -2) {`),k.emitLine(`${t} __yo_async_poll_step();`),k.emitLine(`${t} __await_state = ${w}->state;`),k.emitLine(`${t} }`),k.emitLine(`${t} if (__await_state == -2) {`);let x=jn(i),V=((d=x==null?void 0:x.isFuture.effects)==null?void 0:d.some(M=>_e(M.type)||rt(M.type)||M.isEffectRowSpread))??!1;if(V){k.emitLine(`${t} if (${I} == -2) {`),k.emitLine(`${t} fprintf(stderr, "panic: attempted to await an aborted Future\\n");`),k.emitLine(`${t} abort();`),k.emitLine(`${t} }`);let M=a.pendingDeferredDrops;if(M){let R=(v=e.$)==null?void 0:v.variableName;a.pendingDeferredDrops=M.filter(te=>ei(te)!==R)}Dr(t+" ",a,e),a.pendingDeferredDrops=M;let q=PA(x,a),P=(h=(y=a.currentFunctionType)==null?void 0:y.return)==null?void 0:h.type;if(q)if(k.emitLine(`${t} __yo_effect_escaped = 0;`),P&&!Ke(P)){let R=se(P,n);R!=="void"?(k.emitLine(`${t} ${R} _esc_result;`),k.emitLine(`${t} memcpy(&_esc_result, __yo_effect_escape_value, sizeof(${R}));`),k.emitLine(`${t} return _esc_result;`)):k.emitLine(`${t} return;`)}else k.emitLine(`${t} return;`);else if(k.emitLine(`${t} __yo_effect_escaped = 1;`),P&&!Ke(P)){let R=se(P,n);k.emitLine(`${t} return (${R}){0};`)}else k.emitLine(`${t} return;`)}else k.emitLine(`${t} fprintf(stderr, "panic: attempted to await an aborted Future\\n");`),k.emitLine(`${t} abort();`);if(k.emitLine(`${t} }`),k.emitLine(`${t}}`),C)return"";{let M=((g=e.$)==null?void 0:g.variableName)||"__sync_await_result",q=se($,n),P=fn($,M,n);if(V){if(k.emitLine(`${t}${P};`),k.emitLine(`${t}if (${w}->state == -1) {`),mt($)){let R=Ur($,n);R?k.emitLine(`${t} ${M} = ${R}(${w}->result);`):k.emitLine(`${t} ${M} = ${w}->result;`)}else k.emitLine(`${t} ${M} = ${w}->result;`);k.emitLine(`${t}} else {`),k.emitLine(`${t} ${M} = (${q}){0};`),k.emitLine(`${t}}`)}else if(mt($)){let R=Ur($,n);R?k.emitLine(`${t}${P} = ${R}(${w}->result);`):k.emitLine(`${t}${P} = ${w}->result;`)}else k.emitLine(`${t}${P} = ${w}->result;`);return M}}return"// Error: await should only be used inside async blocks"}function zb(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||!yt(i))return"// Error: io.state argument must be a Future type";let a=n.emitter,s=J(r,t,n),l=(f=e.$)!=null&&f.variableName?`__raw_state_${e.$.variableName}`:"__raw_state",u=((_=e.$)==null?void 0:_.variableName)||"__io_state_result";return a.emitLine(`${t}int ${l} = ${s}->state;`),a.emitLine(`${t}int32_t ${u} = (${l} > 0) ? 1 : ${l};`),u}function Bb(e,t,n){var $,k,C,w,I;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=J(o,t,n),s=($=e.$)==null?void 0:$.type;if(!s||!Ye(s))return"// Error: JoinHandle.await return type must be Option(T)";let l=se(s,n),u=s.variants.find(L=>L.name==="Some"),c=(C=(k=u==null?void 0:u.fields)==null?void 0:k[0])==null?void 0:C.type,f=!c||Ke(c),_=f?"uint8_t":c?se(c,n):"uint8_t",p=or(s,"Some",n),d=or(s,"None",n),v=((w=e.$)==null?void 0:w.variableName)||"jh",y=`__jh_future_${v}`,h=`__jh_header_${v}`,g=((I=e.$)==null?void 0:I.variableName)||"__jh_result",T=`__yo_jh_header_${v}`;i.emitLine(`${t}// JoinHandle.await \u2014 poll spawned task, return Option(T)`);let E=fn(s,g,n);if(i.emitLine(`${t}${E};`),i.emitLine(`${t}{`),i.emitLine(`${t} void* ${y} = ${a}.__future;`),i.emitLine(`${t} struct ${T} {`),i.emitLine(`${t} __yo_ref_header_t header;`),i.emitLine(`${t} int state;`),i.emitLine(`${t} ${_} 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}*)${y};`),i.emitLine(`${t} int __jh_state = ${h}->state;`),i.emitLine(`${t} while (__jh_state != -1 && __jh_state != -2) {`),i.emitLine(`${t} __yo_async_poll_step();`),i.emitLine(`${t} __jh_state = ${h}->state;`),i.emitLine(`${t} }`),i.emitLine(`${t} if (__jh_state == -1) {`),f)i.emitLine(`${t} ${g} = (${l}){ .tag = ${p} };`);else if(c&&mt(c)){let L=Ur(c,n);L?i.emitLine(`${t} ${g} = (${l}){ .tag = ${p}, .data = { .Some = { .value = ${L}(${h}->result) } } };`):i.emitLine(`${t} ${g} = (${l}){ .tag = ${p}, .data = { .Some = { .value = ${h}->result } } };`)}else i.emitLine(`${t} ${g} = (${l}){ .tag = ${p}, .data = { .Some = { .value = ${h}->result } } };`);return i.emitLine(`${t} } else {`),i.emitLine(`${t} __yo_effect_escaped = 0;`),i.emitLine(`${t} ${g} = (${l}){ .tag = ${d} };`),i.emitLine(`${t} }`),i.emitLine(`${t}}`),g}function PA(e,t){let n=e.isFuture.effects;if(!(n!=null&&n.length))return!1;let r=qb(n),i=t.currentEvidenceParams;for(let o of r)if(_e(o.type)){let a=`${o.label}.${o.label}`;if(!(i!=null&&i.has(a)))return!0}else if(rt(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 qb(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;H(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),ln(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function UA(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=jn(i.$.type);if(!((f=o==null?void 0:o.isFuture.effects)!=null&&f.length))return;let a=qb(o.isFuture.effects),s=r,l=s.emitter,u=e.args.find(p=>S(p)&&b(p,B.using));if(u){let p=u.args;for(let d=0;d<a.length&&d<p.length;d++){let v=a[d],y=p[d];if(_e(v.type)){let h=J(y,n,r),g=v.label;l.emitLine(`${n} ${t}->__capture.${g} = (void*)${h};`)}else rt(v.type)&&Pb(v.type,t,n,(_=y.$)==null?void 0:_.value,s,e)}}else for(let p of a)if(_e(p.type)){let d=BA(p.label,s,e);d&&l.emitLine(`${n} ${t}->__capture.${p.label} = (void*)${d};`)}else rt(p.type)&&Pb(p.type,t,n,void 0,s,e)}function Pb(e,t,n,r,i,o){let a=i.emitter;for(let s of e.fields){if(!_e(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&&Rt(r)){let u=e.fields.indexOf(s),c=r.fields[u];if(c&&Se(c)){let f=i.functions[c.funcId];f&&(l=f.cName)}}if(!l&&i.currentEvidenceParams){for(let u of i.currentEvidenceParams.values())if(u.fieldLabel===s.label){l=u.cParamName;break}}l||(l=zA(s.label,e,i,o)),l&&a.emitLine(`${n} ${t}->__capture.${s.label} = (void*)${l};`)}}function zA(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=Pr(i,c=>c.isImplicit===!0);for(let c=o.length-1;c>=0;c--){let f=o[c],_=(l=f.value)==null?void 0:l[f.value.length-1];if(_&&Rt(_)){let p=_.type.fields.findIndex(d=>d.label===e);if(p>=0){let d=_.fields[p];if(d&&Se(d)){let v=(u=n.functions[d.funcId])==null?void 0:u.cName;if(v)return v}}}}}function BA(e,t,n){if(t.currentEvidenceParams){for(let r of t.currentEvidenceParams.values())if(r.fieldLabel===e)return r.cParamName}if(t.stateMachineVariables){for(let[,r]of t.stateMachineVariables)if(r.name===e&&r.kind==="outer")return`sm->__capture.${e}`}}function Gb(e,t,n){var a,s,l,u,c,f,_,p,d,v,y,h,g,T;let r=(a=e.$)==null?void 0:a.variableName,i=(s=e.$)==null?void 0:s.type,o=n;if(r&&i){!Ke(i)&&!an((l=e.$)==null?void 0:l.controlFlow)&&n.emitter.emitLine(`${t}${se(i,n)} ${r};`),n.emitter.emitLine(`${t}{ // begin block`);let E=o.pendingDeferredDrops,$=((u=e.$)==null?void 0:u.deferredDropExpressions)??[];o.pendingDeferredDrops=[...$,...E??[]];let k=o.consumedVarPendingDrops,C=((c=e.$)==null?void 0:c.consumedVariableDropExpressions)??[];o.consumedVarPendingDrops=[...C,...k??[]];let w=[],I=!Ke(i)&&!an((f=e.$)==null?void 0:f.controlFlow);for(let L=0;L<e.args.length;L++){let x=e.args[L],V=J(x,t+" ",n);w.push(V);let M=L===e.args.length-1;V&&!(M&&I)&&(x.$&&un(x.$.env.modulePath,V)||n.emitter.emitLine(`${t} ${V};`))}if(I){let L=e.args[e.args.length-1],x=w[w.length-1];if((_=L.$)!=null&&_.deferredDupExpressions&&L.$.deferredDupExpressions.length>0){if((p=L.$)!=null&&p.variableName){let M=L.$.variableName;L.$.variableName=void 0;let q=J(L,t+" ",n);L.$.variableName=M;let P=se(L.$.type,n),R=ot(M,L.$.env);R!==q&&n.emitter.emitLine(`${t} ${P} ${R} = ${q};`),x=R}sn(L,t+" ",n);let V=L.$.deferredDupExpressions[0];S(V)&&((d=V.$)!=null&&d.variableName)&&(x=ot(V.$.variableName,V.$.env))}n.emitter.emitLine(`${t} ${r} = ${x};`)}if((v=e.$)!=null&&v.deferredDropExpressions)for(let L of e.$.deferredDropExpressions){if(o.shortCircuitHandledDropVarNames){let V=ei(L);if(V&&o.shortCircuitHandledDropVarNames.has(V)){o.shortCircuitHandledDropVarNames.delete(V);continue}}let x=J(L,t+" ",n);x&&n.emitter.emitLine(`${t} ${x};`)}return n.emitter.emitLine(`${t}} // end begin block`),o.pendingDeferredDrops=E,o.consumedVarPendingDrops=k,Ke(i)||an((y=e.$)==null?void 0:y.controlFlow)?"":r}else{n.emitter.emitLine(`${t}{ // begin block`);let E=o.pendingDeferredDrops,$=((h=e.$)==null?void 0:h.deferredDropExpressions)??[];o.pendingDeferredDrops=[...$,...E??[]];let k=o.consumedVarPendingDrops,C=((g=e.$)==null?void 0:g.consumedVariableDropExpressions)??[];if(o.consumedVarPendingDrops=[...C,...k??[]],e.args.map(I=>J(I,t+" ",n)).forEach(I=>{I&&n.emitter.emitLine(`${t} ${I};`)}),(T=e.$)!=null&&T.deferredDropExpressions)for(let I of e.$.deferredDropExpressions){if(o.shortCircuitHandledDropVarNames){let x=ei(I);if(x&&o.shortCircuitHandledDropVarNames.has(x)){o.shortCircuitHandledDropVarNames.delete(x);continue}}let L=J(I,t+" ",n);L&&n.emitter.emitLine(`${t} ${L};`)}return n.emitter.emitLine(`${t}} // end begin block`),o.pendingDeferredDrops=E,o.consumedVarPendingDrops=k,""}}function Wb(e,t,n){var a;let r=e.args[0];if(S(r)&&b(r,B.comptime,1)||S(r)&&b(r,B.given,1))return"";if(!((a=r.$)!=null&&a.type))return`// Error: No type information for left-hand side ${A(r)}
11431
- `;let i=r.token.value,o=fn(r.$.type,i,n);return n.emitter.emitLine(`${t}${o};`),""}function jb(e,t,n){var r,i,o,a,s,l,u,c,f,_,p,d,v,y,h,g;if(e.$){let T=e.$.variableName,E=e.$.type,$=E&&Ke(E),k=-1;for(let x=0;x<e.args.length;x++){let V=e.args[x];if(S(V)&&b(V,"=>",2)){let M=V.args[0];if(M&&!(Ut((r=M.$)==null?void 0:r.value)&&M.$.value.value===!1)){k=x;break}}}let C=!1;if(k>=0){let x=e.args[k];if(x&&S(x)&&b(x,"=>",2)){let V=x.args[0];V&&Ut((i=V.$)==null?void 0:i.value)&&V.$.value.value===!0&&(C=!0)}}if(!$&&T&&!C){let x=se(E,n);n.emitter.emitLine(`${t}${x} ${T};`)}if(C&&k>=0){let x=e.args[k];if(x&&S(x)&&b(x,"=>",2)){let V=x.args[1];if(V){let M=J(V,t,n);T&&!$&&(M&&M!==""&&!M.startsWith("goto")&&M!=="continue"&&M!=="break"&&!M.includes("return")?n.emitter.emitLine(`${t}${T} = ${M};`):M&&(M.startsWith("goto")||M==="continue"||M==="break"||M.includes("return"))&&n.emitter.emitLine(`${t}${M};`))}}return $?"":T??""}let w=t,I=0,L=!1;for(let x=0;x<e.args.length;x++){let V=e.args[x];if(S(V)&&b(V,"=>",2)){let M=V.args[0],q=V.args[1];if(M&&q){if(Ut((o=M.$)==null?void 0:o.value)&&M.$.value.value===!1)continue;if(L){if(n.emitter.emitLine(`${w}else {`),I++,w+=" ",!(Ut((s=M.$)==null?void 0:s.value)&&M.$.value.value===!0)){let Y=J(M,w,n);n.emitter.emitLine(`${w}if (${Y}) {`)}}else{if(Ut((a=M.$)==null?void 0:a.value)&&M.$.value.value===!0)n.emitter.emitLine(`${w}{`);else{let j=J(M,w,n);n.emitter.emitLine(`${w}if (${j}) {`)}L=!0}let P=Ut((l=M.$)==null?void 0:l.value)&&M.$.value.value===!0,R=L&&P?w:w+" ";if(S(q)&&b(q,B.begin)){let j=q.args,Y=n,le=Y.pendingDeferredDrops,Z=((u=q.$)==null?void 0:u.deferredDropExpressions)??[];Y.pendingDeferredDrops=[...Z,...le??[]];let ce=Y.consumedVarPendingDrops,Te=((c=q.$)==null?void 0:c.consumedVariableDropExpressions)??[];Y.consumedVarPendingDrops=[...Te,...ce??[]];for(let Ie=0;Ie<j.length-1;Ie++){let ge=j[Ie],be=J(ge,R,n);if(be&&ge.$&&!un(ge.$.env.modulePath,be)&&n.emitter.emitLine(`${R}${be};`),an((f=ge.$)==null?void 0:f.controlFlow))break}if(j.length>0){let Ie=j[j.length-1];if((_=Ie.$)!=null&&_.deferredDupExpressions){if((p=Ie.$)!=null&&p.variableName){let be=Ie.$.variableName;Ie.$.variableName=void 0;let De=J(Ie,R,n);Ie.$.variableName=be;let ze=se(Ie.$.type,n),We=ot(be,Ie.$.env);We!==De&&n.emitter.emitLine(`${R}${ze} ${We} = ${De};`)}sn(Ie,R,n);let ge=Ie.$.deferredDupExpressions[0];if(S(ge)&&((d=ge.$)!=null&&d.variableName)){let be=ot(ge.$.variableName,ge.$.env);T&&!$&&n.emitter.emitLine(`${R}${T} = ${be};`)}else{let be=J(Ie,R,n);be&&T&&!$&&n.emitter.emitLine(`${R}${T} = ${be};`)}}else{let ge=J(Ie,R,n);ge&&(ge==="continue"||ge==="break"||ge.startsWith("goto")||S(Ie)&&b(Ie,B.return)||ge.includes("return")?n.emitter.emitLine(`${R}${ge};`):T&&!$&&n.emitter.emitLine(`${R}${T} = ${ge};`))}}(v=q.$)!=null&&v.deferredDropExpressions&&wn(q,R,n),Y.pendingDeferredDrops=le,Y.consumedVarPendingDrops=ce}else if((y=q.$)!=null&&y.deferredDupExpressions&&q.$.deferredDupExpressions.length>0){if((h=q.$)!=null&&h.variableName){let Y=q.$.variableName;q.$.variableName=void 0;let le=J(q,R,n);q.$.variableName=Y;let Z=se(q.$.type,n),ce=ot(Y,q.$.env);ce!==le&&n.emitter.emitLine(`${R}${Z} ${ce} = ${le};`)}sn(q,R,n);let j=q.$.deferredDupExpressions[0];if(S(j)&&((g=j.$)!=null&&g.variableName)){let Y=ot(j.$.variableName,j.$.env);T&&!$&&n.emitter.emitLine(`${R}${T} = ${Y};`)}else{let Y=J(q,R,n);Y&&T&&!$&&n.emitter.emitLine(`${R}${T} = ${Y};`)}}else{let j=J(q,R,n);j==="continue"||j==="break"||j.startsWith("goto")||S(q)&&b(q,B.return)||j.includes("return")?n.emitter.emitLine(`${R}${j};`):j===""||!j||T&&($||n.emitter.emitLine(`${R}${T} = ${j};`))}!(L&&P)&&n.emitter.emitLine(`${w}}`)}}}for(let x=0;x<I;x++)w=w.slice(0,-2),n.emitter.emitLine(`${w}}`);return $?"":T??""}return'/* "cond" expression is not evaluated */'}function Hb(e,t,n){let r=e.args[0];return J(r,t,n)}function Yb(e,t,n){var w,I,L,x,V;let r=e.args[0],i=(w=r.$)==null?void 0:w.type;if(!i||!ht(i))throw new Error("downcast codegen: expected Dyn type as first argument");let o=J(r,t,n),s=(I=e.args[1].$)==null?void 0:I.value;if(!s||!X(s))throw new Error("downcast codegen: expected TypeValue as second argument");let l=s.value,u=se(l,n),c=((L=n.types[l.id])==null?void 0:L.cName)||u,f=`__yo_typeid_${Ve(c)}`;n.typeIdStatics||(n.typeIdStatics=new Map),n.typeIdStatics.has(l.id)||(n.typeIdStatics.set(l.id,f),n.emitter.emitDeclarationLine(`static const char ${f} = 0;`)),n.cIncludes.add("<stdint.h>");let _=`${o}.vtable->__yo_type_id == (uintptr_t)&${f}`,p,d=!1,v="",y="";for(let[,M]of n.dynImpls){if(M.dynType.id!==i.id)continue;if((H(M.concreteType)&&M.concreteType.resolvedConcreteType?M.concreteType.resolvedConcreteType:M.concreteType).id===l.id&&hr(M.dataType)){d=!0,v=((x=n.types[M.dataType.id])==null?void 0:x.cName)||`unknown_box_${M.dataType.id}`,y=Ve(M.dataType.fields[0].label);break}}if(d){let M=`((${v}*)${o}.data)->${y}`,q=Ur(l,n);if(dn(l)){let P=uo(l)?"__yo_incr_rc_atomic":"__yo_incr_rc";p=`((${u})${P}((void*)${M}))`}else if(q)p=`${q}((${u})${M})`;else{let P=!1,R=!1,te=l;for(;Qr(te)&&te.fields.length===1;)te=te.fields[0].type;P=dn(te),R=uo(te),P?p=`((${u})${R?"__yo_incr_rc_atomic":"__yo_incr_rc"}((void*)${M}))`:p=`((${u})${M})`}}else p=`((${u})__yo_incr_rc((void*)${o}.data))`;let h=(V=e.$)==null?void 0:V.type;if(!h||!Ye(h))throw new Error("downcast codegen: expected Option enum as result type");if(fr(h))return`((${_}) ? ${p} : NULL)`;let T=se(h,n),E=or(h,"Some",n),$=or(h,"None",n),k=`(${T}){ .tag = ${E}, .data = { .Some = { .value = ${p} } } }`,C=`(${T}){ .tag = ${$} }`;return`((${_}) ? ${k} : ${C})`}function Kb(e,t,n){var h,g,T,E,$,k,C,w,I;if(!((h=e.$)!=null&&h.dynCallTraitValues)||e.$.dynCallTraitValues.length===0)return"/* Error: dyn() call missing trait values */";let r=((T=(g=e.$)==null?void 0:g.runtimeArgExprsInOrder)==null?void 0:T[0])??e.args[0];if(!r)return"/* Error: dyn() requires a value argument */";let i=e.$.type;if(!ht(i))return"/* Error: dyn() result type is not DynType */";let o=(E=r.$)==null?void 0:E.type;if(!o)return"/* Error: dyn() value has no type */";let a=e.$.dynCallTraitValues;if(!a||a.length===0)return"/* Error: dyn() call missing trait values */";if(!dn(o)&&!hr(o))return"/* Error: dyn() requires an object type (use box() for value types) */";let s=hr(o)?o.fields[0].type:o,l=H(s)&&s.resolvedConcreteType?s.resolvedConcreteType:s,u=(($=n.types[i.id])==null?void 0:$.cName)||`__yo_dyn_${i.id}`,f=`${(()=>{var M,q;let L=(M=n.types[l.id])==null?void 0:M.cName;if(L)return L;let x=Er(l);return(x?(q=n.types[x.id])==null?void 0:q.cName:void 0)||`unknown_${l.id}`})()}_${u}`;n.dynImpls.set(f,{dynType:i,concreteType:s,dataType:o,traitValues:a});let _=J(r,t,n);if((k=r.$)!=null&&k.variableName&&_!==r.$.variableName){let L=fn(r.$.type,r.$.variableName,n);n.emitter.emitLine(`${t}${L} = ${_};`),_=r.$.variableName}if((C=r.$)!=null&&C.deferredDupExpressions&&r.$.deferredDupExpressions.length>0){sn(r,t,n);let L=r.$.deferredDupExpressions[0];S(L)&&((w=L.$)!=null&&w.variableName)&&(_=ot(L.$.variableName,L.$.env))}let p=(I=e.$)==null?void 0:I.variableName;if(!p)return"/* Error: dyn() expression missing temp variable name */";let d=n,v;if(d.inAsyncStateMachine&&d.stateMachineVariables){for(let[,L]of d.stateMachineVariables)if(L.kind==="local"&&L.id===p){v=`sm->${$r(L.id,"local",d.stateMachineFieldAliases)}`;break}}let y=`__yo_vtable_${f}`;return v?(n.emitter.emitLine(`${t}${v} = (${u}){`),n.emitter.emitLine(`${t} .data = ${_},`),n.emitter.emitLine(`${t} .vtable = &${y}`),n.emitter.emitLine(`${t}};`),v):(n.emitter.emitLine(`${t}${u} ${p} = {`),n.emitter.emitLine(`${t} .data = ${_},`),n.emitter.emitLine(`${t} .vtable = &${y}`),n.emitter.emitLine(`${t}};`),p)}function Xb(e,t,n){return e.args.length!==0?"// Error: __yo_gc_collect requires exactly 0 arguments":"__yo_gc_collect()"}function Qb(e,t,n){var a,s,l,u,c,f,_,p,d,v,y,h,g,T,E,$,k,C,w;let r=e.args[0],i=e.args[1],o=n;if(S(r)&&b(r,B.comptime,1)||S(r)&&b(r,B.given,1))return"";if((o.inAsyncStateMachine||o.inEffectStateMachine)&&Q(r)&&Q(i)){let I=r.token.value,L=i.token.value,x=o.stateMachineVariables&&Array.from(o.stateMachineVariables.values()).some(M=>M.name===I),V=o.stateMachineVariables&&Array.from(o.stateMachineVariables.values()).some(M=>M.name===L);if(I===L&&(x||V))return""}if((a=e.$)!=null&&a.runtimeDestructurings){let I=e.$.runtimeDestructurings,L=J(i,t,n),x=(s=i.$)==null?void 0:s.type;return I.forEach(({label:V,type:M,variableName:q})=>{if(q==="_")return;let P=Ve(q,M.isExtern==="c"),R=fn(M,P,n);if(x&&Oe(x)&&x.isNewtype&&x.fields.length===1){let Y=x.fields[0];if(Y&&Y.label===V){n.emitter.emitLine(`${t}${R} = ${L}; // Destructuring ${V} (newtype)`);return}}let te=V.match(/^\d+$/)?`_${V}`:Ve(V,M.isExtern==="c");if(x&&Tt(x)&&!V.match(/^\d+$/)){let Y=x.fields.findIndex(le=>le.label===V);te=Y>=0?`_${Y}`:te}let j=x&&dn(x)?"->":".";n.emitter.emitLine(`${t}${R} = ${L}${j}${te}; // Destructuring ${V}`)}),""}if(Q(r)){let I=((l=r.$)==null?void 0:l.variableName)??r.token.value;if(!((u=r.$)!=null&&u.type))return`// Error: No type information for variable ${I}
11432
- `;if((c=r.$)!=null&&c.env){let V=ve(r.$.env,I);if(V.length>0&&V[V.length-1].isCompileTimeOnly||V.length>0&&V[V.length-1].isModuleLevel)return""}let L=!1,x;if((o.inAsyncStateMachine||o.inEffectStateMachine)&&o.stateMachineVariables&&((f=r.$)!=null&&f.env)){let V=ve(r.$.env,I);if(V.length>0){let M=V[V.length-1],q=M.isOwningTheSameRcValueAs?M.isOwningTheSameRcValueAs.id:M.id;o.stateMachineVariables.has(q)&&(L=!0,x=q)}}if(ft(r.$.type))if(S(i)&&b(i,B.array)){let V=J(i,t,n);if(L&&x){let M=$r(x,"local",o.stateMachineFieldAliases);n.emitter.emitLine(`${t}sm->${M} = ${V};`)}else if(!Ke(r.$.type)){let M=fn(r.$.type,I,n);n.emitter.emitLine(`${t}${M} = ${V};`)}}else{let V;if((_=i.$)!=null&&_.variableName){let M=ot(i.$.variableName,i.$.env),q=J(i,t,n);if(!L){let P=fn(i.$.type,M,n);M!==q&&n.emitter.emitLine(`${t}${P} = ${q};`)}V=M}else V=J(i,t,n);if(L&&x){let M=$r(x,"local",o.stateMachineFieldAliases);n.emitter.emitLine(`${t}sm->${M} = ${V};`)}else if(!Ke(r.$.type)){let M=fn(r.$.type,I,n);n.emitter.emitLine(`${t}${M} = ${V};`)}}else{let V,M=S(i)&&((p=i.$)==null?void 0:p.closureFunctionValue)&&((d=i.$)==null?void 0:d.type)&&ur(i.$.type),q=S(i)&&Qn(i);if((v=i.$)!=null&&v.variableName){let P=ot(i.$.variableName,i.$.env),R=ot(I,r.$.env);if(P===R){if(V=J(i,t,n),!M&&!q&&((y=i.$)!=null&&y.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){sn(i,t,o);let te=i.$.deferredDupExpressions[0];S(te)&&((h=te.$)!=null&&h.variableName)&&(V=ot(te.$.variableName,te.$.env))}}else if(Q(i)&&P===ot(i.token.value,i.$.env)){if(V=J(i,t,n),!M&&!q&&((g=i.$)!=null&&g.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){sn(i,t,o);let te=i.$.deferredDupExpressions[0];S(te)&&((T=te.$)!=null&&T.variableName)&&(V=ot(te.$.variableName,te.$.env))}}else if(Q(i)&&o.currentClosureCaptures&&o.currentClosureCaptures.includes(i.token.value)&&((E=i.$)!=null&&E.env)&&o.currentClosureCaptureFrameLevel!==void 0&&Co(i.token.value,i.$.env,o.currentClosureCaptureFrameLevel)){let te=o.currentClosureType;if(te&&te.isClosure){let j=Object.values(o.types).find(Y=>Y.type===te);j?V=`((${`${j.cName}_capture`}*)closure_context->data)->${ot(i.token.value,i.$.env)}`:V=`closure_context->${ot(i.token.value,i.$.env)}`}else V=`closure_context->${ot(i.token.value,i.$.env)}`}else{let te=J(i,t,n);if(te.trim()!==P){let j=i.$.convertedRuntimeType||i.$.type,Y=fn(j,P,n);n.emitter.emitLine(`${t}${Y} = ${te};`)}if(!M&&!q&&(($=i.$)!=null&&$.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){sn(i,t,o);let j=i.$.deferredDupExpressions[0];S(j)&&((k=j.$)!=null&&k.variableName)?V=ot(j.$.variableName,j.$.env):V=P}else V=P}}else if(V=J(i,t,n),!M&&!q&&((C=i.$)!=null&&C.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){sn(i,t,o);let P=i.$.deferredDupExpressions[0];S(P)&&((w=P.$)!=null&&w.variableName)&&(V=ot(P.$.variableName,P.$.env))}if(Vt(r.$.type)){let P=r.$.type;if(L&&x){let R=$r(x,"local",o.stateMachineFieldAliases);n.emitter.emitLine(`${t}sm->${R} = ${V};`)}else if(!Ke(P)){let R=fn(P,I,n);n.emitter.emitLine(`${t}${R} = ${V};`)}}else if(L&&x){let P=$r(x,"local",o.stateMachineFieldAliases);n.emitter.emitLine(`${t}sm->${P} = ${V};`)}else{let P=un(i.$.env.modulePath,V.trim()),R;if(P&&n.tempVarAsyncStructNames){let te=n.tempVarAsyncStructNames.get(V.trim());te?R=`${te}*`:R=se(r.$.type,n)}else R=se(r.$.type,n);Ke(r.$.type)||n.emitter.emitLine(`${t}${R} ${ot(I,r.$.env)} = ${V};`)}}return""}}var qA=0;function vu(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 Jn(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 v=se(n.$.type,r),y=(s=(a=n.args[0])==null?void 0:a.$)==null?void 0:s.type;return y&&Ye(y)&&!ui(y)?`((${v})((${t[0]}).tag))`:`((${v})(${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`(${se(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 v=se(n.$.type,r),y=`__yo_uninit_${qA++}`;return r.emitter.emitLine(`${i}${v} ${y};`),y}else return F.__yo_maybe_uninit_as_ptr.includes(e)&&((c=n.$)!=null&&c.type)?`((${se(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)&&((f=n.$)!=null&&f.type)&&et(n.$.type)?`(&(${se(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)&&((_=n.$)!=null&&_.type)&&et(n.$.type)?`(&(${se(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)&&et(n.$.type)?`(&(${se(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)&&et(n.$.type)?`(&(${se(n.$.type.childType,r)}){ .data = &((${t[0]})->data[(${t[1]}).start]), .length = (${t[1]}).end - (${t[1]}).start + 1 })`:`/* Unhandled operator ${e} */`}}function Jb(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=J(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=se(o,n),s=(f=e.$)==null?void 0:f.type;if(s&&((_=n.isoTypes)!=null&&_.has(a))){let d=n.isoTypes.get(a);d.optionTypeCName||(d.optionTypeCName=se(s,n))}let l=`__yo_iso_extract_${a}(${i})`,u=(p=e.$)==null?void 0:p.variableName;return u&&s?(n.emitter.emitLine(`${t}${se(s,n)} ${u} = ${l};`),u):l}function Zb(e,t,n){var s;let r=e.args[0];if(!r)return"// Error: __yo_iso_dispose requires exactly 1 argument";let i=J(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_${se(o,n)}(${i})`}function Om(e){var n;let t=(n=e.func.$)==null?void 0:n.value;return X(t)&&Vn(t.value)&&e.args.length===1}function eC(e,t,n){var c;if(!Om(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=J(a,t,n),l=se(i,n),u=se(o,n);return n.isoTypes||(n.isoTypes=new Map),n.isoTypes.has(l)||n.isoTypes.set(l,{childTypeCName:u,isoType:i}),`__yo_create_iso_${l}(${s})`}function zo(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)&&b(e,B.begin)){let f=e.args,_=n,p=_.pendingDeferredDrops,d=((r=e.$)==null?void 0:r.deferredDropExpressions)??[];_.pendingDeferredDrops=[...d,...p??[]];let v=_.consumedVarPendingDrops,y=((i=e.$)==null?void 0:i.consumedVariableDropExpressions)??[];_.consumedVarPendingDrops=[...y,...v??[]];for(let g=0;g<f.length-1;g++){let T=f[g],E=J(T,t,n);if(E&&n.emitter.emitLine(`${t}${E};`),an((o=T.$)==null?void 0:o.controlFlow))break}let h="";if(f.length>0){let g=f[f.length-1];if((a=g.$)!=null&&a.deferredDupExpressions&&g.$.deferredDupExpressions.length>0){if((s=g.$)!=null&&s.variableName){let E=g.$.variableName;g.$.variableName=void 0;let $=J(g,t,n);g.$.variableName=E;let k=se(g.$.type,n),C=ot(E,g.$.env);C!==$&&n.emitter.emitLine(`${t}${k} ${C} = ${$};`)}sn(g,t,n);let T=g.$.deferredDupExpressions[0];S(T)&&((l=T.$)!=null&&l.variableName)?h=ot(T.$.variableName,T.$.env):h=J(g,t,n)}else h=J(g,t,n)}return(u=e.$)!=null&&u.deferredDropExpressions&&wn(e,t,n),_.pendingDeferredDrops=p,_.consumedVarPendingDrops=v,h}else return(c=e.$)!=null&&c.deferredDupExpressions&&sn(e,t,n),J(e,t,n)}function nC(e,t,n){var v,y,h,g,T,E,$,k,C,w,I,L,x;if(!e.$)return'/* "match" expression is not evaluated */';let r=e.$.variableName,i=e.$.type,o=i&&Ke(i);if(!o&&r){let V=se(i,n);n.emitter.emitLine(`${t}${V} ${r};`)}let a=J(e.args[0],t,n),s=(v=e.args[0].$)==null?void 0:v.type;if(!s)return'// Error: "match" expression requires a valid type';if(e.$.isPrimitiveMatch)return WA(e,t,n,a,s,r,o);let l,u;if(et(s)?(u=s.childType,l=s.tag):dn(s)?(u=s,l="ref_semantics"):u=s,!Ye(u))return'// Error: "match" expression requires an enum type';if(!((y=n.types[u.id])==null?void 0:y.cName))return`// Error: "match" expression enum type ${u.typeName} has no C name`;let f=fr(u);if(f){let V=e.args.slice(1),M=null,q=null;for(let P of V)if(S(P)&&b(P,"=>",2)){if(!((g=(h=P.args[0])==null?void 0:h.$)!=null&&g.caseExecuted))continue;let R=P.args[0],te=P.args[1];if(R&&te&&S(R)&&b(R,"."))M={caseBody:te};else{let j=R.func;if(j&&S(j)&&b(j,".")){let Y=j.args[0];if(Y&&Q(Y)){let le=Y.token.value;q={caseBody:te,variantName:le,casePattern:R}}}}}if(n.emitter.emitLine(`${t}if (${l&&l!=="ref_semantics"?"*":""}${a} != NULL) {`),q){let P;if(S(q.casePattern)&&q.casePattern.args.length>0){let Y=q.casePattern.args[0];if(Y&&Q(Y)){P=Ve(Y.token.value);let le=f;n.emitter.emitLine(`${t} ${se(le,n)} ${P} = ${a};`)}}let R=n;P&&(R.inAsyncStateMachine||R.inEffectStateMachine)&&(R.localShadowedVariables||(R.localShadowedVariables=new Set),R.localShadowedVariables.add(P));let te=Bo(q.caseBody,t+" ",n);P&&R.localShadowedVariables&&R.localShadowedVariables.delete(P);let j=zo(te);if(!o&&r&&!j){let Y=te||a;n.emitter.emitLine(`${t} ${r} = ${Y};`)}else te&&te!==""&&n.emitter.emitLine(`${t} ${te};`)}if(n.emitter.emitLine(`${t}} else {`),M){let P=Bo(M.caseBody,t+" ",n),R=zo(P);!o&&r&&!R?n.emitter.emitLine(`${t} ${r} = ${P};`):P&&P!==""&&n.emitter.emitLine(`${t} ${P};`)}return n.emitter.emitLine(`${t}}`),o?"":r??""}if(ui(u)){n.emitter.emitLine(`${t}switch (${l&&l!=="ref_semantics"?"*":""}${a}) {`);let V=n.insideMatch;n.insideMatch=!0;let M=e.args.slice(1);for(let q=0;q<M.length;q++){let P=M[q];if(S(P)&&b(P,"=>",2)){if(!((E=(T=P.args[0])==null?void 0:T.$)!=null&&E.caseExecuted))continue;let R=P.args[0],te=P.args[1];if(R&&te&&Q(R)&&R.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let j=Bo(te,t+" ",n);!o&&r&&j&&!zo(j)?n.emitter.emitLine(`${t} ${r} = ${j};`):j&&n.emitter.emitLine(`${t} ${j};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(R&&te&&S(R)&&b(R,".",1)){let j=R.args[0].token.value,Y=or(u,j,n);n.emitter.emitLine(`${t}case ${Y}: {`);let le=Bo(te,t+" ",n);!o&&r&&le&&!zo(le)?n.emitter.emitLine(`${t} ${r} = ${le};`):le&&n.emitter.emitLine(`${t} ${le};`),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 M=d[V];if(S(M)&&b(M,"=>",2)){if(!((k=($=M.args[0])==null?void 0:$.$)!=null&&k.caseExecuted))continue;let q=M.args[0],P=M.args[1];if(q&&P&&Q(q)&&q.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let R=Bo(P,t+" ",n);!o&&r&&R&&!zo(R)?n.emitter.emitLine(`${t} ${r} = ${R};`):R&&n.emitter.emitLine(`${t} ${R};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(q&&P&&S(q)&&q.func.tag==="Atom"&&q.func.token.value==="."&&q.args.length>=1){let R=q.args[0].token.value,te=or(u,R,n);if(n.emitter.emitLine(`${t}case ${te}: {`),q.args.length>1){let Y=u.variants.find(le=>le.name===R);if(Y&&Y.fields){let le=q.args.slice(1);if(le.some(ce=>S(ce)&&b(ce,":",2))){for(let ce of le)if(S(ce)&&b(ce,":",2)){let Te=ce.args[0],Ie=ce.args[1];if(!Q(Te))continue;let ge=Te.token.value,be=Y.fields.find(De=>De.label===ge);if(!be||Ke(be.type))continue;if(Q(Ie)){let De=Ie.token.value;if(De!=="_"){let ze=Ve(De),We=Ve(ge),pe=se(be.type,n),fe=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${pe} ${ze} = ${a}${fe}data.${R}.${We};`);let $e=n;if(($e!=null&&$e.inAsyncStateMachine||$e!=null&&$e.inEffectStateMachine)&&$e.stateMachineVariables){let Le;if((C=Ie.$)!=null&&C.env){let Me=ve(Ie.$.env,De);Me.length>0&&(Le=Me[Me.length-1].id)}if(Le&&$e.stateMachineVariables.has(Le)){let Me=$r(Le,"local",$e.stateMachineFieldAliases);n.emitter.emitLine(`${t} sm->${Me} = ${ze};`)}}}}}}else for(let ce=0;ce<le.length&&ce<Y.fields.length;ce++){let Te=le[ce],Ie=Y.fields[ce];if(Q(Te)&&Ie){if(Ke(Ie.type))continue;let ge=Te.token.value;if(ge!=="_"){let be=Ve(ge),De=Ve(Ie.label),ze=se(Ie.type,n),We=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${ze} ${be} = ${a}${We}data.${R}.${De};`);let pe=n;if((pe!=null&&pe.inAsyncStateMachine||pe!=null&&pe.inEffectStateMachine)&&pe.stateMachineVariables){let fe;if((w=Te.$)!=null&&w.env){let $e=ve(Te.$.env,ge);$e.length>0&&(fe=$e[$e.length-1].id)}fe&&pe.stateMachineVariables.has(fe)&&n.emitter.emitLine(`${t} sm->${$r(fe,"local",pe.stateMachineFieldAliases)} = ${be};`)}}}}}}if(S(P)&&b(P,"=>",2)){let Y=P.args[0];n.emitter.emitLine(`${t} ${se(s,n)} ${Ve(Y.token.value)} = ${a};`),P=P.args[1]}let j=Bo(P,t+" ",n);!o&&r&&j&&!zo(j)?n.emitter.emitLine(`${t} ${r} = ${j};`):j&&n.emitter.emitLine(`${t} ${j};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(q&&P&&S(q)&&S(q.func)&&q.func.func.tag==="Atom"&&q.func.func.token.value==="."&&q.func.args.length===1){let R=q.func.args[0].token.value,te=or(u,R,n),j=q.args;n.emitter.emitLine(`${t}case ${te}: {`);let Y=u.variants.find(Z=>Z.name===R);if(Y&&Y.fields&&j.length>0)if(j.some(ce=>S(ce)&&b(ce,":",2))){for(let ce of j)if(S(ce)&&b(ce,":",2)){let Te=ce.args[0],Ie=ce.args[1];if(!Q(Te))continue;let ge=Te.token.value,be=Y.fields.find(De=>De.label===ge);if(!be)continue;if(Q(Ie)){let De=Ie.token.value;if(De!=="_"){let ze=Ve(De);if(Ke(be.type))n.emitter.emitLine(`${t} // ${ze} is unit type (no value)`);else{let We=Ve(ge),pe=se(be.type,n),fe=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${pe} ${ze} = ${a}${fe}data.${R}.${We};`);let $e=n;if(($e!=null&&$e.inAsyncStateMachine||$e!=null&&$e.inEffectStateMachine)&&$e.stateMachineVariables){let Le;if((I=Ie.$)!=null&&I.env){let Me=ve(Ie.$.env,ze);Me.length>0&&(Le=Me[Me.length-1].id)}Le&&$e.stateMachineVariables.has(Le)&&n.emitter.emitLine(`${t} sm->${$r(Le,"local",$e.stateMachineFieldAliases)} = ${ze};`)}}}}}}else for(let ce=0;ce<Math.min(j.length,Y.fields.length);ce++){let Te=j[ce],Ie=Y.fields[ce];if(Te.tag==="Atom"&&Ie){let ge=Te.token.value;if(ge!=="_"){let be=Ve(ge);if(Ke(Ie.type))n.emitter.emitLine(`${t} // ${be} is unit type (no value)`);else{let De=Ve(Ie.label),ze=se(Ie.type,n),We=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${ze} ${be} = ${a}${We}data.${R}.${De};`);let pe=n;if((pe!=null&&pe.inAsyncStateMachine||pe!=null&&pe.inEffectStateMachine)&&pe.stateMachineVariables){let fe;if((L=Te.$)!=null&&L.env){let $e=ve(Te.$.env,ge);$e.length>0&&(fe=$e[$e.length-1].id)}fe&&pe.stateMachineVariables.has(fe)&&n.emitter.emitLine(`${t} sm->${$r(fe,"local",pe.stateMachineFieldAliases)} = ${be};`)}}}}}if(S(P)&&b(P,"=>",2)){let Z=P.args[0];n.emitter.emitLine(`${t} ${se(s,n)} ${Ve(Z.token.value)} = ${a};`),P=P.args[1]}let le=Bo(P,t+" ",n);!o&&r&&le&&!zo(le)?n.emitter.emitLine(`${t} ${r} = ${le};`):le&&n.emitter.emitLine(`${t} ${le};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}}return n.insideMatch=p,n.emitter.emitLine(`${t}}`),(x=e.$)!=null&&x.deferredDropExpressions&&wn(e,t,n),o?"":r??""}function GA(e){return S(e)?b(e,"|",2):!1}function Pm(e){if(!GA(e))return[e];let t=e,n=t.args[0],r=t.args[1];return[...Pm(n),...Pm(r)]}function tC(e){if(e!==void 0){if(Mt(e))return String(e.value);if(Ut(e))return e.value?"true":"false"}}function WA(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 v=l[d];if(S(v)&&b(v,"=>",2)){if(!((c=(u=v.args[0])==null?void 0:u.$)!=null&&c.caseExecuted))continue;let y=v.args[0],h=v.args[1];if(!y||!h)continue;if(Q(y)&&y.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let $=Bo(h,t+" ",n);!a&&o&&$&&!zo($)?n.emitter.emitLine(`${t} ${o} = ${$};`):$&&n.emitter.emitLine(`${t} ${$};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`);continue}let g=Pm(y),T=(f=y.$)==null?void 0:f.primitivePatternValues;if(T&&T.length>0)for(let $ of T){let k=tC($);k!==void 0&&n.emitter.emitLine(`${t}case ${k}:`)}else for(let $ of g){let k=(_=$.$)==null?void 0:_.value,C=tC(k);C!==void 0&&n.emitter.emitLine(`${t}case ${C}:`)}n.emitter.emitLine(`${t}{`);let E=Bo(h,t+" ",n);!a&&o&&E&&!zo(E)?n.emitter.emitLine(`${t} ${o} = ${E};`):E&&n.emitter.emitLine(`${t} ${E};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}return n.insideMatch=s,n.emitter.emitLine(`${t}}`),(p=e.$)!=null&&p.deferredDropExpressions&&wn(e,t,n),a?"":o??""}function rC(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(Oe(a)&&s===void 0){let l=J(o,t,n),u=e.$.runtimeDestructurings;for(let c of u){let f=se(c.type,n),_=Ve(c.variableName),p=Ve(c.label);n.emitter.emitLine(`${t}${f} ${_} = ${l}.${p};`)}}}return""}function iC(e,t,n,r,i,o){let a=t.callType?Fn(t.callType):[],s=a.length>0?`, ${a.map(()=>"NULL").join(", ")}`:"",u=`__yo_spawn_wrapper_${xt(o)}`,c="";c+=` ${e}(closure${s});
11430
+ `;let a=J(r,t,n),s=!1;if((v=e.$)!=null&&v.variableName){let P=e.$.variableName,R=n;if((R.inAsyncStateMachine||R.inEffectStateMachine)&&a.startsWith("sm->")){let j=(y=R.stateMachineVariables)==null?void 0:y.get(P);if(!j&&R.stateMachineVariables){for(let[,Y]of R.stateMachineVariables)if(Y.name===P){j=Y;break}}if(j&&j.kind!=="outer"){let Y=`var_${j.id}`;Ke(r.$.type)||n.emitter.emitLine(`${t}sm->${Y} = ${a}; // Save old value for deferred drop`)}else s=!0}else{let j=fn(r.$.type,P,n);ft(r.$.type)?n.emitter.emitLine(`${t}${j} = ${a}; // Save old value for later use`):Ke(r.$.type)||n.emitter.emitLine(`${t}${j} = ${a}; // Save old value for later use`)}}if(ft(r.$.type)){let P=J(i,t,n),R=S(i)&&((h=i.$)==null?void 0:h.closureFunctionValue)&&((g=i.$)==null?void 0:g.type)&&ur(i.$.type),te=n,j=P;if(!R&&((T=i.$)!=null&&T.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){if((E=i.$)!=null&&E.variableName&&(($=i.$)!=null&&$.type)){let le=ot(i.$.variableName,i.$.env);if(le!==P.trim()){let Z=i.$.convertedRuntimeType||i.$.type,ce=se(Z,n);n.emitter.emitLine(`${t}${ce} ${le} = ${P};`)}}sn(i,t,te);let Y=i.$.deferredDupExpressions[0];S(Y)&&((k=Y.$)!=null&&k.variableName)&&(j=ot(Y.$.variableName,Y.$.env))}if(o){let Y=fn(r.$.type,J(r,t,n),n);n.emitter.emitLine(`${t}${Y} = ${j};`)}else n.emitter.emitLine(`${t}${a} = ${j};`)}else{let P=J(i,t,n),R=S(i)&&((C=i.$)==null?void 0:C.closureFunctionValue)&&((w=i.$)==null?void 0:w.type)&&ur(i.$.type),te=n,j=P;if(!R&&((I=i.$)!=null&&I.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){if((L=i.$)!=null&&L.variableName&&((x=i.$)!=null&&x.type)){let le=ot(i.$.variableName,i.$.env);if(le!==P.trim()){let Z=i.$.convertedRuntimeType||i.$.type,ce=se(Z,n);n.emitter.emitLine(`${t}${ce} ${le} = ${P};`)}}sn(i,t,te);let Y=i.$.deferredDupExpressions[0];S(Y)&&((V=Y.$)!=null&&V.variableName)&&(j=ot(Y.$.variableName,Y.$.env))}if(!Ke(r.$.type)){let Y=r.$.type,le=(M=i.$)==null?void 0:M.type,Z,ce=un(i.$.env.modulePath,j.trim());ce&&n.tempVarAsyncStructNames&&(Z=n.tempVarAsyncStructNames.get(j.trim()));let Te=o&&le&&yt(Y)&&yt(le),Se;ce&&Te?Z?Se=`${Z}*`:Se=se(le,n):Te&&Z?Se=`${Z}*`:Se=se(Te?le:Y,n);let ge=(te.inAsyncStateMachine||te.inEffectStateMachine)&&a.startsWith("sm->");n.emitter.emitLine(`${t}${o&&!ge?Se+" ":""}${a} = ${j};`)}}return s?"":((q=e.$)==null?void 0:q.variableName)??""}function Ub(e,t,n){var s,l,u,c,f,_,p,d,v,y,h,g;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||!yt(i))return"// Error: await argument must be a Future type";let o=jn(i);if(!o)return"// Error: could not extract Future module from type";let a=n;if(a.inAsyncStateMachine||a.inEffectStateMachine)return"";if(Or(e)){let T=J(r,t,n),E=se(i,n),$=o.isFuture.outputType;H($)&&($.resolvedConcreteType?$=$.resolvedConcreteType:(l=e.$)!=null&&l.type&&!H(e.$.type)?$=e.$.type:(u=e.$)!=null&&u.type&&H(e.$.type)&&e.$.type.resolvedConcreteType&&($=e.$.type.resolvedConcreteType));let k=a.emitter,C=Ke($)||H($)&&Ke(((c=e.$)==null?void 0:c.type)??$),w=(f=e.$)!=null&&f.variableName?`__sync_future_${e.$.variableName}`:"__sync_future",I=(_=e.$)!=null&&_.variableName?`__pre_await_state_${e.$.variableName}`:"__pre_await_state";k.emitLine(`${t}// Synchronous await (io.await outside state machine)`),k.emitLine(`${t}${E} ${w} = ${T};`),k.emitLine(`${t}int ${I} = ${w}->state;`),yu((p=r.$)==null?void 0:p.type)||(k.emitLine(`${t}if (${I} == 0 && ${w}->__yo_resume_fn) {`),UA(e,w,t,n),k.emitLine(`${t} __yo_incr_rc((void*)${w}); // event loop reference`),k.emitLine(`${t} ${w}->__yo_resume_fn((void*)${w});`),k.emitLine(`${t}}`)),k.emitLine(`${t}{`),k.emitLine(`${t} int __await_state = ${w}->state;`),k.emitLine(`${t} while (__await_state != -1 && __await_state != -2) {`),k.emitLine(`${t} __yo_async_poll_step();`),k.emitLine(`${t} __await_state = ${w}->state;`),k.emitLine(`${t} }`),k.emitLine(`${t} if (__await_state == -2) {`);let x=jn(i),V=((d=x==null?void 0:x.isFuture.effects)==null?void 0:d.some(M=>_e(M.type)||rt(M.type)||M.isEffectRowSpread))??!1;if(V){k.emitLine(`${t} if (${I} == -2) {`),k.emitLine(`${t} fprintf(stderr, "panic: attempted to await an aborted Future\\n");`),k.emitLine(`${t} abort();`),k.emitLine(`${t} }`);let M=a.pendingDeferredDrops;if(M){let R=(v=e.$)==null?void 0:v.variableName;a.pendingDeferredDrops=M.filter(te=>ei(te)!==R)}Dr(t+" ",a,e),a.pendingDeferredDrops=M;let q=PA(x,a),P=(h=(y=a.currentFunctionType)==null?void 0:y.return)==null?void 0:h.type;if(q)if(k.emitLine(`${t} __yo_effect_escaped = 0;`),P&&!Ke(P)){let R=se(P,n);R!=="void"?(k.emitLine(`${t} ${R} _esc_result;`),k.emitLine(`${t} memcpy(&_esc_result, __yo_effect_escape_value, sizeof(${R}));`),k.emitLine(`${t} return _esc_result;`)):k.emitLine(`${t} return;`)}else k.emitLine(`${t} return;`);else if(k.emitLine(`${t} __yo_effect_escaped = 1;`),P&&!Ke(P)){let R=se(P,n);k.emitLine(`${t} return (${R}){0};`)}else k.emitLine(`${t} return;`)}else k.emitLine(`${t} fprintf(stderr, "panic: attempted to await an aborted Future\\n");`),k.emitLine(`${t} abort();`);if(k.emitLine(`${t} }`),k.emitLine(`${t}}`),C)return"";{let M=((g=e.$)==null?void 0:g.variableName)||"__sync_await_result",q=se($,n),P=fn($,M,n);if(V){if(k.emitLine(`${t}${P};`),k.emitLine(`${t}if (${w}->state == -1) {`),mt($)){let R=Ur($,n);R?k.emitLine(`${t} ${M} = ${R}(${w}->result);`):k.emitLine(`${t} ${M} = ${w}->result;`)}else k.emitLine(`${t} ${M} = ${w}->result;`);k.emitLine(`${t}} else {`),k.emitLine(`${t} ${M} = (${q}){0};`),k.emitLine(`${t}}`)}else if(mt($)){let R=Ur($,n);R?k.emitLine(`${t}${P} = ${R}(${w}->result);`):k.emitLine(`${t}${P} = ${w}->result;`)}else k.emitLine(`${t}${P} = ${w}->result;`);return M}}return"// Error: await should only be used inside async blocks"}function zb(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||!yt(i))return"// Error: io.state argument must be a Future type";let a=n.emitter,s=J(r,t,n),l=(f=e.$)!=null&&f.variableName?`__raw_state_${e.$.variableName}`:"__raw_state",u=((_=e.$)==null?void 0:_.variableName)||"__io_state_result";return a.emitLine(`${t}int ${l} = ${s}->state;`),a.emitLine(`${t}int32_t ${u} = (${l} > 0) ? 1 : ${l};`),u}function Bb(e,t,n){var $,k,C,w,I;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=J(o,t,n),s=($=e.$)==null?void 0:$.type;if(!s||!Ye(s))return"// Error: JoinHandle.await return type must be Option(T)";let l=se(s,n),u=s.variants.find(L=>L.name==="Some"),c=(C=(k=u==null?void 0:u.fields)==null?void 0:k[0])==null?void 0:C.type,f=!c||Ke(c),_=f?"uint8_t":c?se(c,n):"uint8_t",p=or(s,"Some",n),d=or(s,"None",n),v=((w=e.$)==null?void 0:w.variableName)||"jh",y=`__jh_future_${v}`,h=`__jh_header_${v}`,g=((I=e.$)==null?void 0:I.variableName)||"__jh_result",T=`__yo_jh_header_${v}`;i.emitLine(`${t}// JoinHandle.await \u2014 poll spawned task, return Option(T)`);let E=fn(s,g,n);if(i.emitLine(`${t}${E};`),i.emitLine(`${t}{`),i.emitLine(`${t} void* ${y} = ${a}.__future;`),i.emitLine(`${t} struct ${T} {`),i.emitLine(`${t} __yo_ref_header_t header;`),i.emitLine(`${t} int state;`),i.emitLine(`${t} ${_} 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}*)${y};`),i.emitLine(`${t} int __jh_state = ${h}->state;`),i.emitLine(`${t} while (__jh_state != -1 && __jh_state != -2) {`),i.emitLine(`${t} __yo_async_poll_step();`),i.emitLine(`${t} __jh_state = ${h}->state;`),i.emitLine(`${t} }`),i.emitLine(`${t} if (__jh_state == -1) {`),f)i.emitLine(`${t} ${g} = (${l}){ .tag = ${p} };`);else if(c&&mt(c)){let L=Ur(c,n);L?i.emitLine(`${t} ${g} = (${l}){ .tag = ${p}, .data = { .Some = { .value = ${L}(${h}->result) } } };`):i.emitLine(`${t} ${g} = (${l}){ .tag = ${p}, .data = { .Some = { .value = ${h}->result } } };`)}else i.emitLine(`${t} ${g} = (${l}){ .tag = ${p}, .data = { .Some = { .value = ${h}->result } } };`);return i.emitLine(`${t} } else {`),i.emitLine(`${t} __yo_effect_escaped = 0;`),i.emitLine(`${t} ${g} = (${l}){ .tag = ${d} };`),i.emitLine(`${t} }`),i.emitLine(`${t}}`),g}function PA(e,t){let n=e.isFuture.effects;if(!(n!=null&&n.length))return!1;let r=qb(n),i=t.currentEvidenceParams;for(let o of r)if(_e(o.type)){let a=`${o.label}.${o.label}`;if(!(i!=null&&i.has(a)))return!0}else if(rt(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 qb(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;H(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),ln(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function UA(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=jn(i.$.type);if(!((f=o==null?void 0:o.isFuture.effects)!=null&&f.length))return;let a=qb(o.isFuture.effects),s=r,l=s.emitter,u=e.args.find(p=>S(p)&&b(p,B.using));if(u){let p=u.args;for(let d=0;d<a.length&&d<p.length;d++){let v=a[d],y=p[d];if(_e(v.type)){let h=J(y,n,r),g=v.label;l.emitLine(`${n} ${t}->__capture.${g} = (void*)${h};`)}else rt(v.type)&&Pb(v.type,t,n,(_=y.$)==null?void 0:_.value,s,e)}}else for(let p of a)if(_e(p.type)){let d=BA(p.label,s,e);d&&l.emitLine(`${n} ${t}->__capture.${p.label} = (void*)${d};`)}else rt(p.type)&&Pb(p.type,t,n,void 0,s,e)}function Pb(e,t,n,r,i,o){let a=i.emitter;for(let s of e.fields){if(!_e(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&&Rt(r)){let u=e.fields.indexOf(s),c=r.fields[u];if(c&&Ie(c)){let f=i.functions[c.funcId];f&&(l=f.cName)}}if(!l&&i.currentEvidenceParams){for(let u of i.currentEvidenceParams.values())if(u.fieldLabel===s.label){l=u.cParamName;break}}l||(l=zA(s.label,e,i,o)),l&&a.emitLine(`${n} ${t}->__capture.${s.label} = (void*)${l};`)}}function zA(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=Pr(i,c=>c.isImplicit===!0);for(let c=o.length-1;c>=0;c--){let f=o[c],_=(l=f.value)==null?void 0:l[f.value.length-1];if(_&&Rt(_)){let p=_.type.fields.findIndex(d=>d.label===e);if(p>=0){let d=_.fields[p];if(d&&Ie(d)){let v=(u=n.functions[d.funcId])==null?void 0:u.cName;if(v)return v}}}}}function BA(e,t,n){if(t.currentEvidenceParams){for(let r of t.currentEvidenceParams.values())if(r.fieldLabel===e)return r.cParamName}if(t.stateMachineVariables){for(let[,r]of t.stateMachineVariables)if(r.name===e&&r.kind==="outer")return`sm->__capture.${e}`}}function Gb(e,t,n){var a,s,l,u,c,f,_,p,d,v,y,h,g,T;let r=(a=e.$)==null?void 0:a.variableName,i=(s=e.$)==null?void 0:s.type,o=n;if(r&&i){!Ke(i)&&!an((l=e.$)==null?void 0:l.controlFlow)&&n.emitter.emitLine(`${t}${se(i,n)} ${r};`),n.emitter.emitLine(`${t}{ // begin block`);let E=o.pendingDeferredDrops,$=((u=e.$)==null?void 0:u.deferredDropExpressions)??[];o.pendingDeferredDrops=[...$,...E??[]];let k=o.consumedVarPendingDrops,C=((c=e.$)==null?void 0:c.consumedVariableDropExpressions)??[];o.consumedVarPendingDrops=[...C,...k??[]];let w=[],I=!Ke(i)&&!an((f=e.$)==null?void 0:f.controlFlow);for(let L=0;L<e.args.length;L++){let x=e.args[L],V=J(x,t+" ",n);w.push(V);let M=L===e.args.length-1;V&&!(M&&I)&&(x.$&&un(x.$.env.modulePath,V)||n.emitter.emitLine(`${t} ${V};`))}if(I){let L=e.args[e.args.length-1],x=w[w.length-1];if((_=L.$)!=null&&_.deferredDupExpressions&&L.$.deferredDupExpressions.length>0){if((p=L.$)!=null&&p.variableName){let M=L.$.variableName;L.$.variableName=void 0;let q=J(L,t+" ",n);L.$.variableName=M;let P=se(L.$.type,n),R=ot(M,L.$.env);R!==q&&n.emitter.emitLine(`${t} ${P} ${R} = ${q};`),x=R}sn(L,t+" ",n);let V=L.$.deferredDupExpressions[0];S(V)&&((d=V.$)!=null&&d.variableName)&&(x=ot(V.$.variableName,V.$.env))}n.emitter.emitLine(`${t} ${r} = ${x};`)}if((v=e.$)!=null&&v.deferredDropExpressions)for(let L of e.$.deferredDropExpressions){if(o.shortCircuitHandledDropVarNames){let V=ei(L);if(V&&o.shortCircuitHandledDropVarNames.has(V)){o.shortCircuitHandledDropVarNames.delete(V);continue}}let x=J(L,t+" ",n);x&&n.emitter.emitLine(`${t} ${x};`)}return n.emitter.emitLine(`${t}} // end begin block`),o.pendingDeferredDrops=E,o.consumedVarPendingDrops=k,Ke(i)||an((y=e.$)==null?void 0:y.controlFlow)?"":r}else{n.emitter.emitLine(`${t}{ // begin block`);let E=o.pendingDeferredDrops,$=((h=e.$)==null?void 0:h.deferredDropExpressions)??[];o.pendingDeferredDrops=[...$,...E??[]];let k=o.consumedVarPendingDrops,C=((g=e.$)==null?void 0:g.consumedVariableDropExpressions)??[];if(o.consumedVarPendingDrops=[...C,...k??[]],e.args.map(I=>J(I,t+" ",n)).forEach(I=>{I&&n.emitter.emitLine(`${t} ${I};`)}),(T=e.$)!=null&&T.deferredDropExpressions)for(let I of e.$.deferredDropExpressions){if(o.shortCircuitHandledDropVarNames){let x=ei(I);if(x&&o.shortCircuitHandledDropVarNames.has(x)){o.shortCircuitHandledDropVarNames.delete(x);continue}}let L=J(I,t+" ",n);L&&n.emitter.emitLine(`${t} ${L};`)}return n.emitter.emitLine(`${t}} // end begin block`),o.pendingDeferredDrops=E,o.consumedVarPendingDrops=k,""}}function Wb(e,t,n){var a;let r=e.args[0];if(S(r)&&b(r,B.comptime,1)||S(r)&&b(r,B.given,1))return"";if(!((a=r.$)!=null&&a.type))return`// Error: No type information for left-hand side ${A(r)}
11431
+ `;let i=r.token.value,o=fn(r.$.type,i,n);return n.emitter.emitLine(`${t}${o};`),""}function jb(e,t,n){var r,i,o,a,s,l,u,c,f,_,p,d,v,y,h,g;if(e.$){let T=e.$.variableName,E=e.$.type,$=E&&Ke(E),k=-1;for(let x=0;x<e.args.length;x++){let V=e.args[x];if(S(V)&&b(V,"=>",2)){let M=V.args[0];if(M&&!(Ut((r=M.$)==null?void 0:r.value)&&M.$.value.value===!1)){k=x;break}}}let C=!1;if(k>=0){let x=e.args[k];if(x&&S(x)&&b(x,"=>",2)){let V=x.args[0];V&&Ut((i=V.$)==null?void 0:i.value)&&V.$.value.value===!0&&(C=!0)}}if(!$&&T&&!C){let x=se(E,n);n.emitter.emitLine(`${t}${x} ${T};`)}if(C&&k>=0){let x=e.args[k];if(x&&S(x)&&b(x,"=>",2)){let V=x.args[1];if(V){let M=J(V,t,n);T&&!$&&(M&&M!==""&&!M.startsWith("goto")&&M!=="continue"&&M!=="break"&&!M.includes("return")?n.emitter.emitLine(`${t}${T} = ${M};`):M&&(M.startsWith("goto")||M==="continue"||M==="break"||M.includes("return"))&&n.emitter.emitLine(`${t}${M};`))}}return $?"":T??""}let w=t,I=0,L=!1;for(let x=0;x<e.args.length;x++){let V=e.args[x];if(S(V)&&b(V,"=>",2)){let M=V.args[0],q=V.args[1];if(M&&q){if(Ut((o=M.$)==null?void 0:o.value)&&M.$.value.value===!1)continue;if(L){if(n.emitter.emitLine(`${w}else {`),I++,w+=" ",!(Ut((s=M.$)==null?void 0:s.value)&&M.$.value.value===!0)){let Y=J(M,w,n);n.emitter.emitLine(`${w}if (${Y}) {`)}}else{if(Ut((a=M.$)==null?void 0:a.value)&&M.$.value.value===!0)n.emitter.emitLine(`${w}{`);else{let j=J(M,w,n);n.emitter.emitLine(`${w}if (${j}) {`)}L=!0}let P=Ut((l=M.$)==null?void 0:l.value)&&M.$.value.value===!0,R=L&&P?w:w+" ";if(S(q)&&b(q,B.begin)){let j=q.args,Y=n,le=Y.pendingDeferredDrops,Z=((u=q.$)==null?void 0:u.deferredDropExpressions)??[];Y.pendingDeferredDrops=[...Z,...le??[]];let ce=Y.consumedVarPendingDrops,Te=((c=q.$)==null?void 0:c.consumedVariableDropExpressions)??[];Y.consumedVarPendingDrops=[...Te,...ce??[]];for(let Se=0;Se<j.length-1;Se++){let ge=j[Se],be=J(ge,R,n);if(be&&ge.$&&!un(ge.$.env.modulePath,be)&&n.emitter.emitLine(`${R}${be};`),an((f=ge.$)==null?void 0:f.controlFlow))break}if(j.length>0){let Se=j[j.length-1];if((_=Se.$)!=null&&_.deferredDupExpressions){if((p=Se.$)!=null&&p.variableName){let be=Se.$.variableName;Se.$.variableName=void 0;let De=J(Se,R,n);Se.$.variableName=be;let ze=se(Se.$.type,n),We=ot(be,Se.$.env);We!==De&&n.emitter.emitLine(`${R}${ze} ${We} = ${De};`)}sn(Se,R,n);let ge=Se.$.deferredDupExpressions[0];if(S(ge)&&((d=ge.$)!=null&&d.variableName)){let be=ot(ge.$.variableName,ge.$.env);T&&!$&&n.emitter.emitLine(`${R}${T} = ${be};`)}else{let be=J(Se,R,n);be&&T&&!$&&n.emitter.emitLine(`${R}${T} = ${be};`)}}else{let ge=J(Se,R,n);ge&&(ge==="continue"||ge==="break"||ge.startsWith("goto")||S(Se)&&b(Se,B.return)||ge.includes("return")?n.emitter.emitLine(`${R}${ge};`):T&&!$&&n.emitter.emitLine(`${R}${T} = ${ge};`))}}(v=q.$)!=null&&v.deferredDropExpressions&&wn(q,R,n),Y.pendingDeferredDrops=le,Y.consumedVarPendingDrops=ce}else if((y=q.$)!=null&&y.deferredDupExpressions&&q.$.deferredDupExpressions.length>0){if((h=q.$)!=null&&h.variableName){let Y=q.$.variableName;q.$.variableName=void 0;let le=J(q,R,n);q.$.variableName=Y;let Z=se(q.$.type,n),ce=ot(Y,q.$.env);ce!==le&&n.emitter.emitLine(`${R}${Z} ${ce} = ${le};`)}sn(q,R,n);let j=q.$.deferredDupExpressions[0];if(S(j)&&((g=j.$)!=null&&g.variableName)){let Y=ot(j.$.variableName,j.$.env);T&&!$&&n.emitter.emitLine(`${R}${T} = ${Y};`)}else{let Y=J(q,R,n);Y&&T&&!$&&n.emitter.emitLine(`${R}${T} = ${Y};`)}}else{let j=J(q,R,n);j==="continue"||j==="break"||j.startsWith("goto")||S(q)&&b(q,B.return)||j.includes("return")?n.emitter.emitLine(`${R}${j};`):j===""||!j||T&&($||n.emitter.emitLine(`${R}${T} = ${j};`))}!(L&&P)&&n.emitter.emitLine(`${w}}`)}}}for(let x=0;x<I;x++)w=w.slice(0,-2),n.emitter.emitLine(`${w}}`);return $?"":T??""}return'/* "cond" expression is not evaluated */'}function Hb(e,t,n){let r=e.args[0];return J(r,t,n)}function Yb(e,t,n){var w,I,L,x,V;let r=e.args[0],i=(w=r.$)==null?void 0:w.type;if(!i||!ht(i))throw new Error("downcast codegen: expected Dyn type as first argument");let o=J(r,t,n),s=(I=e.args[1].$)==null?void 0:I.value;if(!s||!X(s))throw new Error("downcast codegen: expected TypeValue as second argument");let l=s.value,u=se(l,n),c=((L=n.types[l.id])==null?void 0:L.cName)||u,f=`__yo_typeid_${Ve(c)}`;n.typeIdStatics||(n.typeIdStatics=new Map),n.typeIdStatics.has(l.id)||(n.typeIdStatics.set(l.id,f),n.emitter.emitDeclarationLine(`static const char ${f} = 0;`)),n.cIncludes.add("<stdint.h>");let _=`${o}.vtable->__yo_type_id == (uintptr_t)&${f}`,p,d=!1,v="",y="";for(let[,M]of n.dynImpls){if(M.dynType.id!==i.id)continue;if((H(M.concreteType)&&M.concreteType.resolvedConcreteType?M.concreteType.resolvedConcreteType:M.concreteType).id===l.id&&hr(M.dataType)){d=!0,v=((x=n.types[M.dataType.id])==null?void 0:x.cName)||`unknown_box_${M.dataType.id}`,y=Ve(M.dataType.fields[0].label);break}}if(d){let M=`((${v}*)${o}.data)->${y}`,q=Ur(l,n);if(dn(l)){let P=uo(l)?"__yo_incr_rc_atomic":"__yo_incr_rc";p=`((${u})${P}((void*)${M}))`}else if(q)p=`${q}((${u})${M})`;else{let P=!1,R=!1,te=l;for(;Qr(te)&&te.fields.length===1;)te=te.fields[0].type;P=dn(te),R=uo(te),P?p=`((${u})${R?"__yo_incr_rc_atomic":"__yo_incr_rc"}((void*)${M}))`:p=`((${u})${M})`}}else p=`((${u})__yo_incr_rc((void*)${o}.data))`;let h=(V=e.$)==null?void 0:V.type;if(!h||!Ye(h))throw new Error("downcast codegen: expected Option enum as result type");if(fr(h))return`((${_}) ? ${p} : NULL)`;let T=se(h,n),E=or(h,"Some",n),$=or(h,"None",n),k=`(${T}){ .tag = ${E}, .data = { .Some = { .value = ${p} } } }`,C=`(${T}){ .tag = ${$} }`;return`((${_}) ? ${k} : ${C})`}function Kb(e,t,n){var h,g,T,E,$,k,C,w,I;if(!((h=e.$)!=null&&h.dynCallTraitValues)||e.$.dynCallTraitValues.length===0)return"/* Error: dyn() call missing trait values */";let r=((T=(g=e.$)==null?void 0:g.runtimeArgExprsInOrder)==null?void 0:T[0])??e.args[0];if(!r)return"/* Error: dyn() requires a value argument */";let i=e.$.type;if(!ht(i))return"/* Error: dyn() result type is not DynType */";let o=(E=r.$)==null?void 0:E.type;if(!o)return"/* Error: dyn() value has no type */";let a=e.$.dynCallTraitValues;if(!a||a.length===0)return"/* Error: dyn() call missing trait values */";if(!dn(o)&&!hr(o))return"/* Error: dyn() requires an object type (use box() for value types) */";let s=hr(o)?o.fields[0].type:o,l=H(s)&&s.resolvedConcreteType?s.resolvedConcreteType:s,u=(($=n.types[i.id])==null?void 0:$.cName)||`__yo_dyn_${i.id}`,f=`${(()=>{var M,q;let L=(M=n.types[l.id])==null?void 0:M.cName;if(L)return L;let x=Er(l);return(x?(q=n.types[x.id])==null?void 0:q.cName:void 0)||`unknown_${l.id}`})()}_${u}`;n.dynImpls.set(f,{dynType:i,concreteType:s,dataType:o,traitValues:a});let _=J(r,t,n);if((k=r.$)!=null&&k.variableName&&_!==r.$.variableName){let L=fn(r.$.type,r.$.variableName,n);n.emitter.emitLine(`${t}${L} = ${_};`),_=r.$.variableName}if((C=r.$)!=null&&C.deferredDupExpressions&&r.$.deferredDupExpressions.length>0){sn(r,t,n);let L=r.$.deferredDupExpressions[0];S(L)&&((w=L.$)!=null&&w.variableName)&&(_=ot(L.$.variableName,L.$.env))}let p=(I=e.$)==null?void 0:I.variableName;if(!p)return"/* Error: dyn() expression missing temp variable name */";let d=n,v;if(d.inAsyncStateMachine&&d.stateMachineVariables){for(let[,L]of d.stateMachineVariables)if(L.kind==="local"&&L.id===p){v=`sm->${$r(L.id,"local",d.stateMachineFieldAliases)}`;break}}let y=`__yo_vtable_${f}`;return v?(n.emitter.emitLine(`${t}${v} = (${u}){`),n.emitter.emitLine(`${t} .data = ${_},`),n.emitter.emitLine(`${t} .vtable = &${y}`),n.emitter.emitLine(`${t}};`),v):(n.emitter.emitLine(`${t}${u} ${p} = {`),n.emitter.emitLine(`${t} .data = ${_},`),n.emitter.emitLine(`${t} .vtable = &${y}`),n.emitter.emitLine(`${t}};`),p)}function Xb(e,t,n){return e.args.length!==0?"// Error: __yo_gc_collect requires exactly 0 arguments":"__yo_gc_collect()"}function Qb(e,t,n){var a,s,l,u,c,f,_,p,d,v,y,h,g,T,E,$,k,C,w;let r=e.args[0],i=e.args[1],o=n;if(S(r)&&b(r,B.comptime,1)||S(r)&&b(r,B.given,1))return"";if((o.inAsyncStateMachine||o.inEffectStateMachine)&&Q(r)&&Q(i)){let I=r.token.value,L=i.token.value,x=o.stateMachineVariables&&Array.from(o.stateMachineVariables.values()).some(M=>M.name===I),V=o.stateMachineVariables&&Array.from(o.stateMachineVariables.values()).some(M=>M.name===L);if(I===L&&(x||V))return""}if((a=e.$)!=null&&a.runtimeDestructurings){let I=e.$.runtimeDestructurings,L=J(i,t,n),x=(s=i.$)==null?void 0:s.type;return I.forEach(({label:V,type:M,variableName:q})=>{if(q==="_")return;let P=Ve(q,M.isExtern==="c"),R=fn(M,P,n);if(x&&Oe(x)&&x.isNewtype&&x.fields.length===1){let Y=x.fields[0];if(Y&&Y.label===V){n.emitter.emitLine(`${t}${R} = ${L}; // Destructuring ${V} (newtype)`);return}}let te=V.match(/^\d+$/)?`_${V}`:Ve(V,M.isExtern==="c");if(x&&Tt(x)&&!V.match(/^\d+$/)){let Y=x.fields.findIndex(le=>le.label===V);te=Y>=0?`_${Y}`:te}let j=x&&dn(x)?"->":".";n.emitter.emitLine(`${t}${R} = ${L}${j}${te}; // Destructuring ${V}`)}),""}if(Q(r)){let I=((l=r.$)==null?void 0:l.variableName)??r.token.value;if(!((u=r.$)!=null&&u.type))return`// Error: No type information for variable ${I}
11432
+ `;if((c=r.$)!=null&&c.env){let V=ve(r.$.env,I);if(V.length>0&&V[V.length-1].isCompileTimeOnly||V.length>0&&V[V.length-1].isModuleLevel)return""}let L=!1,x;if((o.inAsyncStateMachine||o.inEffectStateMachine)&&o.stateMachineVariables&&((f=r.$)!=null&&f.env)){let V=ve(r.$.env,I);if(V.length>0){let M=V[V.length-1],q=M.isOwningTheSameRcValueAs?M.isOwningTheSameRcValueAs.id:M.id;o.stateMachineVariables.has(q)&&(L=!0,x=q)}}if(ft(r.$.type))if(S(i)&&b(i,B.array)){let V=J(i,t,n);if(L&&x){let M=$r(x,"local",o.stateMachineFieldAliases);n.emitter.emitLine(`${t}sm->${M} = ${V};`)}else if(!Ke(r.$.type)){let M=fn(r.$.type,I,n);n.emitter.emitLine(`${t}${M} = ${V};`)}}else{let V;if((_=i.$)!=null&&_.variableName){let M=ot(i.$.variableName,i.$.env),q=J(i,t,n);if(!L){let P=fn(i.$.type,M,n);M!==q&&n.emitter.emitLine(`${t}${P} = ${q};`)}V=M}else V=J(i,t,n);if(L&&x){let M=$r(x,"local",o.stateMachineFieldAliases);n.emitter.emitLine(`${t}sm->${M} = ${V};`)}else if(!Ke(r.$.type)){let M=fn(r.$.type,I,n);n.emitter.emitLine(`${t}${M} = ${V};`)}}else{let V,M=S(i)&&((p=i.$)==null?void 0:p.closureFunctionValue)&&((d=i.$)==null?void 0:d.type)&&ur(i.$.type),q=S(i)&&Qn(i);if((v=i.$)!=null&&v.variableName){let P=ot(i.$.variableName,i.$.env),R=ot(I,r.$.env);if(P===R){if(V=J(i,t,n),!M&&!q&&((y=i.$)!=null&&y.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){sn(i,t,o);let te=i.$.deferredDupExpressions[0];S(te)&&((h=te.$)!=null&&h.variableName)&&(V=ot(te.$.variableName,te.$.env))}}else if(Q(i)&&P===ot(i.token.value,i.$.env)){if(V=J(i,t,n),!M&&!q&&((g=i.$)!=null&&g.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){sn(i,t,o);let te=i.$.deferredDupExpressions[0];S(te)&&((T=te.$)!=null&&T.variableName)&&(V=ot(te.$.variableName,te.$.env))}}else if(Q(i)&&o.currentClosureCaptures&&o.currentClosureCaptures.includes(i.token.value)&&((E=i.$)!=null&&E.env)&&o.currentClosureCaptureFrameLevel!==void 0&&Co(i.token.value,i.$.env,o.currentClosureCaptureFrameLevel)){let te=o.currentClosureType;if(te&&te.isClosure){let j=Object.values(o.types).find(Y=>Y.type===te);j?V=`((${`${j.cName}_capture`}*)closure_context->data)->${ot(i.token.value,i.$.env)}`:V=`closure_context->${ot(i.token.value,i.$.env)}`}else V=`closure_context->${ot(i.token.value,i.$.env)}`}else{let te=J(i,t,n);if(te.trim()!==P){let j=i.$.convertedRuntimeType||i.$.type,Y=fn(j,P,n);n.emitter.emitLine(`${t}${Y} = ${te};`)}if(!M&&!q&&(($=i.$)!=null&&$.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){sn(i,t,o);let j=i.$.deferredDupExpressions[0];S(j)&&((k=j.$)!=null&&k.variableName)?V=ot(j.$.variableName,j.$.env):V=P}else V=P}}else if(V=J(i,t,n),!M&&!q&&((C=i.$)!=null&&C.deferredDupExpressions)&&i.$.deferredDupExpressions.length>0){sn(i,t,o);let P=i.$.deferredDupExpressions[0];S(P)&&((w=P.$)!=null&&w.variableName)&&(V=ot(P.$.variableName,P.$.env))}if(Vt(r.$.type)){let P=r.$.type;if(L&&x){let R=$r(x,"local",o.stateMachineFieldAliases);n.emitter.emitLine(`${t}sm->${R} = ${V};`)}else if(!Ke(P)){let R=fn(P,I,n);n.emitter.emitLine(`${t}${R} = ${V};`)}}else if(L&&x){let P=$r(x,"local",o.stateMachineFieldAliases);n.emitter.emitLine(`${t}sm->${P} = ${V};`)}else{let P=un(i.$.env.modulePath,V.trim()),R;if(P&&n.tempVarAsyncStructNames){let te=n.tempVarAsyncStructNames.get(V.trim());te?R=`${te}*`:R=se(r.$.type,n)}else R=se(r.$.type,n);Ke(r.$.type)||n.emitter.emitLine(`${t}${R} ${ot(I,r.$.env)} = ${V};`)}}return""}}var qA=0;function vu(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 Jn(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 v=se(n.$.type,r),y=(s=(a=n.args[0])==null?void 0:a.$)==null?void 0:s.type;return y&&Ye(y)&&!ui(y)?`((${v})((${t[0]}).tag))`:`((${v})(${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`(${se(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 v=se(n.$.type,r),y=`__yo_uninit_${qA++}`;return r.emitter.emitLine(`${i}${v} ${y};`),y}else return F.__yo_maybe_uninit_as_ptr.includes(e)&&((c=n.$)!=null&&c.type)?`((${se(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)&&((f=n.$)!=null&&f.type)&&et(n.$.type)?`(&(${se(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)&&((_=n.$)!=null&&_.type)&&et(n.$.type)?`(&(${se(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)&&et(n.$.type)?`(&(${se(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)&&et(n.$.type)?`(&(${se(n.$.type.childType,r)}){ .data = &((${t[0]})->data[(${t[1]}).start]), .length = (${t[1]}).end - (${t[1]}).start + 1 })`:`/* Unhandled operator ${e} */`}}function Jb(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=J(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=se(o,n),s=(f=e.$)==null?void 0:f.type;if(s&&((_=n.isoTypes)!=null&&_.has(a))){let d=n.isoTypes.get(a);d.optionTypeCName||(d.optionTypeCName=se(s,n))}let l=`__yo_iso_extract_${a}(${i})`,u=(p=e.$)==null?void 0:p.variableName;return u&&s?(n.emitter.emitLine(`${t}${se(s,n)} ${u} = ${l};`),u):l}function Zb(e,t,n){var s;let r=e.args[0];if(!r)return"// Error: __yo_iso_dispose requires exactly 1 argument";let i=J(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_${se(o,n)}(${i})`}function Om(e){var n;let t=(n=e.func.$)==null?void 0:n.value;return X(t)&&Vn(t.value)&&e.args.length===1}function eC(e,t,n){var c;if(!Om(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=J(a,t,n),l=se(i,n),u=se(o,n);return n.isoTypes||(n.isoTypes=new Map),n.isoTypes.has(l)||n.isoTypes.set(l,{childTypeCName:u,isoType:i}),`__yo_create_iso_${l}(${s})`}function zo(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)&&b(e,B.begin)){let f=e.args,_=n,p=_.pendingDeferredDrops,d=((r=e.$)==null?void 0:r.deferredDropExpressions)??[];_.pendingDeferredDrops=[...d,...p??[]];let v=_.consumedVarPendingDrops,y=((i=e.$)==null?void 0:i.consumedVariableDropExpressions)??[];_.consumedVarPendingDrops=[...y,...v??[]];for(let g=0;g<f.length-1;g++){let T=f[g],E=J(T,t,n);if(E&&n.emitter.emitLine(`${t}${E};`),an((o=T.$)==null?void 0:o.controlFlow))break}let h="";if(f.length>0){let g=f[f.length-1];if((a=g.$)!=null&&a.deferredDupExpressions&&g.$.deferredDupExpressions.length>0){if((s=g.$)!=null&&s.variableName){let E=g.$.variableName;g.$.variableName=void 0;let $=J(g,t,n);g.$.variableName=E;let k=se(g.$.type,n),C=ot(E,g.$.env);C!==$&&n.emitter.emitLine(`${t}${k} ${C} = ${$};`)}sn(g,t,n);let T=g.$.deferredDupExpressions[0];S(T)&&((l=T.$)!=null&&l.variableName)?h=ot(T.$.variableName,T.$.env):h=J(g,t,n)}else h=J(g,t,n)}return(u=e.$)!=null&&u.deferredDropExpressions&&wn(e,t,n),_.pendingDeferredDrops=p,_.consumedVarPendingDrops=v,h}else return(c=e.$)!=null&&c.deferredDupExpressions&&sn(e,t,n),J(e,t,n)}function nC(e,t,n){var v,y,h,g,T,E,$,k,C,w,I,L,x;if(!e.$)return'/* "match" expression is not evaluated */';let r=e.$.variableName,i=e.$.type,o=i&&Ke(i);if(!o&&r){let V=se(i,n);n.emitter.emitLine(`${t}${V} ${r};`)}let a=J(e.args[0],t,n),s=(v=e.args[0].$)==null?void 0:v.type;if(!s)return'// Error: "match" expression requires a valid type';if(e.$.isPrimitiveMatch)return WA(e,t,n,a,s,r,o);let l,u;if(et(s)?(u=s.childType,l=s.tag):dn(s)?(u=s,l="ref_semantics"):u=s,!Ye(u))return'// Error: "match" expression requires an enum type';if(!((y=n.types[u.id])==null?void 0:y.cName))return`// Error: "match" expression enum type ${u.typeName} has no C name`;let f=fr(u);if(f){let V=e.args.slice(1),M=null,q=null;for(let P of V)if(S(P)&&b(P,"=>",2)){if(!((g=(h=P.args[0])==null?void 0:h.$)!=null&&g.caseExecuted))continue;let R=P.args[0],te=P.args[1];if(R&&te&&S(R)&&b(R,"."))M={caseBody:te};else{let j=R.func;if(j&&S(j)&&b(j,".")){let Y=j.args[0];if(Y&&Q(Y)){let le=Y.token.value;q={caseBody:te,variantName:le,casePattern:R}}}}}if(n.emitter.emitLine(`${t}if (${l&&l!=="ref_semantics"?"*":""}${a} != NULL) {`),q){let P;if(S(q.casePattern)&&q.casePattern.args.length>0){let Y=q.casePattern.args[0];if(Y&&Q(Y)){P=Ve(Y.token.value);let le=f;n.emitter.emitLine(`${t} ${se(le,n)} ${P} = ${a};`)}}let R=n;P&&(R.inAsyncStateMachine||R.inEffectStateMachine)&&(R.localShadowedVariables||(R.localShadowedVariables=new Set),R.localShadowedVariables.add(P));let te=Bo(q.caseBody,t+" ",n);P&&R.localShadowedVariables&&R.localShadowedVariables.delete(P);let j=zo(te);if(!o&&r&&!j){let Y=te||a;n.emitter.emitLine(`${t} ${r} = ${Y};`)}else te&&te!==""&&n.emitter.emitLine(`${t} ${te};`)}if(n.emitter.emitLine(`${t}} else {`),M){let P=Bo(M.caseBody,t+" ",n),R=zo(P);!o&&r&&!R?n.emitter.emitLine(`${t} ${r} = ${P};`):P&&P!==""&&n.emitter.emitLine(`${t} ${P};`)}return n.emitter.emitLine(`${t}}`),o?"":r??""}if(ui(u)){n.emitter.emitLine(`${t}switch (${l&&l!=="ref_semantics"?"*":""}${a}) {`);let V=n.insideMatch;n.insideMatch=!0;let M=e.args.slice(1);for(let q=0;q<M.length;q++){let P=M[q];if(S(P)&&b(P,"=>",2)){if(!((E=(T=P.args[0])==null?void 0:T.$)!=null&&E.caseExecuted))continue;let R=P.args[0],te=P.args[1];if(R&&te&&Q(R)&&R.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let j=Bo(te,t+" ",n);!o&&r&&j&&!zo(j)?n.emitter.emitLine(`${t} ${r} = ${j};`):j&&n.emitter.emitLine(`${t} ${j};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(R&&te&&S(R)&&b(R,".",1)){let j=R.args[0].token.value,Y=or(u,j,n);n.emitter.emitLine(`${t}case ${Y}: {`);let le=Bo(te,t+" ",n);!o&&r&&le&&!zo(le)?n.emitter.emitLine(`${t} ${r} = ${le};`):le&&n.emitter.emitLine(`${t} ${le};`),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 M=d[V];if(S(M)&&b(M,"=>",2)){if(!((k=($=M.args[0])==null?void 0:$.$)!=null&&k.caseExecuted))continue;let q=M.args[0],P=M.args[1];if(q&&P&&Q(q)&&q.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let R=Bo(P,t+" ",n);!o&&r&&R&&!zo(R)?n.emitter.emitLine(`${t} ${r} = ${R};`):R&&n.emitter.emitLine(`${t} ${R};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(q&&P&&S(q)&&q.func.tag==="Atom"&&q.func.token.value==="."&&q.args.length>=1){let R=q.args[0].token.value,te=or(u,R,n);if(n.emitter.emitLine(`${t}case ${te}: {`),q.args.length>1){let Y=u.variants.find(le=>le.name===R);if(Y&&Y.fields){let le=q.args.slice(1);if(le.some(ce=>S(ce)&&b(ce,":",2))){for(let ce of le)if(S(ce)&&b(ce,":",2)){let Te=ce.args[0],Se=ce.args[1];if(!Q(Te))continue;let ge=Te.token.value,be=Y.fields.find(De=>De.label===ge);if(!be||Ke(be.type))continue;if(Q(Se)){let De=Se.token.value;if(De!=="_"){let ze=Ve(De),We=Ve(ge),pe=se(be.type,n),fe=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${pe} ${ze} = ${a}${fe}data.${R}.${We};`);let $e=n;if(($e!=null&&$e.inAsyncStateMachine||$e!=null&&$e.inEffectStateMachine)&&$e.stateMachineVariables){let Le;if((C=Se.$)!=null&&C.env){let Me=ve(Se.$.env,De);Me.length>0&&(Le=Me[Me.length-1].id)}if(Le&&$e.stateMachineVariables.has(Le)){let Me=$r(Le,"local",$e.stateMachineFieldAliases);n.emitter.emitLine(`${t} sm->${Me} = ${ze};`)}}}}}}else for(let ce=0;ce<le.length&&ce<Y.fields.length;ce++){let Te=le[ce],Se=Y.fields[ce];if(Q(Te)&&Se){if(Ke(Se.type))continue;let ge=Te.token.value;if(ge!=="_"){let be=Ve(ge),De=Ve(Se.label),ze=se(Se.type,n),We=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${ze} ${be} = ${a}${We}data.${R}.${De};`);let pe=n;if((pe!=null&&pe.inAsyncStateMachine||pe!=null&&pe.inEffectStateMachine)&&pe.stateMachineVariables){let fe;if((w=Te.$)!=null&&w.env){let $e=ve(Te.$.env,ge);$e.length>0&&(fe=$e[$e.length-1].id)}fe&&pe.stateMachineVariables.has(fe)&&n.emitter.emitLine(`${t} sm->${$r(fe,"local",pe.stateMachineFieldAliases)} = ${be};`)}}}}}}if(S(P)&&b(P,"=>",2)){let Y=P.args[0];n.emitter.emitLine(`${t} ${se(s,n)} ${Ve(Y.token.value)} = ${a};`),P=P.args[1]}let j=Bo(P,t+" ",n);!o&&r&&j&&!zo(j)?n.emitter.emitLine(`${t} ${r} = ${j};`):j&&n.emitter.emitLine(`${t} ${j};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}else if(q&&P&&S(q)&&S(q.func)&&q.func.func.tag==="Atom"&&q.func.func.token.value==="."&&q.func.args.length===1){let R=q.func.args[0].token.value,te=or(u,R,n),j=q.args;n.emitter.emitLine(`${t}case ${te}: {`);let Y=u.variants.find(Z=>Z.name===R);if(Y&&Y.fields&&j.length>0)if(j.some(ce=>S(ce)&&b(ce,":",2))){for(let ce of j)if(S(ce)&&b(ce,":",2)){let Te=ce.args[0],Se=ce.args[1];if(!Q(Te))continue;let ge=Te.token.value,be=Y.fields.find(De=>De.label===ge);if(!be)continue;if(Q(Se)){let De=Se.token.value;if(De!=="_"){let ze=Ve(De);if(Ke(be.type))n.emitter.emitLine(`${t} // ${ze} is unit type (no value)`);else{let We=Ve(ge),pe=se(be.type,n),fe=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${pe} ${ze} = ${a}${fe}data.${R}.${We};`);let $e=n;if(($e!=null&&$e.inAsyncStateMachine||$e!=null&&$e.inEffectStateMachine)&&$e.stateMachineVariables){let Le;if((I=Se.$)!=null&&I.env){let Me=ve(Se.$.env,ze);Me.length>0&&(Le=Me[Me.length-1].id)}Le&&$e.stateMachineVariables.has(Le)&&n.emitter.emitLine(`${t} sm->${$r(Le,"local",$e.stateMachineFieldAliases)} = ${ze};`)}}}}}}else for(let ce=0;ce<Math.min(j.length,Y.fields.length);ce++){let Te=j[ce],Se=Y.fields[ce];if(Te.tag==="Atom"&&Se){let ge=Te.token.value;if(ge!=="_"){let be=Ve(ge);if(Ke(Se.type))n.emitter.emitLine(`${t} // ${be} is unit type (no value)`);else{let De=Ve(Se.label),ze=se(Se.type,n),We=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${ze} ${be} = ${a}${We}data.${R}.${De};`);let pe=n;if((pe!=null&&pe.inAsyncStateMachine||pe!=null&&pe.inEffectStateMachine)&&pe.stateMachineVariables){let fe;if((L=Te.$)!=null&&L.env){let $e=ve(Te.$.env,ge);$e.length>0&&(fe=$e[$e.length-1].id)}fe&&pe.stateMachineVariables.has(fe)&&n.emitter.emitLine(`${t} sm->${$r(fe,"local",pe.stateMachineFieldAliases)} = ${be};`)}}}}}if(S(P)&&b(P,"=>",2)){let Z=P.args[0];n.emitter.emitLine(`${t} ${se(s,n)} ${Ve(Z.token.value)} = ${a};`),P=P.args[1]}let le=Bo(P,t+" ",n);!o&&r&&le&&!zo(le)?n.emitter.emitLine(`${t} ${r} = ${le};`):le&&n.emitter.emitLine(`${t} ${le};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}}return n.insideMatch=p,n.emitter.emitLine(`${t}}`),(x=e.$)!=null&&x.deferredDropExpressions&&wn(e,t,n),o?"":r??""}function GA(e){return S(e)?b(e,"|",2):!1}function Pm(e){if(!GA(e))return[e];let t=e,n=t.args[0],r=t.args[1];return[...Pm(n),...Pm(r)]}function tC(e){if(e!==void 0){if(Mt(e))return String(e.value);if(Ut(e))return e.value?"true":"false"}}function WA(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 v=l[d];if(S(v)&&b(v,"=>",2)){if(!((c=(u=v.args[0])==null?void 0:u.$)!=null&&c.caseExecuted))continue;let y=v.args[0],h=v.args[1];if(!y||!h)continue;if(Q(y)&&y.token.value==="_"){n.emitter.emitLine(`${t}default: {`);let $=Bo(h,t+" ",n);!a&&o&&$&&!zo($)?n.emitter.emitLine(`${t} ${o} = ${$};`):$&&n.emitter.emitLine(`${t} ${$};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`);continue}let g=Pm(y),T=(f=y.$)==null?void 0:f.primitivePatternValues;if(T&&T.length>0)for(let $ of T){let k=tC($);k!==void 0&&n.emitter.emitLine(`${t}case ${k}:`)}else for(let $ of g){let k=(_=$.$)==null?void 0:_.value,C=tC(k);C!==void 0&&n.emitter.emitLine(`${t}case ${C}:`)}n.emitter.emitLine(`${t}{`);let E=Bo(h,t+" ",n);!a&&o&&E&&!zo(E)?n.emitter.emitLine(`${t} ${o} = ${E};`):E&&n.emitter.emitLine(`${t} ${E};`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t}}`)}}return n.insideMatch=s,n.emitter.emitLine(`${t}}`),(p=e.$)!=null&&p.deferredDropExpressions&&wn(e,t,n),a?"":o??""}function rC(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(Oe(a)&&s===void 0){let l=J(o,t,n),u=e.$.runtimeDestructurings;for(let c of u){let f=se(c.type,n),_=Ve(c.variableName),p=Ve(c.label);n.emitter.emitLine(`${t}${f} ${_} = ${l}.${p};`)}}}return""}function iC(e,t,n,r,i,o){let a=t.callType?Fn(t.callType):[],s=a.length>0?`, ${a.map(()=>"NULL").join(", ")}`:"",u=`__yo_spawn_wrapper_${xt(o)}`,c="";c+=` ${e}(closure${s});
11433
11433
  `;let f=r&&Oe(r)?zi(r,i):void 0;if(f&&r&&Oe(r)){let _=t.consumedCaptures;if(_&&_.length>0){let p=r;for(let d of _){let v=p.fields.find(y=>y.label===d);v&&mt(v.type)&&(c+=` ((${n}*)closure)->${d} = NULL;
11434
11434
  `)}}c+=` ${f}(*(${n}*)closure);
11435
11435
  `}return c+=` __yo_free(closure);
11436
11436
  `,i.emitter.emitDeclarationLine(`
11437
11437
  // Spawn wrapper: handles RC cleanup for thread-spawned closures
11438
11438
  static void ${u}(void* closure) {
11439
- ${c}}`),u}function oC(e,t,n){var h,g,T,E,$,k;let r=(h=e.$)==null?void 0:h.runtimeArgExprsInOrder;if(!r||r.length!==1)return"/* Error: __yo_thread_spawn requires exactly 1 argument */";let i=r[0],o=(g=i.$)==null?void 0:g.type;if(!o)return"/* Error: __yo_thread_spawn argument has no type */";let a,s;if(H(o)){let C=o;C.resolvedConcreteType&&(a=C.resolvedConcreteType.id,s=C.resolvedConcreteType)}else Oe(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=se(s,n),f=iC(u,l,c,s,n,((T=e.$)==null?void 0:T.env.modulePath)??""),_=J(i,t,n),p=(E=i.$)!=null&&E.variableName?ot(i.$.variableName,i.$.env):_,d=`_thread_closure_data_${xt((($=e.$)==null?void 0:$.env.modulePath)??"")}`;n.emitter.emitLine(`${t}${c}* ${d} = (${c}*)__yo_malloc(sizeof(${c}));`),n.emitter.emitLine(`${t}*${d} = ${p};`);let v=Ur(s,n);v&&n.emitter.emitLine(`${t}${v}(*${d});`);let y=(k=e.$)==null?void 0:k.variableName;return y?(n.emitter.emitLine(`${t}__yo_thread_t ${y} = __yo_thread_spawn(${f}, ${d});`),y):`__yo_thread_spawn(${f}, ${d})`}function aC(e,t,n){var y,h,g,T,E;let r=(y=e.$)==null?void 0:y.runtimeArgExprsInOrder;if(!r||r.length!==1)return"/* Error: __yo_worker_spawn requires exactly 1 argument */";let i=r[0],o=(h=i.$)==null?void 0:h.type;if(!o)return"/* Error: __yo_worker_spawn argument has no type */";let a,s;if(H(o)){let $=o;$.resolvedConcreteType&&(a=$.resolvedConcreteType.id,s=$.resolvedConcreteType)}else Oe(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=se(s,n),f=iC(u,l,c,s,n,((g=e.$)==null?void 0:g.env.modulePath)??""),_=J(i,t,n),p=(T=i.$)!=null&&T.variableName?ot(i.$.variableName,i.$.env):_,d=`_worker_closure_data_${xt(((E=e.$)==null?void 0:E.env.modulePath)??"")}`;n.emitter.emitLine(`${t}${c}* ${d} = (${c}*)__yo_malloc(sizeof(${c}));`),n.emitter.emitLine(`${t}*${d} = ${p};`);let v=Ur(s,n);return v&&n.emitter.emitLine(`${t}${v}(*${d});`),n.emitter.emitLine(`${t}__yo_worker_spawn(${f}, ${d});`),""}function sC(e,t,n){let r=e.args[0];return r?`__yo_thread_set_maximum_threads(${J(r,t,n)})`:"// Error: __yo_thread_set_maximum_threads requires exactly 1 argument"}function lC(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 ti(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&&yt(i.type))return;let o=`var_${i.id}`,a=Ve(e);n.emitter.emitLine(`${t}sm->${o} = ${a};`)}}function fC(e,t,n){var o,a,s,l,u,c,f,_,p,d,v,y,h,g,T,E,$,k,C,w,I,L,x,V,M,q,P,R,te,j,Y,le,Z,ce,Te,Ie,ge,be,De,ze,We,pe,fe,$e,Le,Me,Ze,$t,It,jt,st,Ct,rn,Bt,gt,ut,Nt,Yt,wt,Ft,ee,W,oe,me,de,ye,he,Be,qe,Pe,ie;if(((o=e.$)==null?void 0:o.value)!==void 0&&!Ge(e.$.value))return(a=e.$)!=null&&a.deferredDropExpressions&&wn(e,t,n),Ke(e.$.type)?"":yr(e.$.value,n,e);let r=(s=e.func.$)==null?void 0:s.value,i=((l=e.func.$)==null?void 0:l.type)??(Se(r)?r.specializedType??r.type:void 0);if(_e(i)){let ae=(u=e.$)==null?void 0:u.runtimeArgExprsInOrder;if(ae){let we=!1;if(S(e.func)&&b(e.func,".",2)){let Ae=e.func.args[0],He=(c=Ae==null?void 0:Ae.$)==null?void 0:c.type;He&&ht(He)&&(we=!0)}let Ne=ae.map((Ae,He)=>{var Qe,Je,lt,re,N,K,G,z,D;if((Qe=Ae.$)!=null&&Qe.variableName&&((Je=Ae.$)!=null&&Je.type)){let ue=n,Fe=ue.currentClosureCaptures&&ue.currentClosureCaptures.includes(Ae.$.variableName)&&Q(Ae)&&Ae.$.env&&ue.currentClosureCaptureFrameLevel!==void 0&&Co(Ae.token.value,Ae.$.env,ue.currentClosureCaptureFrameLevel),nt=J(Ae,t,n),St=!1;if(Q(Ae)&&Ae.$.env&&Ae.$.variableName){let xn=ve(Ae.$.env,Ae.$.variableName);xn.length>0&&xn[xn.length-1].isCompileTimeOnly&&(St=!0)}let At=(ue.inAsyncStateMachine||ue.inEffectStateMachine)&&nt.startsWith("sm->"),$n=!1;if(nt&&nt!==Ae.$.variableName&&!Fe&&!At&&!St){let xn=ot(Ae.$.variableName,Ae.$.env);if(nt!==xn){let Pt=Ae.$.convertedRuntimeType||Ae.$.type,jr=fn(Pt,Ae.$.variableName,n);n.emitter.emitLine(`${t}${jr} = ${nt};`),$n=!0,ti(Ae.$.variableName,t,n)}}let sr=$n?Ae.$.variableName:nt;if((lt=Ae.$)!=null&&lt.deferredDupExpressions&&Ae.$.deferredDupExpressions.length>0){let xn=new Set;(re=Ae.$)!=null&&re.variableName&&xn.add(ot(Ae.$.variableName,Ae.$.env)),nt&&xn.add(nt),Q(Ae)&&xn.add(ot(Ae.token.value,Ae.$.env));let Pt=Ae.$.deferredDupExpressions.find(jr=>{var oo;let Ti=l_(jr);return Ti?xn.has(ot(Ti,(oo=jr.$)==null?void 0:oo.env)):!1});Pt&&(sn(Ae,t,ue),S(Pt)&&((N=Pt.$)!=null&&N.variableName)&&(sr=ot(Pt.$.variableName,Pt.$.env)))}if(we&&He===0){if(S(e.func)&&b(e.func,".",2)){let Pt=e.func.args[0],jr=(K=Pt==null?void 0:Pt.$)==null?void 0:K.type,Ti=e.func.args[1];if(Q(Ti)&&ht(jr)){let oo=Ti.token.value;if(jr.trait.fields.find(G_=>G_.label===oo))return At?nt:Ve(sr,Ae.$.type.isExtern==="c")}}let xn=(G=Ae.$)==null?void 0:G.type;return xn&&et(xn)?At?`${nt}->data`:`${Ve(sr,Ae.$.type.isExtern==="c")}->data`:At?`(${nt}).data`:`(${Ve(sr,Ae.$.type.isExtern==="c")}).data`}else return Fe||At||St?nt:Ve(sr,Ae.$.type.isExtern==="c")}else if(we&&He===0){let ue=J(Ae,t,n);if(S(e.func)&&b(e.func,".",2)){let nt=e.func.args[0],St=(z=nt==null?void 0:nt.$)==null?void 0:z.type,At=e.func.args[1];if(Q(At)&&ht(St)){let $n=At.token.value;if(St.trait.fields.find(xn=>xn.label===$n))return ue}}let Fe=(D=Ae.$)==null?void 0:D.type;return Fe&&et(Fe)?`(${ue})->data`:`(${ue}).data`}else return J(Ae,t,n)}),tt=Ne.join(", ");if(i.isExtern==="yo"&&i.externName){let Ae=i.externName;return Za.includes(Ae)?vu(Ae,Ne,e,n,t):Ae==="__yo_thread_spawn"?oC(e,t,n):Ae==="__yo_worker_spawn"?aC(e,t,n):Ke(i.return.type)?(n.emitter.emitLine(`${t}${Ae}(${tt});`),(f=e.$)!=null&&f.deferredDropExpressions&&wn(e,t,n),""):`${Ae}(${tt})`}{let Ae=n;if((_=Ae.currentEvidenceParams)!=null&&_.size){let He=(p=e.func.token)==null?void 0:p.value,Qe;if(He==="."&&S(e.func)&&b(e.func,".",2)){let Je=e.func.args[1];Je&&Q(Je)&&(He=Je.token.value);let lt=e.func.args[0];if(lt&&Q(lt))Qe=lt.token.value;else if(lt&&S(lt)&&b(lt,".",2)){let re=lt.args[0];re&&Q(re)&&(Qe=re.token.value)}}if(He&&He!=="."){for(let Je of Ae.currentEvidenceParams.values())if(Je.fieldLabel===He||Je.implicitLabel===He||Je.fieldPath[Je.fieldPath.length-1]===He){if(Qe&&Qe!==Je.implicitLabel)continue;return cC(Je.cParamName,i,Ne,ae,e,t,Ae,Je)}}}}if(Se(r)){let Ae=$o(r);if(Ae)return vu(Ae,Ne,e,n,t);let He=r.specializedType??r.type,Qe=n;if(Qe.currentEvidenceParams&&r.isModuleEffectMember){let lt,re=((d=e.func.$)==null?void 0:d.env)??((v=e.$)==null?void 0:v.env);if(re)for(let N of Qe.currentEvidenceParams.values()){let K=ve(re,N.implicitLabel),G=K[K.length-1],z=(y=G==null?void 0:G.value)==null?void 0:y[0];if(z&&Rt(z)){let D=z,ue=!0;for(let Fe=0;Fe<N.fieldPath.length-1;Fe++){let nt=N.fieldPath[Fe],St=D.type.fields.findIndex(At=>At.label===nt);if(St>=0&&D.fields[St]&&Rt(D.fields[St]))D=D.fields[St];else{ue=!1;break}}if(ue){let Fe=N.fieldPath[N.fieldPath.length-1],nt=D.type.fields.findIndex(St=>St.label===Fe);if(nt>=0){let St=D.fields[nt];if(St&&Se(St)&&St.funcId===r.funcId){lt=N;break}}}}}if(lt){let N=lt.cParamName;return cC(N,He,Ne,ae,e,t,Qe,lt)}}let Je=(h=n.functions[r.funcId])==null?void 0:h.cName;if(Je){let lt=r.specializedType??r.type,re=Fn(lt);if(re.length===0&&r.specializedType){let G=Fn(r.type);G.length>0&&G.some(z=>z.fieldFunctionType.forallParameters&&z.fieldFunctionType.forallParameters.length>0)&&(re=G)}if(re.length>0){let{args:G,isHandlerInstallation:z}=Um(re,r,e,n);if(G.length>0){let D=tt?`${tt}, ${G.join(", ")}`:G.join(", ");return zm(Je,D,He,e,ae,t,n,z)}}let N=r.isControlFunction||r.isModuleEffectMember||((E=(T=(g=r.body)==null?void 0:g.$)==null?void 0:T.effectAnalysis)==null?void 0:E.hasEffects),K=!1;if(N){if(r.isControlFunction||r.isModuleEffectMember){let G=((k=($=e.func)==null?void 0:$.$)==null?void 0:k.env)??((C=e.$)==null?void 0:C.env);if(G){let z=lu(G,D=>{var ue;return D.isImplicit===!0&&Se((ue=D.value)==null?void 0:ue[0])&&D.value[0].funcId===r.funcId});z>=0&&z>G.functionDeclarationFrameLevel&&((w=G.frames[z])!=null&&w.isBeginBlockFrame)&&(K=!0)}}else if(r.specializedType){let G=Fn(r.type);if(G.length>0){let z=((L=(I=e.func)==null?void 0:I.$)==null?void 0:L.env)??((x=e.$)==null?void 0:x.env);if(z)for(let D of G){let ue=lu(z,Fe=>Fe.isImplicit===!0&&(Fe.name===D.implicitLabel||Fe.name===D.fieldLabel));if(ue>=0&&ue>z.functionDeclarationFrameLevel&&((V=z.frames[ue])!=null&&V.isBeginBlockFrame)){K=!0;break}}}}}if(Ke(He.return.type))return n.emitter.emitLine(`${t}${Je}(${tt});`),(M=e.$)!=null&&M.deferredDropExpressions&&wn(e,t,n),N&&uC(t,n,K,e),"";{let G=(q=e.$)==null?void 0:q.variableName;if(G){let z=((P=r.specializedType)==null?void 0:P.return.type)??He.return.type,D=(R=e.$)==null?void 0:R.type,ue=D&&yt(D),Fe=z&&yt(z),nt;if(ue&&Fe){let At=r.body;if(At&&b(At,"begin")){let $n=At.args;if($n.length>0){let sr=$n[$n.length-1];Qn(sr)&&(At=sr)}}if(At&&Qn(At)&&((te=At.$)!=null&&te.asyncStateMachineStructName)){let $n=At.$.asyncStateMachineStructName;nt=`${$n}*`,n.tempVarAsyncStructNames||(n.tempVarAsyncStructNames=new Map),n.tempVarAsyncStructNames.set(G,$n)}else D&&H(D)&&D.resolvedConcreteType?nt=se(D,n):nt=se(z,n)}else nt=se(z??D,n);let St=n;return St.declaredTempVars||(St.declaredTempVars=new Set),St.declaredTempVars.has(G)||(St.declaredTempVars.add(G),n.emitter.emitLine(`${t}${nt} ${G} = ${Je}(${tt});`)),ti(G,t,n),(j=e.$)!=null&&j.deferredDropExpressions&&wn(e,t,n),N&&uC(t,n,K,e),G}else return`// Error: Regular function call returns ${se(((Y=r.specializedType)==null?void 0:Y.return.type)??He.return.type,n)} but no temp variable assigned`}}}else{let Ae=n.externFunctions[i.id];if(Ae){let He=Ae.cName;return(le=e.$)!=null&&le.deferredDropExpressions&&wn(e,t,n),`${He}(${tt})`}else{let He=J(e.func,t,n);if(r&&_e(r.type)){let G=Fn(r.type);if(G.length>0){let{args:z,isHandlerInstallation:D}=Um(G,r,e,n);if(z.length>0){let ue=tt?`${tt}, ${z.join(", ")}`:z.join(", ");return zm(He,ue,i,e,ae,t,n,D)}}}let Qe=((Z=e.$)==null?void 0:Z.type)??i.return.type,Je=se(Qe,n),lt=i.parameters.filter(G=>!G.isCompileTimeOnly).map(G=>se(G.type,n)),re=`((${Je} (*)(${lt.join(", ")}))${He})`,N=n,K=He.includes("__capture.")&&!!N.inAsyncStateMachine;if(K&&n.emitter.emitLine(`${t}__yo_effect_escaped = 0;`),Ke(i.return.type)||Ke(Qe)){if(n.emitter.emitLine(`${t}${re}(${tt});`),(ce=e.$)!=null&&ce.deferredDropExpressions&&wn(e,t,n),K){if(n.emitter.emitLine(`${t}if (__yo_effect_escaped) {`),ae){for(let G of ae)if((Te=G.$)!=null&&Te.variableName&&((Ie=G.$)!=null&&Ie.type)&&mt(G.$.type)){let z=lC(Ve(G.$.variableName),n),D=Po(z,G.$.type,n);D&&(n.emitter.emitLine(`${t} ${D};`),n.emitter.emitLine(`${t} memset(&${z}, 0, sizeof(${z}));`))}}gi({emitter:n.emitter,indent:t+" ",resultCode:void 0,debugLabel:void 0}),n.emitter.emitLine(`${t}}`)}return""}else{let G=(ge=e.$)==null?void 0:ge.variableName;if(G){let z=i.return.type,D=(be=e.$)==null?void 0:be.type,ue=D&&z&&yt(D)&&yt(z)?z:D??z,Fe=n;if(Fe.declaredTempVars||(Fe.declaredTempVars=new Set),Fe.declaredTempVars.has(G)||(Fe.declaredTempVars.add(G),n.emitter.emitLine(`${t}${se(ue,n)} ${G} = ${re}(${tt});`)),ti(G,t,n),(De=e.$)!=null&&De.deferredDropExpressions&&wn(e,t,n),K){if(n.emitter.emitLine(`${t}if (__yo_effect_escaped) {`),ae){for(let nt of ae)if((ze=nt.$)!=null&&ze.variableName&&((We=nt.$)!=null&&We.type)&&mt(nt.$.type)){let St=lC(Ve(nt.$.variableName),n),At=Po(St,nt.$.type,n);At&&(n.emitter.emitLine(`${t} ${At};`),n.emitter.emitLine(`${t} memset(&${St}, 0, sizeof(${St}));`))}}gi({emitter:n.emitter,indent:t+" ",resultCode:void 0,debugLabel:void 0}),n.emitter.emitLine(`${t}}`)}return G}else return`// Error: Function parameter call returns ${se(i.return.type,n)} but no temp variable assigned`}}}}}else if(i&&ur(i)){let ae=i,we=Er(ae),Ne=ht(ae);{let tt=we.isFn.callType,Ae=(pe=e.$)==null?void 0:pe.runtimeArgExprsInOrder;if(Ae){let He=n;for(let N of Ae)if((fe=N.$)!=null&&fe.variableName&&(($e=N.$)!=null&&$e.type)){let K=He.currentClosureCaptures&&He.currentClosureCaptures.includes(N.$.variableName)&&Q(N)&&N.$.env&&He.currentClosureCaptureFrameLevel!==void 0&&Co(N.token.value,N.$.env,He.currentClosureCaptureFrameLevel),G=J(N,t,n),z=!1;if(Q(N)&&N.$.env&&N.$.variableName){let ue=ve(N.$.env,N.$.variableName);ue.length>0&&ue[ue.length-1].isCompileTimeOnly&&(z=!0)}let D=(He.inAsyncStateMachine||He.inEffectStateMachine)&&G.startsWith("sm->");if(G&&G!==N.$.variableName&&!K&&!D&&!z){let ue=N.$.convertedRuntimeType||N.$.type,Fe=fn(ue,N.$.variableName,n);n.emitter.emitLine(`${t}${Fe} = ${G};`),ti(N.$.variableName,t,n)}}let Qe=J(e.func,t,n),Je=Ae.map(N=>{var K,G,z,D;if((K=N.$)!=null&&K.variableName&&((G=N.$)!=null&&G.type)){if(He.currentClosureCaptures&&He.currentClosureCaptures.includes(N.$.variableName)&&Q(N)&&N.$.env&&He.currentClosureCaptureFrameLevel!==void 0&&Co(N.token.value,N.$.env,He.currentClosureCaptureFrameLevel))return J(N,t,n);{let Fe=ot(N.$.variableName,N.$.env),nt=(He.inAsyncStateMachine||He.inEffectStateMachine)&&Fe.startsWith("sm->"),St=Fe;if((z=N.$)!=null&&z.deferredDupExpressions&&N.$.deferredDupExpressions.length>0){sn(N,t,He);let At=N.$.deferredDupExpressions[0];S(At)&&((D=At.$)!=null&&D.variableName)&&(St=ot(At.$.variableName,At.$.env))}return nt?Fe:St}}else return J(N,t,n)}),lt;if(Ne){let N=[`(${Qe}).data`,...Je];lt=`(${Qe}).vtable->call(${N.join(", ")})`}else{let N;if(H(ae)){let G=ae;G.resolvedConcreteType&&(N=G.resolvedConcreteType.id)}let K=N?n.implClosureCallMap.get(N):void 0;if(K){let G=Fn(tt);if(G.length>0){let{args:D,isHandlerInstallation:ue}=Um(G,{},e,He);if(D.length>0){let Fe=[`&(${Qe})`,...Je,...D];return zm(K.functionCName,Fe.join(", "),tt,e,Ae,t,He,ue)}}let z=[`&(${Qe})`,...Je];lt=`${K.functionCName}(${z.join(", ")})`}else{let G=[`(${Qe}).data`,...Je];lt=`(${Qe}).call(${G.join(", ")})`}}let re=tt.return.type;if(Ke(re))return n.emitter.emitLine(`${t}${lt};`),(Le=e.$)!=null&&Le.deferredDropExpressions&&wn(e,t,n),"";{let N=(Me=e.$)==null?void 0:Me.variableName;return N?(n.emitter.emitLine(`${t}${se(re,n)} ${N} = ${lt};`),ti(N,t,n),(Ze=e.$)!=null&&Ze.deferredDropExpressions&&wn(e,t,n),N):`// Error: Closure call returns ${se(re,n)} but no temp variable assigned`}}else return"// Error: No runtime args found for closure call"}}else if(X(r))if(Oe(r.value)){let ae=r.value,we=($t=e.$)==null?void 0:$t.runtimeArgExprsInOrder,Ne=(It=n.types[ae.id])==null?void 0:It.cName,tt=ae.fields.map(He=>He.label),Ae=(jt=e.$)==null?void 0:jt.variableName;if(we&&Ne&&tt.length===we.length){if(ae.isNewtype&&ae.fields.length===1){let He=we[0],Qe=J(He,t,n),Je=Qe;if((st=He.$)!=null&&st.deferredDupExpressions&&He.$.deferredDupExpressions.length>0){let re=n;if((Ct=He.$)!=null&&Ct.variableName&&((rn=He.$)!=null&&rn.type)){let K=ot(He.$.variableName,He.$.env);if(Qe!==K){let G=He.$.type,z=se(G,n);n.emitter.emitLine(`${t}${z} ${K} = ${Qe};`)}}sn(He,t,re);let N=He.$.deferredDupExpressions[0];S(N)&&((Bt=N.$)!=null&&Bt.variableName)&&(Je=ot(N.$.variableName,N.$.env))}let lt=`((${Ne})(${Je}))`;if(Ae&&((gt=e.$)!=null&&gt.type)){let re=fn(e.$.type,Ae,n);return n.emitter.emitLine(`${t}${re} = ${lt};`),ti(Ae,t,n),Ae}else return lt}if(ae.isReferenceSemantics){let He=n,Qe=we.map(re=>{var K,G,z,D;let N=J(re,t,n);if((K=re.$)!=null&&K.deferredDupExpressions&&re.$.deferredDupExpressions.length>0){if((G=re.$)!=null&&G.variableName&&((z=re.$)!=null&&z.type)){let Fe=ot(re.$.variableName,re.$.env);if(N!==Fe){let nt=re.$.type,St=se(nt,n);n.emitter.emitLine(`${t}${St} ${Fe} = ${N};`)}}sn(re,t,He);let ue=re.$.deferredDupExpressions[0];if(S(ue)&&((D=ue.$)!=null&&D.variableName))return ot(ue.$.variableName,ue.$.env)}return N}).join(", "),lt=`${`__yo_new_${Ne}`}(${Qe})`;if(Ae&&((ut=e.$)!=null&&ut.type)){let re=fn(e.$.type,Ae,n);return n.emitter.emitLine(`${t}${re} = ${lt};`),ti(Ae,t,n),Ae}else return lt}else{let He=n,Qe=we.map((lt,re)=>{var z,D,ue,Fe;let N=J(lt,t,n),K=Tt(ae)?`_${re}`:Ve(tt[re],ae.isExtern==="c"),G=N;if((z=lt.$)!=null&&z.deferredDupExpressions&&lt.$.deferredDupExpressions.length>0){if((D=lt.$)!=null&&D.variableName&&((ue=lt.$)!=null&&ue.type)){let St=ot(lt.$.variableName,lt.$.env),At=lt.$.type,$n=se(At,n);N!==St&&n.emitter.emitLine(`${t}${$n} ${St} = ${N};`)}sn(lt,t,He);let nt=lt.$.deferredDupExpressions[0];S(nt)&&((Fe=nt.$)!=null&&Fe.variableName)&&(G=ot(nt.$.variableName,nt.$.env))}return`.${K} = `+G}).join(", "),Je=`(${Ne}){ ${Qe} }`;if(Ae&&((Nt=e.$)!=null&&Nt.type)){let lt=fn(e.$.type,Ae,n);return n.emitter.emitLine(`${t}${lt} = ${Je};`),ti(Ae,t,n),Ae}else return Je}}}else{if(ur(r.value))return"// Error: Closure construction should have been handled by closureFunctionValue check at top of generateFuncCall";if(Ht(r.value)){let ae=(Yt=e.$)==null?void 0:Yt.variableName,we=e.args[0];if(we&&S(we)&&b(we,":",2)){let Ne=we.args[0],tt=we.args[1],Ae=(wt=n.types[r.value.id])==null?void 0:wt.cName;if(Ae&&Q(Ne)&&tt){let He=n,Qe=Ne.token.value,Je=ot(Qe,(Ft=Ne.$)==null?void 0:Ft.env),re=J(tt,t,n);if((ee=tt.$)!=null&&ee.deferredDupExpressions&&tt.$.deferredDupExpressions.length>0){sn(tt,t,He);let K=tt.$.deferredDupExpressions[0];S(K)&&((W=K.$)!=null&&W.variableName)&&(re=ot(K.$.variableName,K.$.env))}let N=`(${Ae}){ .${Je} = ${re} }`;if(ae&&((oe=e.$)!=null&&oe.type)){let K=fn(e.$.type,ae,n);return n.emitter.emitLine(`${t}${K} = ${N};`),ti(ae,t,n),ae}else return N}}}else if(Ye(r.value)){let ae=r.value,we=(me=e.$)==null?void 0:me.runtimeArgExprsInOrder,Ne=(de=n.types[ae.id])==null?void 0:de.cName,tt=(ye=e.$)==null?void 0:ye.variableName;if(ae.selectedVariantName&&we&&Ne){if(fr(ae)){let lt=ae.selectedVariantName,re=ae.variants.find(N=>N.name===lt);if(re){if(!re.fields||re.fields.length===0){let N="NULL";if(tt&&((he=e.$)!=null&&he.type)){let K=fn(e.$.type,tt,n);return n.emitter.emitLine(`${t}${K} = ${N};`),ti(tt,t,n),tt}else return N}else if(re.fields.length===1){let N=J(we[0],t,n);if(tt&&((Be=e.$)!=null&&Be.type)){let K=fn(e.$.type,tt,n);return n.emitter.emitLine(`${t}${K} = ${N};`),ti(tt,t,n),tt}else return N}}}if(ui(ae)){let lt=ae.selectedVariantName,re=or(ae,lt,n);if(tt&&((qe=e.$)!=null&&qe.type)){let N=fn(e.$.type,tt,n);return n.emitter.emitLine(`${t}${N} = ${re};`),ti(tt,t,n),tt}else return re}let Qe=ae.selectedVariantName,Je=ae.variants.find(lt=>lt.name===Qe);if(Je){let lt=((Pe=Je.fields)==null?void 0:Pe.filter(G=>!Ke(G.type)))||[],re=n,N=we.map((G,z)=>{var D,ue,Fe,nt,St;if(Je.fields){let At=Je.fields[z];if(At&&!Ke(At.type)){let $n=J(G,t,n),sr=ot(At.label,(D=G.$)==null?void 0:D.env),xn=$n;if((ue=G.$)!=null&&ue.variableName&&((Fe=G.$)!=null&&Fe.type)){let Pt=re.currentClosureCaptures&&re.currentClosureCaptures.includes(G.$.variableName)&&Q(G)&&G.$.env&&re.currentClosureCaptureFrameLevel!==void 0&&Co(G.token.value,G.$.env,re.currentClosureCaptureFrameLevel),jr=(re.inAsyncStateMachine||re.inEffectStateMachine)&&$n.startsWith("sm->"),Ti=!1;if(Q(G)&&G.$.env&&G.$.variableName){let as=ve(G.$.env,G.$.variableName);as.length>0&&as[as.length-1].isCompileTimeOnly&&(Ti=!0)}let oo=!1;if($n&&$n!==G.$.variableName&&!Pt&&!jr&&!Ti){let as=ot(G.$.variableName,G.$.env);if($n!==as){let G_=fn(G.$.type,G.$.variableName,n);n.emitter.emitLine(`${t}${G_} = ${$n};`),oo=!0,ti(G.$.variableName,t,n)}}oo&&(xn=ot(G.$.variableName,G.$.env))}if((nt=G.$)!=null&&nt.deferredDupExpressions&&G.$.deferredDupExpressions.length>0){sn(G,t,re);let Pt=G.$.deferredDupExpressions[0];S(Pt)&&((St=Pt.$)!=null&&St.variableName)&&(xn=ot(Pt.$.variableName,Pt.$.env))}return`.${sr} = `+xn}return""}else return""}).filter(G=>G).join(", "),K=lt.length>0?`(${Ne}){ .tag = ${or(ae,Qe,n)}, .data = { .${Qe} = { ${N} } } }`:`(${Ne}){ .tag = ${or(ae,Qe,n)} }`;if(tt&&((ie=e.$)!=null&&ie.type)){let G=fn(e.$.type,tt,n);return n.emitter.emitLine(`${t}${G} = ${K};`),ti(tt,t,n),tt}else return K}}}}else if(ft(i)){let ae=e.args[0];if(ae&&S(ae)&&(b(ae,"..")||b(ae,"..="))){let tt=b(ae,"..="),Ae=J(e.func,t,n),He=J(ae.args[0],t,n),Qe=J(ae.args[1],t,n),Je=`Slice_${Ve(se(i.childType,n))}`;return n.sliceStructTypes.has(Je)||n.sliceStructTypes.set(Je,{childType:se(i.childType,n)}),tt?`(${Je}){ .data = &${Ae}.data[${He}], .length = (${Qe}) - (${He}) + 1 }`:`(${Je}){ .data = &${Ae}.data[${He}], .length = (${Qe}) - (${He}) }`}let we=J(e.func,t,n),Ne=J(ae,t,n);return`${we}.data[${Ne}]`}else if(Vt(i)){let ae=e.args[0];if(ae&&S(ae)&&(b(ae,"..")||b(ae,"..="))){let tt=b(ae,"..="),Ae=J(e.func,t,n),He=J(ae.args[0],t,n),Qe=J(ae.args[1],t,n),Je=`Slice_${Ve(se(i.childType,n))}`;return n.sliceStructTypes.has(Je)||n.sliceStructTypes.set(Je,{childType:se(i.childType,n)}),tt?`(${Je}){ .data = &${Ae}.data[${He}], .length = (${Qe}) - (${He}) + 1 }`:`(${Je}){ .data = &${Ae}.data[${He}], .length = (${Qe}) - (${He}) }`}let we=J(e.func,t,n),Ne=J(ae,t,n);return`${we}.data[${Ne}]`}else if(i&&et(i)&&Vt(i.childType)){let ae=J(e.func,t,n),we=J(e.args[0],t,n);return`${ae}.data[${we}]`}}function uC(e,t,n,r){var o,a;let i=t.emitter;if(i.emitLine(`${e}if (__yo_effect_escaped) {`),t.inAsyncStateMachine||(Dr(e+" ",t,r,!1,!0,!1),Bi(e+" ",t,r)),t.inAsyncStateMachine)n&&i.emitLine(`${e} __yo_effect_escaped = 0;`),gi({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&&!Ke(s)){let l=se(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&&!Ke(s)){let l=se(s,t);l!=="void"?i.emitLine(`${e} return (${l}){0};`):i.emitLine(`${e} return;`)}else i.emitLine(`${e} return;`)}i.emitLine(`${e}}`)}function cC(e,t,n,r,i,o,a,s){var p,d,v,y,h,g,T,E,$,k,C,w,I,L;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;_=H(x);let V=_?"void":(p=i.$)!=null&&p.type?se(i.$.type,a):se(u,a),M=[],P=s.fieldFunctionType.parameters.filter(te=>!te.isCompileTimeOnly);for(let te=0;te<P.length;te++){let j=P[te].type,Y=H(j)&&((v=(d=r==null?void 0:r[te])==null?void 0:d.$)!=null&&v.type)?r[te].$.type:j,le=_e(Y)?bo(Y,"(*)",a):se(Y,a);M.push(le)}let R=M.join(", ");f=`((${V} (*)(${R}))${e})`}else f=e;if(Ke(u)){if(c.emitLine(`${o}${f}(${l});`),(y=i.$)!=null&&y.deferredDropExpressions&&wn(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(Dr(o+" ",a,i,!1,!0,!1),Bi(o+" ",a,i)),a.inAsyncStateMachine)gi({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let x=(h=a.currentFunctionType)==null?void 0:h.return.type;if(x&&!Ke(x)){let V=se(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=(g=i.$)==null?void 0:g.variableName;if(x){let V=(T=s==null?void 0:s.fieldFunctionType.forallParameters)!=null&&T.length&&((E=i.$)!=null&&E.type)?i.$.type:u,M=se(V,a);if(M==="void"||Ke(V)){if(c.emitLine(`${o}${f}(${l});`),($=i.$)!=null&&$.deferredDropExpressions&&wn(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(Dr(o+" ",a,i,!1,!0,!1),Bi(o+" ",a,i)),a.inAsyncStateMachine)gi({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let q=(k=a.currentFunctionType)==null?void 0:k.return.type;if(q&&!Ke(q)){let P=se(q,a);P!=="void"?c.emitLine(`${o} return (${P}){0};`):c.emitLine(`${o} return;`)}else c.emitLine(`${o} return;`)}return c.emitLine(`${o}}`),""}if(_){if(c.emitLine(`${o}${M} ${x} = (${M}){0};`),c.emitLine(`${o}${f}(${l});`),(C=i.$)!=null&&C.deferredDropExpressions&&wn(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(Dr(o+" ",a,i,!1,!0,!1),Bi(o+" ",a,i)),a.inAsyncStateMachine)gi({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let q=(w=a.currentFunctionType)==null?void 0:w.return.type;if(q&&!Ke(q)){let P=se(q,a);P!=="void"?c.emitLine(`${o} return (${P}){0};`):c.emitLine(`${o} return;`)}else c.emitLine(`${o} return;`)}return c.emitLine(`${o}}`),ti(x,o,a),x}if(c.emitLine(`${o}${M} ${x} = ${f}(${l});`),(I=i.$)!=null&&I.deferredDropExpressions&&wn(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(Dr(o+" ",a,i,!1,!0,!1),Bi(o+" ",a,i)),a.inAsyncStateMachine)gi({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let q=(L=a.currentFunctionType)==null?void 0:L.return.type;if(q&&!Ke(q)){let P=se(q,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`${f}(${l})`}}function Um(e,t,n,r){var s,l,u,c,f,_,p,d,v,y,h,g,T,E,$,k,C;let i=[],o=(l=(s=t.body)==null?void 0:s.$)==null?void 0:l.effectAnalysis,a=!1;for(let w of e){let I=`${w.implicitLabel}.${w.fieldLabel}`,L=!1;if(r.currentEvidenceParams){let x=r.currentEvidenceParams.get(I);x&&(i.push(x.cParamName),L=!0)}if(!L){if(o){if(o.effectHandlerInfos)for(let x of o.effectHandlerInfos){if(x.effectParameterName!==w.fieldLabel&&x.effectParameterName!==w.implicitLabel)continue;let V=x.handlerValue;if(V&&Se(V)){if((u=V.specializedFunctionCaches)!=null&&u.length){let q=V.specializedFunctionCaches[0].specializedFunction,P=(c=r.functions[q.funcId])==null?void 0:c.cName;if(P){i.push(`(void*)${P}`),L=!0,a=!0;break}}let M=(f=r.functions[V.funcId])==null?void 0:f.cName;if(M){i.push(M),L=!0,a=!0;break}}}if(!L&&o.handlerValue&&e.length===1){let x=o.handlerValue;if(x&&Se(x)){if((_=x.specializedFunctionCaches)!=null&&_.length){let V=x.specializedFunctionCaches[0].specializedFunction,M=(p=r.functions[V.funcId])==null?void 0:p.cName;M&&(i.push(`(void*)${M}`),L=!0,a=!0)}if(!L){let V=(d=r.functions[x.funcId])==null?void 0:d.cName;V&&(i.push(V),L=!0,a=!0)}}}}if(!L){let x=((v=n.func.$)==null?void 0:v.env)??((y=n.$)==null?void 0:y.env);if(x){let V=ve(x,w.implicitLabel),M=Pr(x,j=>j.isImplicit===!0&&_e(j.type)&&_e(w.fieldFunctionType)&&j.type===w.fieldFunctionType),q=V[V.length-1],P=M[M.length-1],R=P&&P!==q?P:q??P,te=(h=R==null?void 0:R.value)==null?void 0:h[0];if(te&&Rt(te)){let j=te,Y=!0;for(let le=0;le<w.fieldPath.length-1;le++){let Z=w.fieldPath[le],ce=j.type.fields.findIndex(Te=>Te.label===Z);if(ce>=0&&j.fields[ce]&&Rt(j.fields[ce]))j=j.fields[ce];else{Y=!1;break}}if(Y){let le=w.fieldPath[w.fieldPath.length-1],Z=j.type.fields.findIndex(ce=>ce.label===le);if(Z>=0){let ce=j.fields[Z];if(ce&&Se(ce)){if(((g=ce.specializedFunctionCaches)==null?void 0:g.length)>0){let Te=ce.specializedFunctionCaches[0].specializedFunction,Ie=(T=r.functions[Te.funcId])==null?void 0:T.cName;Ie&&(i.push(`(void*)${Ie}`),L=!0)}if(!L){let Te=(E=r.functions[ce.funcId])==null?void 0:E.cName;Te&&(i.push(Te),L=!0)}}}}}else if(te&&Se(te)){if(($=te.specializedFunctionCaches)!=null&&$.length){let j=te.specializedFunctionCaches[0].specializedFunction,Y=(k=r.functions[j.funcId])==null?void 0:k.cName;Y&&(i.push(`(void*)${Y}`),L=!0)}if(!L){let j=(C=r.functions[te.funcId])==null?void 0:C.cName;j&&(i.push(j),L=!0)}}L&&(a=!0)}}if(!L&&r.stateMachineVariables){let x=w.fieldPath[w.fieldPath.length-1];for(let[,V]of r.stateMachineVariables)if(V.name===x&&V.kind==="outer"){i.push(`sm->__capture.${x}`),L=!0;break}}if(!L)break}}return{args:i,isHandlerInstallation:a}}function zm(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;`),Ke(u)){if(l.emitLine(`${o}${e}(${t});`),(c=r.$)!=null&&c.deferredDropExpressions&&wn(r,o,a),l.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(Dr(o+" ",a,r,!1,!0,!1),Bi(o+" ",a,r)),a.inAsyncStateMachine)gi({emitter:l,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let v=(f=a.currentFunctionType)==null?void 0:f.return.type;if(s&&l.emitLine(`${o} __yo_effect_escaped = 0;`),v&&!Ke(v))if(s){let y=se(v,a);y!=="void"?(l.emitLine(`${o} ${y} _esc_result;`),l.emitLine(`${o} memcpy(&_esc_result, __yo_effect_escape_value, sizeof(${y}));`),l.emitLine(`${o} return _esc_result;`)):l.emitLine(`${o} return;`)}else{let y=se(v,a);y!=="void"?l.emitLine(`${o} return (${y}){0};`):l.emitLine(`${o} return;`)}else l.emitLine(`${o} return;`)}return l.emitLine(`${o}}`),""}else{let v=(_=r.$)==null?void 0:_.variableName;if(v){let y=se(u,a);if(l.emitLine(`${o}${y} ${v} = ${e}(${t});`),ti(v,o,a),(p=r.$)!=null&&p.deferredDropExpressions&&wn(r,o,a),l.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(Dr(o+" ",a,r,!1,!0,!1),Bi(o+" ",a,r)),a.inAsyncStateMachine)gi({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&&!Ke(h)){let g=se(h,a);l.emitLine(`${o} ${g} _esc_result;`),l.emitLine(`${o} memcpy(&_esc_result, __yo_effect_escape_value, sizeof(${g}));`),l.emitLine(`${o} __yo_effect_escaped = 0;`),l.emitLine(`${o} return _esc_result;`)}else if(h&&!Ke(h)){let g=se(h,a);g!=="void"?l.emitLine(`${o} return (${g}){0};`):l.emitLine(`${o} return;`)}else s&&l.emitLine(`${o} __yo_effect_escaped = 0;`),l.emitLine(`${o} return;`)}return l.emitLine(`${o}}`),v}else return`${e}(${t})`}}function _C(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&&pt(u.$.value)){let c=u.$.value.value;r.emitLine(`${t}fprintf(stderr, "%s\\n", ${JSON.stringify(c)});`),r.emitLine(`${t}abort();`)}else{let c=J(u,t,n),f=(l=u.$)==null?void 0:l.type;f&&Oe(f)&&Qr(f)&&f.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`(*((${se(i,n)}*)NULL))`}var jA={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"}},HA={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"},YA={e:"k",x:"w",l:"b",h:"h",w:"w"};function KA(e,t){if(!e)return"r";if(e.startsWith("raw:"))return e.slice(4);let n=HA[e];if(n)return n;let r=jA[e];return r?r[t]??r.x86_64??"r":e}function XA(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?YA[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 QA(e,t,n,r){var h,g,T,E,$;let i=e.args,o=n.targetInfo.arch;if(r==="const_val"){let k,C=0;i.length===2&&((h=i[0].$)!=null&&h.value)&&pt(i[0].$.value)&&(k=i[0].$.value.value,C=1);let w=J(i[C],t,n);return{kind:"const_val",name:k,constraint:"",cExpr:w,cType:"",isDiscarded:!1,isVariableTarget:!1}}if(r==="sym"){let k,C=0;i.length===2&&((g=i[0].$)!=null&&g.value)&&pt(i[0].$.value)&&(k=i[0].$.value.value,C=1);let w=J(i[C],t,n);return{kind:"sym",name:k,constraint:"i",cExpr:w,cType:"",isDiscarded:!1,isVariableTarget:!1}}let a,s=0;if(i.length>=2){let k=i[0];(T=k.$)!=null&&T.value&&pt(k.$.value)&&!(k.tag==="Atom"&&pC(k.token.value))&&(a=k.$.value.value,s=1)}let l=s<i.length-1,u,c;l?(u=JA(i[s],t,n),c=s+1):(a!==void 0&&(u=a),c=s);let f=KA(u,o),_=i[c];if(_.tag==="Atom"&&_.token.value==="_")return{kind:r,name:a,constraint:f,cExpr:"",cType:"int32_t",isDiscarded:!0,isVariableTarget:!1};if((E=_.$)!=null&&E.value&&X(_.$.value)){let k=_.$.value.value,C=se(k,n);return{kind:r,name:a,constraint:f,cExpr:"",cType:C,isDiscarded:!1,isVariableTarget:!1}}let p=J(_,t,n),d=se(($=_.$)==null?void 0:$.type,n),y=(r==="out"||r==="lateout")&&_.tag==="Atom";return{kind:r,name:a,constraint:f,cExpr:p,cType:d,isDiscarded:!1,isVariableTarget:y}}function pC(e){return["reg","reg_byte","reg_abcd","xmm_reg","ymm_reg","imm","mem"].includes(e)}function JA(e,t,n){var r,i;if(e.tag==="Atom"&&pC(e.token.value))return e.token.value;if((r=e.$)!=null&&r.value&&pt(e.$.value))return e.$.value.value;if(b(e,"raw",1)){let o=e;if((i=o.args[0].$)!=null&&i.value&&pt(o.args[0].$.value))return`raw:${o.args[0].$.value.value}`}return"r"}function ZA(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&&pt(o.$.value)?n.push(o.$.value.value):o.tag==="Atom"&&n.push(o.token.value);return n}function ex(e){let t={isVolatile:!0,intelSyntax:!1,noreturn:!1,pure:!1};for(let n of e.args)if(n.tag==="Atom")switch(n.token.value){case"pure":t.pure=!0,t.isVolatile=!1;break;case"intel_syntax":t.intelSyntax=!0;break;case"noreturn":t.noreturn=!0;break;case"volatile":t.isVolatile=!0;break}return t}var Bm=0;function dC(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(Ui(n.targetInfo))return r.emitLine(`${t}/* Error: inline assembly is not supported on WebAssembly */`),r.emitLine(`${t}abort();`),`(*((${se(i,n)}*)NULL))`;let o=[],a=0;for(;a<e.args.length;){let M=e.args[a];if(S(M))break;if((V=M.$)!=null&&V.value&&pt(M.$.value))o.push(M.$.value.value),a++;else break}let s=o.join(`
11440
- `),l=[],u=[],c={isVolatile:!0,intelSyntax:!1,noreturn:!1,pure:!1};for(;a<e.args.length;){let M=e.args[a];if(!S(M)){a++;continue}let q=M.func.tag==="Atom"?M.func.token.value:void 0;if(!q){a++;continue}["in","out","inout","lateout","inlateout","const_val","sym"].includes(q)?l.push(QA(M,t,n,q)):q==="clobber"||q==="clobber_abi"?u.push(...ZA(M,n)):q==="asm_options"&&(c=ex(M)),a++}let f=new Map;for(let M=0;M<l.length;M++)l[M].name&&f.set(l[M].name,M);let _=s;for(let M=0;M<l.length;M++){let q=l[M];q.kind==="const_val"&&(q.name&&(_=_.replace(new RegExp(`\\{${q.name}(?::[^}]*)?\\}`,"g"),q.cExpr)),_=_.replace(new RegExp(`\\{${M}(?::[^}]*)?\\}`,"g"),q.cExpr))}let p=XA(_,f),d=[],v=[],y=[];for(let M=0;M<l.length;M++){let q=l[M];if(q.isDiscarded){let P=`__asm_discard_${Bm++}`;y.push({varName:P,cType:q.cType,operandIdx:M}),r.emitLine(`${t}${q.cType} ${P};`)}else if(q.kind==="out"||q.kind==="lateout"){if(!q.isVariableTarget){if(q.cType){let P=`__asm_out_${Bm++}`;d.push({varName:P,cType:q.cType,operandIdx:M}),r.emitLine(`${t}${q.cType} ${P};`)}}}else if(q.kind==="inout"||q.kind==="inlateout"){let P=`__asm_inout_${Bm++}`;v.push({varName:P,cType:q.cType,initExpr:q.cExpr,operandIdx:M}),r.emitLine(`${t}${q.cType} ${P} = ${q.cExpr};`)}}let h=c.isVolatile?" __volatile__":"",g=p;c.intelSyntax&&(n.needsIntelAsmSyntax=!0);let T=JSON.stringify(g),E=[];for(let M=0;M<l.length;M++){let q=l[M];if(q.kind==="in"||q.kind==="const_val"||q.kind==="sym")continue;let P;q.kind==="out"||q.kind==="lateout"?P=q.kind==="lateout"?"=&":"=":P=q.kind==="inlateout"?"+&":"+";let R=`${P}${q.constraint}`,te=q.name?`[${q.name}] `:"",j;q.isDiscarded?j=y.find(le=>le.operandIdx===M).varName:q.isVariableTarget?j=q.cExpr:q.kind==="out"||q.kind==="lateout"?j=d.find(le=>le.operandIdx===M).varName:j=v.find(le=>le.operandIdx===M).varName,E.push(`${te}"${R}" (${j})`)}let $=[];for(let M=0;M<l.length;M++){let q=l[M];if(q.kind!=="in"&&q.kind!=="sym")continue;let P=q.constraint,R=q.name?`[${q.name}] `:"";$.push(`${R}"${P}" (${q.cExpr})`)}let k=u.map(M=>`"${M}"`),C=E.join(", "),w=$.join(", "),I=k.join(", ");if(r.emitLine(`${t}__asm__${h} (`),r.emitLine(`${t} ${T}`),r.emitLine(`${t} : ${C}`),r.emitLine(`${t} : ${w}`),r.emitLine(`${t} : ${I}`),r.emitLine(`${t});`),c.noreturn)return r.emitLine(`${t}__builtin_unreachable();`),`(*((${se(i,n)}*)NULL))`;if(Ke(i))return"";let L=[];for(let M=0;M<l.length;M++){let q=l[M];if(!(q.isDiscarded||q.isVariableTarget)&&!(q.kind==="in"||q.kind==="const_val"||q.kind==="sym"))if(q.kind==="out"||q.kind==="lateout"){let P=d.find(R=>R.operandIdx===M);P&&L.push(P.varName)}else{let P=v.find(R=>R.operandIdx===M);P&&L.push(P.varName)}}if(L.length===1)return L[0];if(L.length>1){let M=se(i,n),q=L.map((P,R)=>`._${R} = ${P}`).join(", ");return`((${M}){ ${q} })`}return""}function mC(e,t,n){var i;if(Ui(n.targetInfo))return"/* global_asm skipped: not supported on this target */";let r=e.args[0];if((i=r.$)!=null&&i.value&&pt(r.$.value)){let o=r.$.value.value;n.emitter.emitDeclarationLine(`__asm__(${JSON.stringify(o)});`)}return""}function yC(e,t,n){var l,u,c,f,_,p,d,v,y,h;if(e.args.length!==2)return"/* ERROR: field access requires exactly 2 arguments */";let r=e.args[0],i=e.args[1];if(!r||!i)return"/* ERROR: invalid field access arguments */";let o=J(r,t,n),a=(l=r.$)==null?void 0:l.type,s=(u=r.$)==null?void 0:u.value;if(Q(i)){let g=i.token.value,T=n;if(T.currentEvidenceParams&&Q(r)){let $=`${r.token.value}.${g}`,k=T.currentEvidenceParams.get($);if(k)return k.cParamName}if((c=e.$)!=null&&c.value&&Se(e.$.value)){let E=e.$.value;return((f=n.functions[E.funcId])==null?void 0:f.cName)||E.funcId}if(!((_=e.$)!=null&&_.value)&&(F.___dispose.includes(g)||F.___drop.includes(g)||F.___dup.includes(g))&&a){let E=null;if((Oe(a)||Ye(a))&&(E=a.trait),E){let $=E.fields.find(k=>k.label===g&&k.assignedValue&&Se(k.assignedValue));if($&&Se($.assignedValue)){let k=$.assignedValue;return((p=n.functions[k.funcId])==null?void 0:p.cName)||k.funcId}else return`/* ERROR: Rc method ${g} not found in type module */`}else return`/* ERROR: No module found for Rc method ${g} */`}if(rt(a)||Rt(s)){let E=(d=e.$)==null?void 0:d.value;if(E){if(Ge(E)){if(E.variableName)return ot(E.variableName,(v=e.$)==null?void 0:v.env);if((T.inAsyncStateMachine||T.inEffectStateMachine)&&T.stateMachineVariables){for(let[,$]of T.stateMachineVariables)if($.name===g&&$.kind==="outer")return`sm->__capture.${g}`}}else if(!Rt(E))return yr(E,n,e)}return ot(g,(y=e.$)==null?void 0:y.env)}if(Qr(a)&&a.fields.length===1){let E=a.fields[0];if(E&&E.label===g)return o}if(Ye(a)){let E=a;if(fr(E))return o;for(let k of E.variants)if(k.fields){for(let C of k.fields)if(C.label===g){let w=k.name;return`${o}.data.${w}.${Ve(g)}`}}return`/* ERROR: field ${g} not found in enum ${E.typeName} */`}else if(X(s)&&Ye(s.value)){let E=s.value,$=E.variants.find(C=>C.name===g),k=(h=n.types[E.id])==null?void 0:h.cName;if($&&!$.fields&&k){let C=or(E,$.name,n);return`(${k}){ .tag = ${C}, .data = { } }`}}else if(et(a)){if(g==="*")return`(*${o})`;if(Vt(a.childType))return`${o}->${Ve(g)}`;{let E=0,$=a;for(;et($);)E++,$=$.childType;if(E>0&&Oe($)&&$.isReferenceSemantics&&E++,Qr($)&&$.fields.length===1){let k=$.fields[0];if(k&&k.label===g)return E===1?`(*${o})`:`${"*".repeat(E)}(${o})`}return E>0?E===1?`${o}->${Ve(g)}`:`${`(${"*".repeat(E-1)}${o})`}->${Ve(g)}`:`${o}.${Ve(g)}`}}else if(Tt(a)){if(g.match(/^\d+$/))return`${o}._${g}`;{let E=a.fields.findIndex($=>$.label===g);return`${o}._${E}`}}else return ht(a)?`${o}.vtable->${Ve(g)}`:dn(a)?`${o}->${Ve(g)}`:`${o}.${Ve(g)}`}return"/* ERROR: field name must be an identifier */"}var tx=0;function gC(e,t,n){var l,u,c,f,_,p,d,v,y,h;if(!((l=e.$)==null?void 0:l.type))return`// Error: No type information for pointer/reference expression ${A(e)}
11441
- `;let i=e.args[0];if(S(i)){let g=(u=i.func.$)==null?void 0:u.type;if(g&&ft(g)){let T=i.args[0];if(T&&S(T)&&(b(T,"..")||b(T,"..="))){let E=b(T,"..="),$=J(i.func,t,n),k=J(T.args[0],t,n),C=J(T.args[1],t,n),w=`Slice_${Ve(se(g.childType,n))}`;return n.sliceStructTypes.has(w)||n.sliceStructTypes.set(w,{childType:se(g.childType,n)}),E?`(${w}){ .data = &${$}.data[${k}], .length = (${C}) - (${k}) + 1 }`:`(${w}){ .data = &${$}.data[${k}], .length = (${C}) - (${k}) }`}}else if(g&&(Vt(g)||et(g)&&Vt(g.childType))){let T=Vt(g)?g:g.childType,E=i.args[0];if(E&&S(E)&&(b(E,"..")||b(E,"..="))){let $=b(E,"..="),k=J(i.func,t,n),C=J(E.args[0],t,n),w=J(E.args[1],t,n),I=`Slice_${Ve(se(T.childType,n))}`;return n.sliceStructTypes.has(I)||n.sliceStructTypes.set(I,{childType:se(T.childType,n)}),$?`(${I}){ .data = &${k}.data[${C}], .length = (${w}) - (${C}) + 1 }`:`(${I}){ .data = &${k}.data[${C}], .length = (${w}) - (${C}) }`}}}let o=(c=i.$)==null?void 0:c.value,a=(f=i.$)==null?void 0:f.type;if(o!==void 0&&a){if(Mt(o)||Ut(o)){let g=J(i,t,n);return`(&(${se(a,n)}){${g}})`}if(pt(o)&&((_=i.$)!=null&&_.convertedRuntimeType))return`(&${J(i,t,n)})`}if((p=e.$)!=null&&p.isIndexTraitAddressOf&&S(i)&&((d=i.$)!=null&&d.indexMethodValue)){let g=i.$.indexMethodValue;if(Se(g)){let T=i.func,E=J(T,t,n);if(S(T)&&!Q(T)&&!b(T,".")&&((v=T.$)!=null&&v.type)&&!(((y=T.$)==null?void 0:y.variableName)&&E===ot(T.$.variableName,T.$.env))){let L=se(T.$.type,n),x=`__yo_ptr_idx_tmp_${tx++}`;n.emitter.emitLine(`${t}${L} ${x} = ${E};`),E=x}let $=i.args[0],k=$?J($,t,n):"0",C=$o(g);if(C&&(F.__yo_array_index.includes(C)||F.__yo_slice_index.includes(C)))return`(&((&${E})->data[${k}]))`;let w=(h=n.functions[g.funcId])==null?void 0:h.cName;if(w)return`${w}(&${E}, ${k})`}}return`(&${J(i,t,n)})`}function hC(e,t,n){let r=e.args[0];return r?`__yo_decr_rc(${J(r,t,n)})`:"// Error: __yo_decr_rc requires exactly 1 argument"}function vC(e,t,n){let r=e.args[0];return r?`__yo_incr_rc(${J(r,t,n)})`:"// Error: __yo_incr_rc requires exactly 1 argument"}function TC(e,t,n){let r=e.args[0];return r?J(r,t,n):"// Error: __yo_rc_own requires exactly 1 argument"}function EC(e,t,n){var f;let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_drop_array_element requires exactly 2 arguments";let o=J(r,t,n),a=J(i,t,n),s=(f=r.$)==null?void 0:f.type;if(!s||!ft(s))return"// Error: __yo_drop_array_element requires an array type";let l=s.childType,u=H(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(ft(u)){let _=u.length;if(!Mt(_))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} < ${_.value}; ${p}++) {`);let v=`(${o}).data[${a}].data[${p}]`;d.emitLine(" { // drop nested array element");let y=Po(v,u.childType,n);return y&&d.emitLine(` ${y};`),d.emitLine(" }"),d.emitLine("}"),""}let c=zi(u,n);return c?`${c}((${o}).data[${a}])`:"// No drop function for array element type"}function $C(e,t,n){var f;let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_dup_array_element requires exactly 2 arguments";let o=J(r,t,n),a=J(i,t,n),s=(f=r.$)==null?void 0:f.type;if(!s||!ft(s))return"// Error: __yo_dup_array_element requires an array type";let l=s.childType,u=H(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(ft(u)){let _=u.length;if(!Mt(_))return"// Error: array element has non-constant length";let p=`temp_array_${Math.floor(Math.random()*1e6)}`,d=`i_${Math.floor(Math.random()*1e6)}`,v=se(u,n),y=n.emitter;y.emitLine(`${v} ${p} = (${o}).data[${a}];`),y.emitLine(`for (size_t ${d} = 0; ${d} < ${_.value}; ${d}++) {`);let h=rl(`${p}.data[${d}]`,u.childType,n);return y.emitLine(` ${p}.data[${d}] = ${h};`),y.emitLine("}"),p}let c=Ur(u,n);return c?`${c}((${o}).data[${a}])`:"// No dup function for array element type"}function bC(e,t,n){var _,p;let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_drop_tuple_element requires exactly 2 arguments";let o=J(r,t,n);J(i,t,n);let a=(_=r.$)==null?void 0:_.type;if(!a||!Tt(a))return"// Error: __yo_drop_tuple_element requires a tuple type";let s=(p=i.$)==null?void 0:p.value;if(!Mt(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=H(u)&&u.resolvedConcreteType?u.resolvedConcreteType:u;if(Tt(c)){let d=`(${o})._${l}`;return Po(d,c,n)}let f=zi(c,n);return f?`${f}((${o})._${l})`:"// No drop function for tuple element type"}function CC(e,t,n){var _,p;let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_dup_tuple_element requires exactly 2 arguments";let o=J(r,t,n);J(i,t,n);let a=(_=r.$)==null?void 0:_.type;if(!a||!Tt(a))return"// Error: __yo_dup_tuple_element requires a tuple type";let s=(p=i.$)==null?void 0:p.value;if(!Mt(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=H(u)&&u.resolvedConcreteType?u.resolvedConcreteType:u;if(Tt(c)){let d=`(${o})._${l}`;return rl(d,c,n)}let f=Ur(c,n);return f?`${f}((${o})._${l})`:"// No dup function for tuple element type"}function kC(e,t,n){var a,s;let r=e.args[0];if(!r)return"// Error: ___dup requires exactly 1 argument";let i=J(r,t,n),o=((a=r.$)==null?void 0:a.type)??((s=e.$)==null?void 0:s.type);return o?rl(i,o,n):i}function wC(e,t,n){var a,s;let r=e.args[0];if(!r)return"// Error: ___drop requires exactly 1 argument";let i=J(r,t,n),o=((a=r.$)==null?void 0:a.type)??((s=e.$)==null?void 0:s.type);return o?Po(i,o,n):""}function FC(e,t,n){let r=e.args[0];return r?`__yo_decr_rc((void*)(${J(r,t,n)}).data)`:"// Error: __yo_dyn_drop requires exactly 1 argument"}function LC(e,t,n){let r=e.args[0];return r?`__yo_incr_rc((void*)(${J(r,t,n)}).data)`:"// Error: __yo_dyn_dup requires exactly 1 argument"}function IC(e,t,n){let r=e.args[0];return r?`__yo_incr_rc_atomic(${J(r,t,n)})`:"// Error: __yo_incr_rc_atomic requires exactly 1 argument"}function SC(e,t,n){let r=e.args[0];return r?`__yo_decr_rc_atomic(${J(r,t,n)})`:"// Error: __yo_decr_rc_atomic requires exactly 1 argument"}function AC(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&&H(i)&&yt(i)){let l=J(r,t,n);return`if (${l} != NULL) { __yo_decr_rc((void*)${l}); }`}if(i&&H(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&&Se(u.assignedValue)){let c=(s=n.functions[u.assignedValue.funcId])==null?void 0:s.cName;if(c){let f=J(r,t,n);return`${c}(${f})`}}}return"/* __yo_sometype_drop: no-op */"}function xC(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&&H(i)&&yt(i))return`__yo_incr_rc((void*)${J(r,t,n)})`;if(i&&H(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&&Se(u.assignedValue)){let c=(s=n.functions[u.assignedValue.funcId])==null?void 0:s.cName;if(c){let f=J(r,t,n);return`${c}(${f})`}}}return"/* __yo_sometype_dup: no-op */"}function NC(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=J(r,t,n);return Ar(i)?uo(i)?`atomic_load_explicit((_Atomic size_t*)&((__yo_ref_header_t*)(${o}))->ref_count, memory_order_acquire)`:`((__yo_ref_header_t*)(${o}))->ref_count`:"1"}function DC(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=J(s,t,n);if((u=s.$)!=null&&u.deferredDupExpressions&&s.$.deferredDupExpressions.length>0){sn(s,t,o);let f=s.$.deferredDupExpressions[0];if(S(f)&&((c=f.$)!=null&&c.variableName))return ot(f.$.variableName,f.$.env)}return l}).join(", ");return`${n.currentFunctionName}(${a})`}else return`// Error: No arguments for recur call ${A(e)}
11442
- `}function VC(e,t,n){let r=e.args[0];return`sizeof(${J(r,t,n)})`}function MC(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 v=n,y=r.map((h,g)=>{var $,k;let E=J(h,t,n);if(($=h.$)!=null&&$.deferredDupExpressions&&h.$.deferredDupExpressions.length>0){sn(h,t,v);let C=h.$.deferredDupExpressions[0];S(C)&&((k=C.$)!=null&&k.variableName)&&(E=ot(C.$.variableName,C.$.env))}return`._${g} = ${E}`}).join(", ");if(o&&((f=e.$)!=null&&f.type)){let h=`(${i}){ ${y} }`,g=fn(e.$.type,o,n);return n.emitter.emitLine(`${t}${g} = ${h};`),o}else return`(${i}){ ${y} }`}else{if(e.args.length===0)return"";{let v=r??e.args;if(!i)return`/* Error: tuple type not found - typeId: ${((p=(_=e.$)==null?void 0:_.type)==null?void 0:p.id)??"none"} */`;let y=v.map((h,g)=>{let T=J(h,t,n);return`._${g} = ${T}`}).join(", ");if(o&&((d=e.$)!=null&&d.type)){let h=`(${i}){ ${y} }`,g=fn(e.$.type,o,n);return n.emitter.emitLine(`${t}${g} = ${h};`),o}else return`(${i}){ ${y} }`}}}function RC(e,t,n){var u,c;let i=(u=e.args[0].$)==null?void 0:u.value;if(!i||!X(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)||se(o,n),l=`__yo_typeid_${Ve(s)}`;return n.typeIdStatics||(n.typeIdStatics=new Map),n.typeIdStatics.has(a)||(n.typeIdStatics.set(a,l),n.emitter.emitDeclarationLine(`static const char ${l} = 0;`)),n.cIncludes.add("<stdint.h>"),`(uintptr_t)&${l}`}function nx(e,t){if(S(e)&&b(e,B.begin)){let n=[];for(let r of e.args)if(S(r)&&b(r,"=",2)){let i=r.args[0],o=r.args[1],a=J(i,"",t),s=J(o,"",t);n.push(`${a} = ${s}`)}return n.join(", ")}else if(S(e)&&b(e,"=",2)){let n=e.args[0],r=e.args[1],i=J(n,"",t),o=J(r,"",t);return`${i} = ${o}`}return J(e,"",t)}function qm(e,t,n){var r,i,o,a;if(S(e)&&b(e,B.begin)){let s=n,l=s.pendingDeferredDrops,u=((r=e.$)==null?void 0:r.deferredDropExpressions)??[],c=new Map;for(let d of u){let v=ei(d);v&&c.set(v,d)}s.pendingDeferredDrops=[...l??[]];let f=s.consumedVarPendingDrops,_=((i=e.$)==null?void 0:i.consumedVariableDropExpressions)??[];s.consumedVarPendingDrops=[..._,...f??[]];let p=new Set;for(let d of e.args){let v=J(d,t,n);if(v&&n.emitter.emitLine(`${t}${v};`),(o=d.$)!=null&&o.env&&c.size>p.size)for(let y of d.$.env.frames)for(let h of y.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 v=J(d,t,n);v&&n.emitter.emitLine(`${t}${v};`)}s.pendingDeferredDrops=l,s.consumedVarPendingDrops=f}else{let s=J(e,t,n);s&&n.emitter.emitLine(`${t}${s};`)}}function OC(e,t,n){var i,o,a;if((i=e.$)!=null&&i.comptimeUnrolledBodies){for(let s of e.$.comptimeUnrolledBodies)qm(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 f=n,_=f.loopBodyDropsBaselineCount;f.loopBodyDropsBaselineCount=((o=f.pendingDeferredDrops)==null?void 0:o.length)??0,n.emitter.emitLine(`${t}while (true) {`);let p=J(s,t+" ",n);return n.emitter.emitLine(`${t} if (!(${p})) {`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t} }`),qm(l,t+" ",n),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}${c}:;`),f.loopBodyDropsBaselineCount=_,n.currentLoopLabel=u,""}else if(r.length===3){let s=r[0],l=r[1],u=r[2],c=n.currentLoopLabel,f=n.currentContinueLabel,_=`loop_${Math.random().toString(36).substr(2,9)}`,p=`continue_${Math.random().toString(36).substr(2,9)}`;n.currentLoopLabel=_,n.currentContinueLabel=p;let d=n,v=d.loopBodyDropsBaselineCount;d.loopBodyDropsBaselineCount=((a=d.pendingDeferredDrops)==null?void 0:a.length)??0,n.emitter.emitLine(`${t}while (true) {`);let y=J(s,t+" ",n);n.emitter.emitLine(`${t} if (!(${y})) {`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t} }`),qm(u,t+" ",n),n.emitter.emitLine(`${t}${p}:;`);let h=nx(l,n);return n.emitter.emitLine(`${t} ${h};`),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}${_}:;`),d.loopBodyDropsBaselineCount=v,n.currentLoopLabel=c,n.currentContinueLabel=f,""}else return n.emitter.emitLine(`${t}/* Error: while loop expects 2 or 3 arguments, got ${r.length} */`),""}var rx=0;function ix(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;H(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),ln(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function ox(e,t,n){var c,f,_,p,d,v,y,h;let r=(c=e.$)==null?void 0:c.indexMethodValue;if(!r||!Se(r))return"/* Error: Index trait method value missing */";let i=e.func,o=J(i,t,n);if(S(i)&&!Q(i)&&!b(i,".")&&((f=i.$)!=null&&f.type)&&!(((_=i.$)==null?void 0:_.variableName)&&o===ot(i.$.variableName,i.$.env))){let T=se(i.$.type,n),E=`__yo_idx_tmp_${rx++}`;n.emitter.emitLine(`${t}${T} ${E} = ${o};`),o=E}let a=e.args[0],s=a?J(a,t,n):"0",l,u=$o(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)&&et(e.$.indexTraitPtrType))l=`(&(${se(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)&&et(e.$.indexTraitPtrType))l=`(&(${se(e.$.indexTraitPtrType.childType,n)}){ .data = &((&${o})->data[(${s}).start]), .length = (${s}).end - (${s}).start + 1 })`;else{let g=(v=n.functions[r.funcId])==null?void 0:v.cName;if(!g)return`/* Error: Index method ${r.funcId} not found in function registry */`;l=`${g}(&${o}, ${s})`}else{let g=(y=n.functions[r.funcId])==null?void 0:y.cName;if(!g)return`/* Error: Index method ${r.funcId} not found in function registry */`;l=`${g}(&${o}, ${s})`}return(h=e.$)!=null&&h.isIndexTraitAddressOf?l:`(*${l})`}function ax(e,t,n,r){var f,_,p,d;let i=e.args[0];if(!((f=i==null?void 0:i.$)!=null&&f.type))return;let o=e.args.find(v=>S(v)&&b(v,B.using));if(!o)return;let a=jn(i.$.type);if(!((_=a==null?void 0:a.isFuture.effects)!=null&&_.length))return;let s=ix(a.isFuture.effects),l=o.args,u=r,c=u.emitter;for(let v=0;v<s.length&&v<l.length;v++){let y=s[v],h=l[v];if(_e(y.type)){let g=y.label,T;if(u.currentEvidenceParams){for(let E of u.currentEvidenceParams.values())if(E.fieldLabel===g){T=E.cParamName;break}}if(!T&&u.stateMachineVariables){for(let[,E]of u.stateMachineVariables)if(E.name===g&&E.kind==="outer"){T=`sm->__capture.${g}`;break}}if(!T){let E=(p=h.$)==null?void 0:p.value;if(E&&Se(E)){let $=r.functions[E.funcId];$&&(T=$.cName)}}T||(T=J(h,n,r)),T&&c.emitLine(`${n} ${t}->__capture.${g} = (void*)${T};`)}else if(rt(y.type)){let g=y.type;for(let T of g.fields){if(!_e(T.type))continue;let E;if(u.stateMachineVariables){for(let[,$]of u.stateMachineVariables)if($.name===T.label&&$.kind==="outer"){E=`sm->__capture.${T.label}`;break}}if(!E){let $=(d=h.$)==null?void 0:d.value;if($&&Rt($)){let k=g.fields.indexOf(T),C=$.fields[k];if(C&&Se(C)){let w=r.functions[C.funcId];w&&(E=w.cName)}}}if(!E&&u.currentEvidenceParams){for(let $ of u.currentEvidenceParams.values())if($.fieldLabel===T.label){E=$.cParamName;break}}E||(E=sx(T.label,g,u,e)),E&&c.emitLine(`${n} ${t}->__capture.${T.label} = (void*)${E};`)}}}}function sx(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=Pr(i,c=>c.isImplicit===!0);for(let c=o.length-1;c>=0;c--){let f=o[c],_=(l=f.value)==null?void 0:l[f.value.length-1];if(_&&Rt(_)){let p=_.type.fields.findIndex(d=>d.label===e);if(p>=0){let d=_.fields[p];if(d&&Se(d)){let v=(u=n.functions[d.funcId])==null?void 0:u.cName;if(v)return v}}}}}function lx(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=J(i,t,n);if(r.effectHandlerParamDrops)for(let f of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${f};`);r.emitter.emitLine(`${t}${o.directReturnVar} = ${c};`),r.emitter.emitLine(`${t}goto ${o.directExitLabel};`)}else{if(r.effectHandlerParamDrops)for(let c of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${c};`);r.emitter.emitLine(`${t}goto ${o.directExitLabel};`)}return""}if(r.inAsyncStateMachine){let c=r.emitter;if(i){let f=J(i,t,n);f&&f!=="(void)0"&&c.emitLine(`${t}(void)${f};`)}if(r.effectHandlerParamDrops)for(let f of r.effectHandlerParamDrops)c.emitLine(`${t}${f};`);return Dr(t,r,e,!1,!0,!0),Bi(t,r,e,!0),gi({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(Dr(t,r,e,!1,!0,!0),Bi(t,r,e,!0),r.currentFunctionType){let c=r.currentFunctionType.return.type;if(!Ke(c)){let f=r.overrideReturnTypeStr??se(c,n);if(f!=="void")return`return (${f}){0}`}}return"return"}let s=J(i,t,n);if(r.effectHandlerParamDrops)for(let c of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${c};`);if(Dr(t,r,e,!1,!0,!0),Bi(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&&!Ke(c)){let _=se(c,n);r.emitter.emitLine(`${t}{ ${_} _esc_val = ${s}; memcpy(__yo_effect_escape_value, &_esc_val, sizeof(${_})); }`)}let f=r.currentFunctionType.return.type;if(!Ke(f)){let _=r.overrideReturnTypeStr??se(f,n);if(_!=="void")return`return (${_}){0}`}return"return"}return`return ${s}`}function PC(e,t,n){let r;switch(e.tag){case"FnCall":r=ux(e,t,n);break;case"Atom":r=ul(e,n,t);break}return r}function ux(e,t,n){var r,i,o,a,s,l,u,c,f,_,p,d,v,y,h;if((r=e.$)!=null&&r.macroExpansion)return J(e.$.macroExpansion,t,n);if(S(e.func)&&b(e.func,".",2)&&e.func.args[1]&&Q(e.func.args[1])){let g=e.func.args[1].token.value,T=e.func.args[0],E=(i=T==null?void 0:T.$)==null?void 0:i.type;if(E&&H(E)&&yt(E)){if(g===F.___drop[0]){let $=J(T,t,n);return`if (${$} != NULL) { __yo_decr_rc((void*)${$}); }`}if(g===F.___dup[0])return`__yo_incr_rc((void*)${J(T,t,n)})`}}if(j$(e))return H$(e,t,n);if(b(e,F.__yo_decr_rc))return hC(e,t,n);if(b(e,F.__yo_incr_rc))return vC(e,t,n);if(b(e,F.__yo_rc_own))return TC(e,t,n);if(b(e,F.__yo_drop_array_element))return EC(e,t,n);if(b(e,F.__yo_dup_array_element))return $C(e,t,n);if(b(e,F.__yo_drop_tuple_element))return bC(e,t,n);if(b(e,F.__yo_dup_tuple_element))return CC(e,t,n);if(b(e,F.___dup))return kC(e,t,n);if(b(e,F.___drop))return wC(e,t,n);if(b(e,F.__yo_dyn_drop))return FC(e,t,n);if(b(e,F.__yo_dyn_dup))return LC(e,t,n);if(b(e,F.__yo_incr_rc_atomic))return IC(e,t,n);if(b(e,F.__yo_decr_rc_atomic))return SC(e,t,n);if(b(e,F.__yo_iso_extract))return Jb(e,t,n);if(b(e,F.__yo_iso_dispose))return Zb(e,t,n);if(Om(e))return eC(e,t,n);if(b(e,F.__yo_sometype_drop))return AC(e,t,n);if(b(e,F.__yo_sometype_dup))return xC(e,t,n);if(b(e,F.__yo_gc_collect))return Xb(e,t,n);if(b(e,F.rc))return NC(e,t,n);if(b(e,F.panic))return _C(e,t,n);if(b(e,F.asm))return dC(e,t,n);if(b(e,F.global_asm))return mC(e,t,n);if(b(e,B.test))return"/* test declaration skipped */";if(b(e,F.__yo_thread_set_maximum_threads))return sC(e,t,n);if(b(e,B.op_and))return Db(e,t,n);if(b(e,B.op_or))return Vb(e,t,n);if(Qn(e))return(o=e.$)!=null&&o.awaitAnalysis?Y$(e,t,n):Z$(e,t,n);if(b(e,B.dyn))return Kb(e,t,n);if(Or(e))return Ub(e,t,n);if(UE(e))return zb(e,t,n);if(jf(e)){let g=e.args[0];if(!g)return"// Error: spawn requires a Future argument";let E=n.emitter,$=J(g,t,n),k=(a=g.$)==null?void 0:a.type,C=k?se(k,n):"void*",w=(s=e.$)==null?void 0:s.type,I=w?se(w,n):null,L=(l=e.$)!=null&&l.variableName?`__spawn_future_${e.$.variableName}`:"__spawn_future",x=(u=e.$)!=null&&u.variableName?`__spawn_state_${e.$.variableName}`:"__spawn_state";return E.emitLine(`${t}// io.spawn \u2014 start cold Future, return JoinHandle`),E.emitLine(`${t}${C} ${L} = ${$};`),E.emitLine(`${t}int ${x} = ${L}->state;`),E.emitLine(`${t}if (${x} == -2) {`),E.emitLine(`${t} fprintf(stderr, "panic: attempted to spawn an aborted Future\\n");`),E.emitLine(`${t} abort();`),E.emitLine(`${t}}`),yu((c=g.$)==null?void 0:c.type)||(E.emitLine(`${t}if (${x} == 0 && ${L}->__yo_resume_fn) {`),ax(e,L,t,n),E.emitLine(`${t} __yo_incr_rc((void*)${L});`),E.emitLine(`${t} ${L}->__yo_resume_fn((void*)${L});`),E.emitLine(`${t}}`)),I?`(${I}){ .__future = (void*)${L} }`:`(void*)${L}`}if(zE(e))return Bb(e,t,n);if(b(e,B.return))return vb(e,t,n);if(b(e,B.escape))return lx(e,t,n);if(b(e,F.__yo_array_fill,2))return Rb(e,t,n);if(b(e,"::",2))return"";if(b(e,":",2))return Wb(e,t,n);if(b(e,":=",2)){let g=Qb(e,t,n);if(g!==void 0)return g}else{if(b(e,"=",2))return Ob(e,t,n);if((f=e.$)!=null&&f.value&&!Ge((_=e.$)==null?void 0:_.value)&&!Ke(e.$.type)&&!an((p=e.$)==null?void 0:p.controlFlow))return yr(e.$.value,n,e);if(b(e,".",2))return yC(e,t,n);if(b(e,B.begin))return Gb(e,t,n);if(b(e,B.cond))return jb(e,t,n);if(b(e,B.match))return nC(e,t,n);if(b(e,F.__yo_address_of,1))return gC(e,t,n);if(b(e,B.tuple))return MC(e,t,n);if(b(e,B.array)){let g=Mb(e,t,n);if(g!==void 0)return g}else{if(b(e,B.recur))return DC(e,t,n);if(b(e,B.runtime,1))return J(e.args[0],t,n);if(b(e,F.sizeof,1))return VC(e,t,n);if(b(e,F.typeid,1))return RC(e,t,n);if(b(e,F.downcast,2))return Yb(e,t,n);if(b(e,Za)){let g=((d=e.$)==null?void 0:d.runtimeArgExprsInOrder)||e.args;if(g){let T=n,E=g.map($=>{var C,w;let k=J($,t,n);if((C=$.$)!=null&&C.deferredDupExpressions&&$.$.deferredDupExpressions.length>0){sn($,t,T);let I=$.$.deferredDupExpressions[0];if(S(I)&&((w=I.$)!=null&&w.variableName))return ot(I.$.variableName,I.$.env)}return k});return vu(e.func.token.value,E,e,n,t)}}else{if(b(e,B.while))return OC(e,t,n);if(b(e,"->",2)&&S(e.args[0])&&b(e.args[0],B.fn)){let g=(v=e.$)==null?void 0:v.value;return Se(g)?yr(g,n):"// Error: Anonymous function missing function value"}else{if(b(e,F.consume))return Hb(e,t,n);if(b(e,F.comptime_expect_error)||b(e,F.comptime_assert)||b(e,F.__yo_var_print_info)||b(e,F.__yo_var_is_owning_the_rc_value)||b(e,F.__yo_var_has_other_aliases))return"";if(b(e,B.open))return rC(e,t,n);if((y=e.$)!=null&&y.indexTraitPtrType&&((h=e.$)!=null&&h.indexMethodType))return ox(e,t,n);{let g=fC(e,t,n);if(g!==void 0)return g}}}}}if(S(e))throw new Error(`Unhandled function call: ${A(e)}`);return`// Failed to transpile ${A(e)}`}function UC({expr:e,env:t,context:n}){it(e,F.alignof,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:"Failed to evaluate expression."});t=i.$.env;let o;i.$.value&&X(i.$.value)?o=i.$.value.value:o=i.$.type;let a=Xi(o),s;return a===null?s=Ee(Mn(),{env:t,context:n}):s=mr("Usize",a),e.$={env:t,type:Mn(),value:s,pathCollection:[]},e}function zC({expr:e,env:t,context:n}){let r=b(e,B.op_and)?"and":"or",i=e.args;if(i.length===0){let u=pn(r==="and");return e.$={env:t,type:tn(),value:u,pathCollection:[],isAccessingProperty:!1},e}let o=t,a,s=!1,l=!1;for(let u=0;u<i.length;u++){let c=i[u],f=U({expr:c,env:o,context:{...n}});if(!f.$||!Mr(f.$.type))throw m({token:c.token,errorMessage:`Expected bool type for "${r}" argument, got:
11439
+ ${c}}`),u}function oC(e,t,n){var h,g,T,E,$,k;let r=(h=e.$)==null?void 0:h.runtimeArgExprsInOrder;if(!r||r.length!==1)return"/* Error: __yo_thread_spawn requires exactly 1 argument */";let i=r[0],o=(g=i.$)==null?void 0:g.type;if(!o)return"/* Error: __yo_thread_spawn argument has no type */";let a,s;if(H(o)){let C=o;C.resolvedConcreteType&&(a=C.resolvedConcreteType.id,s=C.resolvedConcreteType)}else Oe(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=se(s,n),f=iC(u,l,c,s,n,((T=e.$)==null?void 0:T.env.modulePath)??""),_=J(i,t,n),p=(E=i.$)!=null&&E.variableName?ot(i.$.variableName,i.$.env):_,d=`_thread_closure_data_${xt((($=e.$)==null?void 0:$.env.modulePath)??"")}`;n.emitter.emitLine(`${t}${c}* ${d} = (${c}*)__yo_malloc(sizeof(${c}));`),n.emitter.emitLine(`${t}*${d} = ${p};`);let v=Ur(s,n);v&&n.emitter.emitLine(`${t}${v}(*${d});`);let y=(k=e.$)==null?void 0:k.variableName;return y?(n.emitter.emitLine(`${t}__yo_thread_t ${y} = __yo_thread_spawn(${f}, ${d});`),y):`__yo_thread_spawn(${f}, ${d})`}function aC(e,t,n){var y,h,g,T,E;let r=(y=e.$)==null?void 0:y.runtimeArgExprsInOrder;if(!r||r.length!==1)return"/* Error: __yo_worker_spawn requires exactly 1 argument */";let i=r[0],o=(h=i.$)==null?void 0:h.type;if(!o)return"/* Error: __yo_worker_spawn argument has no type */";let a,s;if(H(o)){let $=o;$.resolvedConcreteType&&(a=$.resolvedConcreteType.id,s=$.resolvedConcreteType)}else Oe(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=se(s,n),f=iC(u,l,c,s,n,((g=e.$)==null?void 0:g.env.modulePath)??""),_=J(i,t,n),p=(T=i.$)!=null&&T.variableName?ot(i.$.variableName,i.$.env):_,d=`_worker_closure_data_${xt(((E=e.$)==null?void 0:E.env.modulePath)??"")}`;n.emitter.emitLine(`${t}${c}* ${d} = (${c}*)__yo_malloc(sizeof(${c}));`),n.emitter.emitLine(`${t}*${d} = ${p};`);let v=Ur(s,n);return v&&n.emitter.emitLine(`${t}${v}(*${d});`),n.emitter.emitLine(`${t}__yo_worker_spawn(${f}, ${d});`),""}function sC(e,t,n){let r=e.args[0];return r?`__yo_thread_set_maximum_threads(${J(r,t,n)})`:"// Error: __yo_thread_set_maximum_threads requires exactly 1 argument"}function lC(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 ti(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&&yt(i.type))return;let o=`var_${i.id}`,a=Ve(e);n.emitter.emitLine(`${t}sm->${o} = ${a};`)}}function fC(e,t,n){var o,a,s,l,u,c,f,_,p,d,v,y,h,g,T,E,$,k,C,w,I,L,x,V,M,q,P,R,te,j,Y,le,Z,ce,Te,Se,ge,be,De,ze,We,pe,fe,$e,Le,Me,Ze,$t,It,jt,st,Ct,rn,Bt,gt,ut,Nt,Yt,wt,Ft,ee,W,oe,me,de,ye,he,Be,qe,Pe,ie;if(((o=e.$)==null?void 0:o.value)!==void 0&&!Ge(e.$.value))return(a=e.$)!=null&&a.deferredDropExpressions&&wn(e,t,n),Ke(e.$.type)?"":yr(e.$.value,n,e);let r=(s=e.func.$)==null?void 0:s.value,i=((l=e.func.$)==null?void 0:l.type)??(Ie(r)?r.specializedType??r.type:void 0);if(_e(i)){let ae=(u=e.$)==null?void 0:u.runtimeArgExprsInOrder;if(ae){let we=!1;if(S(e.func)&&b(e.func,".",2)){let Ae=e.func.args[0],He=(c=Ae==null?void 0:Ae.$)==null?void 0:c.type;He&&ht(He)&&(we=!0)}let Ne=ae.map((Ae,He)=>{var Qe,Je,lt,re,N,K,G,z,D;if((Qe=Ae.$)!=null&&Qe.variableName&&((Je=Ae.$)!=null&&Je.type)){let ue=n,Fe=ue.currentClosureCaptures&&ue.currentClosureCaptures.includes(Ae.$.variableName)&&Q(Ae)&&Ae.$.env&&ue.currentClosureCaptureFrameLevel!==void 0&&Co(Ae.token.value,Ae.$.env,ue.currentClosureCaptureFrameLevel),nt=J(Ae,t,n),St=!1;if(Q(Ae)&&Ae.$.env&&Ae.$.variableName){let xn=ve(Ae.$.env,Ae.$.variableName);xn.length>0&&xn[xn.length-1].isCompileTimeOnly&&(St=!0)}let At=(ue.inAsyncStateMachine||ue.inEffectStateMachine)&&nt.startsWith("sm->"),$n=!1;if(nt&&nt!==Ae.$.variableName&&!Fe&&!At&&!St){let xn=ot(Ae.$.variableName,Ae.$.env);if(nt!==xn){let Pt=Ae.$.convertedRuntimeType||Ae.$.type,jr=fn(Pt,Ae.$.variableName,n);n.emitter.emitLine(`${t}${jr} = ${nt};`),$n=!0,ti(Ae.$.variableName,t,n)}}let sr=$n?Ae.$.variableName:nt;if((lt=Ae.$)!=null&&lt.deferredDupExpressions&&Ae.$.deferredDupExpressions.length>0){let xn=new Set;(re=Ae.$)!=null&&re.variableName&&xn.add(ot(Ae.$.variableName,Ae.$.env)),nt&&xn.add(nt),Q(Ae)&&xn.add(ot(Ae.token.value,Ae.$.env));let Pt=Ae.$.deferredDupExpressions.find(jr=>{var oo;let Ti=l_(jr);return Ti?xn.has(ot(Ti,(oo=jr.$)==null?void 0:oo.env)):!1});Pt&&(sn(Ae,t,ue),S(Pt)&&((N=Pt.$)!=null&&N.variableName)&&(sr=ot(Pt.$.variableName,Pt.$.env)))}if(we&&He===0){if(S(e.func)&&b(e.func,".",2)){let Pt=e.func.args[0],jr=(K=Pt==null?void 0:Pt.$)==null?void 0:K.type,Ti=e.func.args[1];if(Q(Ti)&&ht(jr)){let oo=Ti.token.value;if(jr.trait.fields.find(G_=>G_.label===oo))return At?nt:Ve(sr,Ae.$.type.isExtern==="c")}}let xn=(G=Ae.$)==null?void 0:G.type;return xn&&et(xn)?At?`${nt}->data`:`${Ve(sr,Ae.$.type.isExtern==="c")}->data`:At?`(${nt}).data`:`(${Ve(sr,Ae.$.type.isExtern==="c")}).data`}else return Fe||At||St?nt:Ve(sr,Ae.$.type.isExtern==="c")}else if(we&&He===0){let ue=J(Ae,t,n);if(S(e.func)&&b(e.func,".",2)){let nt=e.func.args[0],St=(z=nt==null?void 0:nt.$)==null?void 0:z.type,At=e.func.args[1];if(Q(At)&&ht(St)){let $n=At.token.value;if(St.trait.fields.find(xn=>xn.label===$n))return ue}}let Fe=(D=Ae.$)==null?void 0:D.type;return Fe&&et(Fe)?`(${ue})->data`:`(${ue}).data`}else return J(Ae,t,n)}),tt=Ne.join(", ");if(i.isExtern==="yo"&&i.externName){let Ae=i.externName;return Za.includes(Ae)?vu(Ae,Ne,e,n,t):Ae==="__yo_thread_spawn"?oC(e,t,n):Ae==="__yo_worker_spawn"?aC(e,t,n):Ke(i.return.type)?(n.emitter.emitLine(`${t}${Ae}(${tt});`),(f=e.$)!=null&&f.deferredDropExpressions&&wn(e,t,n),""):`${Ae}(${tt})`}{let Ae=n;if((_=Ae.currentEvidenceParams)!=null&&_.size){let He=(p=e.func.token)==null?void 0:p.value,Qe;if(He==="."&&S(e.func)&&b(e.func,".",2)){let Je=e.func.args[1];Je&&Q(Je)&&(He=Je.token.value);let lt=e.func.args[0];if(lt&&Q(lt))Qe=lt.token.value;else if(lt&&S(lt)&&b(lt,".",2)){let re=lt.args[0];re&&Q(re)&&(Qe=re.token.value)}}if(He&&He!=="."){for(let Je of Ae.currentEvidenceParams.values())if(Je.fieldLabel===He||Je.implicitLabel===He||Je.fieldPath[Je.fieldPath.length-1]===He){if(Qe&&Qe!==Je.implicitLabel)continue;return cC(Je.cParamName,i,Ne,ae,e,t,Ae,Je)}}}}if(Ie(r)){let Ae=$o(r);if(Ae)return vu(Ae,Ne,e,n,t);let He=r.specializedType??r.type,Qe=n;if(Qe.currentEvidenceParams&&r.isModuleEffectMember){let lt,re=((d=e.func.$)==null?void 0:d.env)??((v=e.$)==null?void 0:v.env);if(re)for(let N of Qe.currentEvidenceParams.values()){let K=ve(re,N.implicitLabel),G=K[K.length-1],z=(y=G==null?void 0:G.value)==null?void 0:y[0];if(z&&Rt(z)){let D=z,ue=!0;for(let Fe=0;Fe<N.fieldPath.length-1;Fe++){let nt=N.fieldPath[Fe],St=D.type.fields.findIndex(At=>At.label===nt);if(St>=0&&D.fields[St]&&Rt(D.fields[St]))D=D.fields[St];else{ue=!1;break}}if(ue){let Fe=N.fieldPath[N.fieldPath.length-1],nt=D.type.fields.findIndex(St=>St.label===Fe);if(nt>=0){let St=D.fields[nt];if(St&&Ie(St)&&St.funcId===r.funcId){lt=N;break}}}}}if(lt){let N=lt.cParamName;return cC(N,He,Ne,ae,e,t,Qe,lt)}}let Je=(h=n.functions[r.funcId])==null?void 0:h.cName;if(Je){let lt=r.specializedType??r.type,re=Fn(lt);if(re.length===0&&r.specializedType){let G=Fn(r.type);G.length>0&&G.some(z=>z.fieldFunctionType.forallParameters&&z.fieldFunctionType.forallParameters.length>0)&&(re=G)}if(re.length>0){let{args:G,isHandlerInstallation:z}=Um(re,r,e,n);if(G.length>0){let D=tt?`${tt}, ${G.join(", ")}`:G.join(", ");return zm(Je,D,He,e,ae,t,n,z)}}let N=r.isControlFunction||r.isModuleEffectMember||((E=(T=(g=r.body)==null?void 0:g.$)==null?void 0:T.effectAnalysis)==null?void 0:E.hasEffects),K=!1;if(N){if(r.isControlFunction||r.isModuleEffectMember){let G=((k=($=e.func)==null?void 0:$.$)==null?void 0:k.env)??((C=e.$)==null?void 0:C.env);if(G){let z=lu(G,D=>{var ue;return D.isImplicit===!0&&Ie((ue=D.value)==null?void 0:ue[0])&&D.value[0].funcId===r.funcId});z>=0&&z>G.functionDeclarationFrameLevel&&((w=G.frames[z])!=null&&w.isBeginBlockFrame)&&(K=!0)}}else if(r.specializedType){let G=Fn(r.type);if(G.length>0){let z=((L=(I=e.func)==null?void 0:I.$)==null?void 0:L.env)??((x=e.$)==null?void 0:x.env);if(z)for(let D of G){let ue=lu(z,Fe=>Fe.isImplicit===!0&&(Fe.name===D.implicitLabel||Fe.name===D.fieldLabel));if(ue>=0&&ue>z.functionDeclarationFrameLevel&&((V=z.frames[ue])!=null&&V.isBeginBlockFrame)){K=!0;break}}}}}if(Ke(He.return.type))return n.emitter.emitLine(`${t}${Je}(${tt});`),(M=e.$)!=null&&M.deferredDropExpressions&&wn(e,t,n),N&&uC(t,n,K,e),"";{let G=(q=e.$)==null?void 0:q.variableName;if(G){let z=((P=r.specializedType)==null?void 0:P.return.type)??He.return.type,D=(R=e.$)==null?void 0:R.type,ue=D&&yt(D),Fe=z&&yt(z),nt;if(ue&&Fe){let At=r.body;if(At&&b(At,"begin")){let $n=At.args;if($n.length>0){let sr=$n[$n.length-1];Qn(sr)&&(At=sr)}}if(At&&Qn(At)&&((te=At.$)!=null&&te.asyncStateMachineStructName)){let $n=At.$.asyncStateMachineStructName;nt=`${$n}*`,n.tempVarAsyncStructNames||(n.tempVarAsyncStructNames=new Map),n.tempVarAsyncStructNames.set(G,$n)}else D&&H(D)&&D.resolvedConcreteType?nt=se(D,n):nt=se(z,n)}else nt=se(z??D,n);let St=n;return St.declaredTempVars||(St.declaredTempVars=new Set),St.declaredTempVars.has(G)||(St.declaredTempVars.add(G),n.emitter.emitLine(`${t}${nt} ${G} = ${Je}(${tt});`)),ti(G,t,n),(j=e.$)!=null&&j.deferredDropExpressions&&wn(e,t,n),N&&uC(t,n,K,e),G}else return`// Error: Regular function call returns ${se(((Y=r.specializedType)==null?void 0:Y.return.type)??He.return.type,n)} but no temp variable assigned`}}}else{let Ae=n.externFunctions[i.id];if(Ae){let He=Ae.cName;return(le=e.$)!=null&&le.deferredDropExpressions&&wn(e,t,n),`${He}(${tt})`}else{let He=J(e.func,t,n);if(r&&_e(r.type)){let G=Fn(r.type);if(G.length>0){let{args:z,isHandlerInstallation:D}=Um(G,r,e,n);if(z.length>0){let ue=tt?`${tt}, ${z.join(", ")}`:z.join(", ");return zm(He,ue,i,e,ae,t,n,D)}}}let Qe=((Z=e.$)==null?void 0:Z.type)??i.return.type,Je=se(Qe,n),lt=i.parameters.filter(G=>!G.isCompileTimeOnly).map(G=>se(G.type,n)),re=`((${Je} (*)(${lt.join(", ")}))${He})`,N=n,K=He.includes("__capture.")&&!!N.inAsyncStateMachine;if(K&&n.emitter.emitLine(`${t}__yo_effect_escaped = 0;`),Ke(i.return.type)||Ke(Qe)){if(n.emitter.emitLine(`${t}${re}(${tt});`),(ce=e.$)!=null&&ce.deferredDropExpressions&&wn(e,t,n),K){if(n.emitter.emitLine(`${t}if (__yo_effect_escaped) {`),ae){for(let G of ae)if((Te=G.$)!=null&&Te.variableName&&((Se=G.$)!=null&&Se.type)&&mt(G.$.type)){let z=lC(Ve(G.$.variableName),n),D=Po(z,G.$.type,n);D&&(n.emitter.emitLine(`${t} ${D};`),n.emitter.emitLine(`${t} memset(&${z}, 0, sizeof(${z}));`))}}gi({emitter:n.emitter,indent:t+" ",resultCode:void 0,debugLabel:void 0}),n.emitter.emitLine(`${t}}`)}return""}else{let G=(ge=e.$)==null?void 0:ge.variableName;if(G){let z=i.return.type,D=(be=e.$)==null?void 0:be.type,ue=D&&z&&yt(D)&&yt(z)?z:D??z,Fe=n;if(Fe.declaredTempVars||(Fe.declaredTempVars=new Set),Fe.declaredTempVars.has(G)||(Fe.declaredTempVars.add(G),n.emitter.emitLine(`${t}${se(ue,n)} ${G} = ${re}(${tt});`)),ti(G,t,n),(De=e.$)!=null&&De.deferredDropExpressions&&wn(e,t,n),K){if(n.emitter.emitLine(`${t}if (__yo_effect_escaped) {`),ae){for(let nt of ae)if((ze=nt.$)!=null&&ze.variableName&&((We=nt.$)!=null&&We.type)&&mt(nt.$.type)){let St=lC(Ve(nt.$.variableName),n),At=Po(St,nt.$.type,n);At&&(n.emitter.emitLine(`${t} ${At};`),n.emitter.emitLine(`${t} memset(&${St}, 0, sizeof(${St}));`))}}gi({emitter:n.emitter,indent:t+" ",resultCode:void 0,debugLabel:void 0}),n.emitter.emitLine(`${t}}`)}return G}else return`// Error: Function parameter call returns ${se(i.return.type,n)} but no temp variable assigned`}}}}}else if(i&&ur(i)){let ae=i,we=Er(ae),Ne=ht(ae);{let tt=we.isFn.callType,Ae=(pe=e.$)==null?void 0:pe.runtimeArgExprsInOrder;if(Ae){let He=n;for(let N of Ae)if((fe=N.$)!=null&&fe.variableName&&(($e=N.$)!=null&&$e.type)){let K=He.currentClosureCaptures&&He.currentClosureCaptures.includes(N.$.variableName)&&Q(N)&&N.$.env&&He.currentClosureCaptureFrameLevel!==void 0&&Co(N.token.value,N.$.env,He.currentClosureCaptureFrameLevel),G=J(N,t,n),z=!1;if(Q(N)&&N.$.env&&N.$.variableName){let ue=ve(N.$.env,N.$.variableName);ue.length>0&&ue[ue.length-1].isCompileTimeOnly&&(z=!0)}let D=(He.inAsyncStateMachine||He.inEffectStateMachine)&&G.startsWith("sm->");if(G&&G!==N.$.variableName&&!K&&!D&&!z){let ue=N.$.convertedRuntimeType||N.$.type,Fe=fn(ue,N.$.variableName,n);n.emitter.emitLine(`${t}${Fe} = ${G};`),ti(N.$.variableName,t,n)}}let Qe=J(e.func,t,n),Je=Ae.map(N=>{var K,G,z,D;if((K=N.$)!=null&&K.variableName&&((G=N.$)!=null&&G.type)){if(He.currentClosureCaptures&&He.currentClosureCaptures.includes(N.$.variableName)&&Q(N)&&N.$.env&&He.currentClosureCaptureFrameLevel!==void 0&&Co(N.token.value,N.$.env,He.currentClosureCaptureFrameLevel))return J(N,t,n);{let Fe=ot(N.$.variableName,N.$.env),nt=(He.inAsyncStateMachine||He.inEffectStateMachine)&&Fe.startsWith("sm->"),St=Fe;if((z=N.$)!=null&&z.deferredDupExpressions&&N.$.deferredDupExpressions.length>0){sn(N,t,He);let At=N.$.deferredDupExpressions[0];S(At)&&((D=At.$)!=null&&D.variableName)&&(St=ot(At.$.variableName,At.$.env))}return nt?Fe:St}}else return J(N,t,n)}),lt;if(Ne){let N=[`(${Qe}).data`,...Je];lt=`(${Qe}).vtable->call(${N.join(", ")})`}else{let N;if(H(ae)){let G=ae;G.resolvedConcreteType&&(N=G.resolvedConcreteType.id)}let K=N?n.implClosureCallMap.get(N):void 0;if(K){let G=Fn(tt);if(G.length>0){let{args:D,isHandlerInstallation:ue}=Um(G,{},e,He);if(D.length>0){let Fe=[`&(${Qe})`,...Je,...D];return zm(K.functionCName,Fe.join(", "),tt,e,Ae,t,He,ue)}}let z=[`&(${Qe})`,...Je];lt=`${K.functionCName}(${z.join(", ")})`}else{let G=[`(${Qe}).data`,...Je];lt=`(${Qe}).call(${G.join(", ")})`}}let re=tt.return.type;if(Ke(re))return n.emitter.emitLine(`${t}${lt};`),(Le=e.$)!=null&&Le.deferredDropExpressions&&wn(e,t,n),"";{let N=(Me=e.$)==null?void 0:Me.variableName;return N?(n.emitter.emitLine(`${t}${se(re,n)} ${N} = ${lt};`),ti(N,t,n),(Ze=e.$)!=null&&Ze.deferredDropExpressions&&wn(e,t,n),N):`// Error: Closure call returns ${se(re,n)} but no temp variable assigned`}}else return"// Error: No runtime args found for closure call"}}else if(X(r))if(Oe(r.value)){let ae=r.value,we=($t=e.$)==null?void 0:$t.runtimeArgExprsInOrder,Ne=(It=n.types[ae.id])==null?void 0:It.cName,tt=ae.fields.map(He=>He.label),Ae=(jt=e.$)==null?void 0:jt.variableName;if(we&&Ne&&tt.length===we.length){if(ae.isNewtype&&ae.fields.length===1){let He=we[0],Qe=J(He,t,n),Je=Qe;if((st=He.$)!=null&&st.deferredDupExpressions&&He.$.deferredDupExpressions.length>0){let re=n;if((Ct=He.$)!=null&&Ct.variableName&&((rn=He.$)!=null&&rn.type)){let K=ot(He.$.variableName,He.$.env);if(Qe!==K){let G=He.$.type,z=se(G,n);n.emitter.emitLine(`${t}${z} ${K} = ${Qe};`)}}sn(He,t,re);let N=He.$.deferredDupExpressions[0];S(N)&&((Bt=N.$)!=null&&Bt.variableName)&&(Je=ot(N.$.variableName,N.$.env))}let lt=`((${Ne})(${Je}))`;if(Ae&&((gt=e.$)!=null&&gt.type)){let re=fn(e.$.type,Ae,n);return n.emitter.emitLine(`${t}${re} = ${lt};`),ti(Ae,t,n),Ae}else return lt}if(ae.isReferenceSemantics){let He=n,Qe=we.map(re=>{var K,G,z,D;let N=J(re,t,n);if((K=re.$)!=null&&K.deferredDupExpressions&&re.$.deferredDupExpressions.length>0){if((G=re.$)!=null&&G.variableName&&((z=re.$)!=null&&z.type)){let Fe=ot(re.$.variableName,re.$.env);if(N!==Fe){let nt=re.$.type,St=se(nt,n);n.emitter.emitLine(`${t}${St} ${Fe} = ${N};`)}}sn(re,t,He);let ue=re.$.deferredDupExpressions[0];if(S(ue)&&((D=ue.$)!=null&&D.variableName))return ot(ue.$.variableName,ue.$.env)}return N}).join(", "),lt=`${`__yo_new_${Ne}`}(${Qe})`;if(Ae&&((ut=e.$)!=null&&ut.type)){let re=fn(e.$.type,Ae,n);return n.emitter.emitLine(`${t}${re} = ${lt};`),ti(Ae,t,n),Ae}else return lt}else{let He=n,Qe=we.map((lt,re)=>{var z,D,ue,Fe;let N=J(lt,t,n),K=Tt(ae)?`_${re}`:Ve(tt[re],ae.isExtern==="c"),G=N;if((z=lt.$)!=null&&z.deferredDupExpressions&&lt.$.deferredDupExpressions.length>0){if((D=lt.$)!=null&&D.variableName&&((ue=lt.$)!=null&&ue.type)){let St=ot(lt.$.variableName,lt.$.env),At=lt.$.type,$n=se(At,n);N!==St&&n.emitter.emitLine(`${t}${$n} ${St} = ${N};`)}sn(lt,t,He);let nt=lt.$.deferredDupExpressions[0];S(nt)&&((Fe=nt.$)!=null&&Fe.variableName)&&(G=ot(nt.$.variableName,nt.$.env))}return`.${K} = `+G}).join(", "),Je=`(${Ne}){ ${Qe} }`;if(Ae&&((Nt=e.$)!=null&&Nt.type)){let lt=fn(e.$.type,Ae,n);return n.emitter.emitLine(`${t}${lt} = ${Je};`),ti(Ae,t,n),Ae}else return Je}}}else{if(ur(r.value))return"// Error: Closure construction should have been handled by closureFunctionValue check at top of generateFuncCall";if(Ht(r.value)){let ae=(Yt=e.$)==null?void 0:Yt.variableName,we=e.args[0];if(we&&S(we)&&b(we,":",2)){let Ne=we.args[0],tt=we.args[1],Ae=(wt=n.types[r.value.id])==null?void 0:wt.cName;if(Ae&&Q(Ne)&&tt){let He=n,Qe=Ne.token.value,Je=ot(Qe,(Ft=Ne.$)==null?void 0:Ft.env),re=J(tt,t,n);if((ee=tt.$)!=null&&ee.deferredDupExpressions&&tt.$.deferredDupExpressions.length>0){sn(tt,t,He);let K=tt.$.deferredDupExpressions[0];S(K)&&((W=K.$)!=null&&W.variableName)&&(re=ot(K.$.variableName,K.$.env))}let N=`(${Ae}){ .${Je} = ${re} }`;if(ae&&((oe=e.$)!=null&&oe.type)){let K=fn(e.$.type,ae,n);return n.emitter.emitLine(`${t}${K} = ${N};`),ti(ae,t,n),ae}else return N}}}else if(Ye(r.value)){let ae=r.value,we=(me=e.$)==null?void 0:me.runtimeArgExprsInOrder,Ne=(de=n.types[ae.id])==null?void 0:de.cName,tt=(ye=e.$)==null?void 0:ye.variableName;if(ae.selectedVariantName&&we&&Ne){if(fr(ae)){let lt=ae.selectedVariantName,re=ae.variants.find(N=>N.name===lt);if(re){if(!re.fields||re.fields.length===0){let N="NULL";if(tt&&((he=e.$)!=null&&he.type)){let K=fn(e.$.type,tt,n);return n.emitter.emitLine(`${t}${K} = ${N};`),ti(tt,t,n),tt}else return N}else if(re.fields.length===1){let N=J(we[0],t,n);if(tt&&((Be=e.$)!=null&&Be.type)){let K=fn(e.$.type,tt,n);return n.emitter.emitLine(`${t}${K} = ${N};`),ti(tt,t,n),tt}else return N}}}if(ui(ae)){let lt=ae.selectedVariantName,re=or(ae,lt,n);if(tt&&((qe=e.$)!=null&&qe.type)){let N=fn(e.$.type,tt,n);return n.emitter.emitLine(`${t}${N} = ${re};`),ti(tt,t,n),tt}else return re}let Qe=ae.selectedVariantName,Je=ae.variants.find(lt=>lt.name===Qe);if(Je){let lt=((Pe=Je.fields)==null?void 0:Pe.filter(G=>!Ke(G.type)))||[],re=n,N=we.map((G,z)=>{var D,ue,Fe,nt,St;if(Je.fields){let At=Je.fields[z];if(At&&!Ke(At.type)){let $n=J(G,t,n),sr=ot(At.label,(D=G.$)==null?void 0:D.env),xn=$n;if((ue=G.$)!=null&&ue.variableName&&((Fe=G.$)!=null&&Fe.type)){let Pt=re.currentClosureCaptures&&re.currentClosureCaptures.includes(G.$.variableName)&&Q(G)&&G.$.env&&re.currentClosureCaptureFrameLevel!==void 0&&Co(G.token.value,G.$.env,re.currentClosureCaptureFrameLevel),jr=(re.inAsyncStateMachine||re.inEffectStateMachine)&&$n.startsWith("sm->"),Ti=!1;if(Q(G)&&G.$.env&&G.$.variableName){let as=ve(G.$.env,G.$.variableName);as.length>0&&as[as.length-1].isCompileTimeOnly&&(Ti=!0)}let oo=!1;if($n&&$n!==G.$.variableName&&!Pt&&!jr&&!Ti){let as=ot(G.$.variableName,G.$.env);if($n!==as){let G_=fn(G.$.type,G.$.variableName,n);n.emitter.emitLine(`${t}${G_} = ${$n};`),oo=!0,ti(G.$.variableName,t,n)}}oo&&(xn=ot(G.$.variableName,G.$.env))}if((nt=G.$)!=null&&nt.deferredDupExpressions&&G.$.deferredDupExpressions.length>0){sn(G,t,re);let Pt=G.$.deferredDupExpressions[0];S(Pt)&&((St=Pt.$)!=null&&St.variableName)&&(xn=ot(Pt.$.variableName,Pt.$.env))}return`.${sr} = `+xn}return""}else return""}).filter(G=>G).join(", "),K=lt.length>0?`(${Ne}){ .tag = ${or(ae,Qe,n)}, .data = { .${Qe} = { ${N} } } }`:`(${Ne}){ .tag = ${or(ae,Qe,n)} }`;if(tt&&((ie=e.$)!=null&&ie.type)){let G=fn(e.$.type,tt,n);return n.emitter.emitLine(`${t}${G} = ${K};`),ti(tt,t,n),tt}else return K}}}}else if(ft(i)){let ae=e.args[0];if(ae&&S(ae)&&(b(ae,"..")||b(ae,"..="))){let tt=b(ae,"..="),Ae=J(e.func,t,n),He=J(ae.args[0],t,n),Qe=J(ae.args[1],t,n),Je=`Slice_${Ve(se(i.childType,n))}`;return n.sliceStructTypes.has(Je)||n.sliceStructTypes.set(Je,{childType:se(i.childType,n)}),tt?`(${Je}){ .data = &${Ae}.data[${He}], .length = (${Qe}) - (${He}) + 1 }`:`(${Je}){ .data = &${Ae}.data[${He}], .length = (${Qe}) - (${He}) }`}let we=J(e.func,t,n),Ne=J(ae,t,n);return`${we}.data[${Ne}]`}else if(Vt(i)){let ae=e.args[0];if(ae&&S(ae)&&(b(ae,"..")||b(ae,"..="))){let tt=b(ae,"..="),Ae=J(e.func,t,n),He=J(ae.args[0],t,n),Qe=J(ae.args[1],t,n),Je=`Slice_${Ve(se(i.childType,n))}`;return n.sliceStructTypes.has(Je)||n.sliceStructTypes.set(Je,{childType:se(i.childType,n)}),tt?`(${Je}){ .data = &${Ae}.data[${He}], .length = (${Qe}) - (${He}) + 1 }`:`(${Je}){ .data = &${Ae}.data[${He}], .length = (${Qe}) - (${He}) }`}let we=J(e.func,t,n),Ne=J(ae,t,n);return`${we}.data[${Ne}]`}else if(i&&et(i)&&Vt(i.childType)){let ae=J(e.func,t,n),we=J(e.args[0],t,n);return`${ae}.data[${we}]`}}function uC(e,t,n,r){var o,a;let i=t.emitter;if(i.emitLine(`${e}if (__yo_effect_escaped) {`),t.inAsyncStateMachine||(Dr(e+" ",t,r,!1,!0,!1),Bi(e+" ",t,r)),t.inAsyncStateMachine)n&&i.emitLine(`${e} __yo_effect_escaped = 0;`),gi({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&&!Ke(s)){let l=se(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&&!Ke(s)){let l=se(s,t);l!=="void"?i.emitLine(`${e} return (${l}){0};`):i.emitLine(`${e} return;`)}else i.emitLine(`${e} return;`)}i.emitLine(`${e}}`)}function cC(e,t,n,r,i,o,a,s){var p,d,v,y,h,g,T,E,$,k,C,w,I,L;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;_=H(x);let V=_?"void":(p=i.$)!=null&&p.type?se(i.$.type,a):se(u,a),M=[],P=s.fieldFunctionType.parameters.filter(te=>!te.isCompileTimeOnly);for(let te=0;te<P.length;te++){let j=P[te].type,Y=H(j)&&((v=(d=r==null?void 0:r[te])==null?void 0:d.$)!=null&&v.type)?r[te].$.type:j,le=_e(Y)?bo(Y,"(*)",a):se(Y,a);M.push(le)}let R=M.join(", ");f=`((${V} (*)(${R}))${e})`}else f=e;if(Ke(u)){if(c.emitLine(`${o}${f}(${l});`),(y=i.$)!=null&&y.deferredDropExpressions&&wn(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(Dr(o+" ",a,i,!1,!0,!1),Bi(o+" ",a,i)),a.inAsyncStateMachine)gi({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let x=(h=a.currentFunctionType)==null?void 0:h.return.type;if(x&&!Ke(x)){let V=se(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=(g=i.$)==null?void 0:g.variableName;if(x){let V=(T=s==null?void 0:s.fieldFunctionType.forallParameters)!=null&&T.length&&((E=i.$)!=null&&E.type)?i.$.type:u,M=se(V,a);if(M==="void"||Ke(V)){if(c.emitLine(`${o}${f}(${l});`),($=i.$)!=null&&$.deferredDropExpressions&&wn(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(Dr(o+" ",a,i,!1,!0,!1),Bi(o+" ",a,i)),a.inAsyncStateMachine)gi({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let q=(k=a.currentFunctionType)==null?void 0:k.return.type;if(q&&!Ke(q)){let P=se(q,a);P!=="void"?c.emitLine(`${o} return (${P}){0};`):c.emitLine(`${o} return;`)}else c.emitLine(`${o} return;`)}return c.emitLine(`${o}}`),""}if(_){if(c.emitLine(`${o}${M} ${x} = (${M}){0};`),c.emitLine(`${o}${f}(${l});`),(C=i.$)!=null&&C.deferredDropExpressions&&wn(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(Dr(o+" ",a,i,!1,!0,!1),Bi(o+" ",a,i)),a.inAsyncStateMachine)gi({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let q=(w=a.currentFunctionType)==null?void 0:w.return.type;if(q&&!Ke(q)){let P=se(q,a);P!=="void"?c.emitLine(`${o} return (${P}){0};`):c.emitLine(`${o} return;`)}else c.emitLine(`${o} return;`)}return c.emitLine(`${o}}`),ti(x,o,a),x}if(c.emitLine(`${o}${M} ${x} = ${f}(${l});`),(I=i.$)!=null&&I.deferredDropExpressions&&wn(i,o,a),c.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(Dr(o+" ",a,i,!1,!0,!1),Bi(o+" ",a,i)),a.inAsyncStateMachine)gi({emitter:c,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let q=(L=a.currentFunctionType)==null?void 0:L.return.type;if(q&&!Ke(q)){let P=se(q,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`${f}(${l})`}}function Um(e,t,n,r){var s,l,u,c,f,_,p,d,v,y,h,g,T,E,$,k,C;let i=[],o=(l=(s=t.body)==null?void 0:s.$)==null?void 0:l.effectAnalysis,a=!1;for(let w of e){let I=`${w.implicitLabel}.${w.fieldLabel}`,L=!1;if(r.currentEvidenceParams){let x=r.currentEvidenceParams.get(I);x&&(i.push(x.cParamName),L=!0)}if(!L){if(o){if(o.effectHandlerInfos)for(let x of o.effectHandlerInfos){if(x.effectParameterName!==w.fieldLabel&&x.effectParameterName!==w.implicitLabel)continue;let V=x.handlerValue;if(V&&Ie(V)){if((u=V.specializedFunctionCaches)!=null&&u.length){let q=V.specializedFunctionCaches[0].specializedFunction,P=(c=r.functions[q.funcId])==null?void 0:c.cName;if(P){i.push(`(void*)${P}`),L=!0,a=!0;break}}let M=(f=r.functions[V.funcId])==null?void 0:f.cName;if(M){i.push(M),L=!0,a=!0;break}}}if(!L&&o.handlerValue&&e.length===1){let x=o.handlerValue;if(x&&Ie(x)){if((_=x.specializedFunctionCaches)!=null&&_.length){let V=x.specializedFunctionCaches[0].specializedFunction,M=(p=r.functions[V.funcId])==null?void 0:p.cName;M&&(i.push(`(void*)${M}`),L=!0,a=!0)}if(!L){let V=(d=r.functions[x.funcId])==null?void 0:d.cName;V&&(i.push(V),L=!0,a=!0)}}}}if(!L){let x=((v=n.func.$)==null?void 0:v.env)??((y=n.$)==null?void 0:y.env);if(x){let V=ve(x,w.implicitLabel),M=Pr(x,j=>j.isImplicit===!0&&_e(j.type)&&_e(w.fieldFunctionType)&&j.type===w.fieldFunctionType),q=V[V.length-1],P=M[M.length-1],R=P&&P!==q?P:q??P,te=(h=R==null?void 0:R.value)==null?void 0:h[0];if(te&&Rt(te)){let j=te,Y=!0;for(let le=0;le<w.fieldPath.length-1;le++){let Z=w.fieldPath[le],ce=j.type.fields.findIndex(Te=>Te.label===Z);if(ce>=0&&j.fields[ce]&&Rt(j.fields[ce]))j=j.fields[ce];else{Y=!1;break}}if(Y){let le=w.fieldPath[w.fieldPath.length-1],Z=j.type.fields.findIndex(ce=>ce.label===le);if(Z>=0){let ce=j.fields[Z];if(ce&&Ie(ce)){if(((g=ce.specializedFunctionCaches)==null?void 0:g.length)>0){let Te=ce.specializedFunctionCaches[0].specializedFunction,Se=(T=r.functions[Te.funcId])==null?void 0:T.cName;Se&&(i.push(`(void*)${Se}`),L=!0)}if(!L){let Te=(E=r.functions[ce.funcId])==null?void 0:E.cName;Te&&(i.push(Te),L=!0)}}}}}else if(te&&Ie(te)){if(($=te.specializedFunctionCaches)!=null&&$.length){let j=te.specializedFunctionCaches[0].specializedFunction,Y=(k=r.functions[j.funcId])==null?void 0:k.cName;Y&&(i.push(`(void*)${Y}`),L=!0)}if(!L){let j=(C=r.functions[te.funcId])==null?void 0:C.cName;j&&(i.push(j),L=!0)}}L&&(a=!0)}}if(!L&&r.stateMachineVariables){let x=w.fieldPath[w.fieldPath.length-1];for(let[,V]of r.stateMachineVariables)if(V.name===x&&V.kind==="outer"){i.push(`sm->__capture.${x}`),L=!0;break}}if(!L)break}}return{args:i,isHandlerInstallation:a}}function zm(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;`),Ke(u)){if(l.emitLine(`${o}${e}(${t});`),(c=r.$)!=null&&c.deferredDropExpressions&&wn(r,o,a),l.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(Dr(o+" ",a,r,!1,!0,!1),Bi(o+" ",a,r)),a.inAsyncStateMachine)gi({emitter:l,indent:o+" ",resultCode:void 0,debugLabel:void 0});else{let v=(f=a.currentFunctionType)==null?void 0:f.return.type;if(s&&l.emitLine(`${o} __yo_effect_escaped = 0;`),v&&!Ke(v))if(s){let y=se(v,a);y!=="void"?(l.emitLine(`${o} ${y} _esc_result;`),l.emitLine(`${o} memcpy(&_esc_result, __yo_effect_escape_value, sizeof(${y}));`),l.emitLine(`${o} return _esc_result;`)):l.emitLine(`${o} return;`)}else{let y=se(v,a);y!=="void"?l.emitLine(`${o} return (${y}){0};`):l.emitLine(`${o} return;`)}else l.emitLine(`${o} return;`)}return l.emitLine(`${o}}`),""}else{let v=(_=r.$)==null?void 0:_.variableName;if(v){let y=se(u,a);if(l.emitLine(`${o}${y} ${v} = ${e}(${t});`),ti(v,o,a),(p=r.$)!=null&&p.deferredDropExpressions&&wn(r,o,a),l.emitLine(`${o}if (__yo_effect_escaped) {`),a.inAsyncStateMachine||(Dr(o+" ",a,r,!1,!0,!1),Bi(o+" ",a,r)),a.inAsyncStateMachine)gi({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&&!Ke(h)){let g=se(h,a);l.emitLine(`${o} ${g} _esc_result;`),l.emitLine(`${o} memcpy(&_esc_result, __yo_effect_escape_value, sizeof(${g}));`),l.emitLine(`${o} __yo_effect_escaped = 0;`),l.emitLine(`${o} return _esc_result;`)}else if(h&&!Ke(h)){let g=se(h,a);g!=="void"?l.emitLine(`${o} return (${g}){0};`):l.emitLine(`${o} return;`)}else s&&l.emitLine(`${o} __yo_effect_escaped = 0;`),l.emitLine(`${o} return;`)}return l.emitLine(`${o}}`),v}else return`${e}(${t})`}}function _C(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&&pt(u.$.value)){let c=u.$.value.value;r.emitLine(`${t}fprintf(stderr, "%s\\n", ${JSON.stringify(c)});`),r.emitLine(`${t}abort();`)}else{let c=J(u,t,n),f=(l=u.$)==null?void 0:l.type;f&&Oe(f)&&Qr(f)&&f.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`(*((${se(i,n)}*)NULL))`}var jA={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"}},HA={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"},YA={e:"k",x:"w",l:"b",h:"h",w:"w"};function KA(e,t){if(!e)return"r";if(e.startsWith("raw:"))return e.slice(4);let n=HA[e];if(n)return n;let r=jA[e];return r?r[t]??r.x86_64??"r":e}function XA(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?YA[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 QA(e,t,n,r){var h,g,T,E,$;let i=e.args,o=n.targetInfo.arch;if(r==="const_val"){let k,C=0;i.length===2&&((h=i[0].$)!=null&&h.value)&&pt(i[0].$.value)&&(k=i[0].$.value.value,C=1);let w=J(i[C],t,n);return{kind:"const_val",name:k,constraint:"",cExpr:w,cType:"",isDiscarded:!1,isVariableTarget:!1}}if(r==="sym"){let k,C=0;i.length===2&&((g=i[0].$)!=null&&g.value)&&pt(i[0].$.value)&&(k=i[0].$.value.value,C=1);let w=J(i[C],t,n);return{kind:"sym",name:k,constraint:"i",cExpr:w,cType:"",isDiscarded:!1,isVariableTarget:!1}}let a,s=0;if(i.length>=2){let k=i[0];(T=k.$)!=null&&T.value&&pt(k.$.value)&&!(k.tag==="Atom"&&pC(k.token.value))&&(a=k.$.value.value,s=1)}let l=s<i.length-1,u,c;l?(u=JA(i[s],t,n),c=s+1):(a!==void 0&&(u=a),c=s);let f=KA(u,o),_=i[c];if(_.tag==="Atom"&&_.token.value==="_")return{kind:r,name:a,constraint:f,cExpr:"",cType:"int32_t",isDiscarded:!0,isVariableTarget:!1};if((E=_.$)!=null&&E.value&&X(_.$.value)){let k=_.$.value.value,C=se(k,n);return{kind:r,name:a,constraint:f,cExpr:"",cType:C,isDiscarded:!1,isVariableTarget:!1}}let p=J(_,t,n),d=se(($=_.$)==null?void 0:$.type,n),y=(r==="out"||r==="lateout")&&_.tag==="Atom";return{kind:r,name:a,constraint:f,cExpr:p,cType:d,isDiscarded:!1,isVariableTarget:y}}function pC(e){return["reg","reg_byte","reg_abcd","xmm_reg","ymm_reg","imm","mem"].includes(e)}function JA(e,t,n){var r,i;if(e.tag==="Atom"&&pC(e.token.value))return e.token.value;if((r=e.$)!=null&&r.value&&pt(e.$.value))return e.$.value.value;if(b(e,"raw",1)){let o=e;if((i=o.args[0].$)!=null&&i.value&&pt(o.args[0].$.value))return`raw:${o.args[0].$.value.value}`}return"r"}function ZA(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&&pt(o.$.value)?n.push(o.$.value.value):o.tag==="Atom"&&n.push(o.token.value);return n}function ex(e){let t={isVolatile:!0,intelSyntax:!1,noreturn:!1,pure:!1};for(let n of e.args)if(n.tag==="Atom")switch(n.token.value){case"pure":t.pure=!0,t.isVolatile=!1;break;case"intel_syntax":t.intelSyntax=!0;break;case"noreturn":t.noreturn=!0;break;case"volatile":t.isVolatile=!0;break}return t}var Bm=0;function dC(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(Ui(n.targetInfo))return r.emitLine(`${t}/* Error: inline assembly is not supported on WebAssembly */`),r.emitLine(`${t}abort();`),`(*((${se(i,n)}*)NULL))`;let o=[],a=0;for(;a<e.args.length;){let M=e.args[a];if(S(M))break;if((V=M.$)!=null&&V.value&&pt(M.$.value))o.push(M.$.value.value),a++;else break}let s=o.join(`
11440
+ `),l=[],u=[],c={isVolatile:!0,intelSyntax:!1,noreturn:!1,pure:!1};for(;a<e.args.length;){let M=e.args[a];if(!S(M)){a++;continue}let q=M.func.tag==="Atom"?M.func.token.value:void 0;if(!q){a++;continue}["in","out","inout","lateout","inlateout","const_val","sym"].includes(q)?l.push(QA(M,t,n,q)):q==="clobber"||q==="clobber_abi"?u.push(...ZA(M,n)):q==="asm_options"&&(c=ex(M)),a++}let f=new Map;for(let M=0;M<l.length;M++)l[M].name&&f.set(l[M].name,M);let _=s;for(let M=0;M<l.length;M++){let q=l[M];q.kind==="const_val"&&(q.name&&(_=_.replace(new RegExp(`\\{${q.name}(?::[^}]*)?\\}`,"g"),q.cExpr)),_=_.replace(new RegExp(`\\{${M}(?::[^}]*)?\\}`,"g"),q.cExpr))}let p=XA(_,f),d=[],v=[],y=[];for(let M=0;M<l.length;M++){let q=l[M];if(q.isDiscarded){let P=`__asm_discard_${Bm++}`;y.push({varName:P,cType:q.cType,operandIdx:M}),r.emitLine(`${t}${q.cType} ${P};`)}else if(q.kind==="out"||q.kind==="lateout"){if(!q.isVariableTarget){if(q.cType){let P=`__asm_out_${Bm++}`;d.push({varName:P,cType:q.cType,operandIdx:M}),r.emitLine(`${t}${q.cType} ${P};`)}}}else if(q.kind==="inout"||q.kind==="inlateout"){let P=`__asm_inout_${Bm++}`;v.push({varName:P,cType:q.cType,initExpr:q.cExpr,operandIdx:M}),r.emitLine(`${t}${q.cType} ${P} = ${q.cExpr};`)}}let h=c.isVolatile?" __volatile__":"",g=p;c.intelSyntax&&(n.needsIntelAsmSyntax=!0);let T=JSON.stringify(g),E=[];for(let M=0;M<l.length;M++){let q=l[M];if(q.kind==="in"||q.kind==="const_val"||q.kind==="sym")continue;let P;q.kind==="out"||q.kind==="lateout"?P=q.kind==="lateout"?"=&":"=":P=q.kind==="inlateout"?"+&":"+";let R=`${P}${q.constraint}`,te=q.name?`[${q.name}] `:"",j;q.isDiscarded?j=y.find(le=>le.operandIdx===M).varName:q.isVariableTarget?j=q.cExpr:q.kind==="out"||q.kind==="lateout"?j=d.find(le=>le.operandIdx===M).varName:j=v.find(le=>le.operandIdx===M).varName,E.push(`${te}"${R}" (${j})`)}let $=[];for(let M=0;M<l.length;M++){let q=l[M];if(q.kind!=="in"&&q.kind!=="sym")continue;let P=q.constraint,R=q.name?`[${q.name}] `:"";$.push(`${R}"${P}" (${q.cExpr})`)}let k=u.map(M=>`"${M}"`),C=E.join(", "),w=$.join(", "),I=k.join(", ");if(r.emitLine(`${t}__asm__${h} (`),r.emitLine(`${t} ${T}`),r.emitLine(`${t} : ${C}`),r.emitLine(`${t} : ${w}`),r.emitLine(`${t} : ${I}`),r.emitLine(`${t});`),c.noreturn)return r.emitLine(`${t}__builtin_unreachable();`),`(*((${se(i,n)}*)NULL))`;if(Ke(i))return"";let L=[];for(let M=0;M<l.length;M++){let q=l[M];if(!(q.isDiscarded||q.isVariableTarget)&&!(q.kind==="in"||q.kind==="const_val"||q.kind==="sym"))if(q.kind==="out"||q.kind==="lateout"){let P=d.find(R=>R.operandIdx===M);P&&L.push(P.varName)}else{let P=v.find(R=>R.operandIdx===M);P&&L.push(P.varName)}}if(L.length===1)return L[0];if(L.length>1){let M=se(i,n),q=L.map((P,R)=>`._${R} = ${P}`).join(", ");return`((${M}){ ${q} })`}return""}function mC(e,t,n){var i;if(Ui(n.targetInfo))return"/* global_asm skipped: not supported on this target */";let r=e.args[0];if((i=r.$)!=null&&i.value&&pt(r.$.value)){let o=r.$.value.value;n.emitter.emitDeclarationLine(`__asm__(${JSON.stringify(o)});`)}return""}function yC(e,t,n){var l,u,c,f,_,p,d,v,y,h;if(e.args.length!==2)return"/* ERROR: field access requires exactly 2 arguments */";let r=e.args[0],i=e.args[1];if(!r||!i)return"/* ERROR: invalid field access arguments */";let o=J(r,t,n),a=(l=r.$)==null?void 0:l.type,s=(u=r.$)==null?void 0:u.value;if(Q(i)){let g=i.token.value,T=n;if(T.currentEvidenceParams&&Q(r)){let $=`${r.token.value}.${g}`,k=T.currentEvidenceParams.get($);if(k)return k.cParamName}if((c=e.$)!=null&&c.value&&Ie(e.$.value)){let E=e.$.value;return((f=n.functions[E.funcId])==null?void 0:f.cName)||E.funcId}if(!((_=e.$)!=null&&_.value)&&(F.___dispose.includes(g)||F.___drop.includes(g)||F.___dup.includes(g))&&a){let E=null;if((Oe(a)||Ye(a))&&(E=a.trait),E){let $=E.fields.find(k=>k.label===g&&k.assignedValue&&Ie(k.assignedValue));if($&&Ie($.assignedValue)){let k=$.assignedValue;return((p=n.functions[k.funcId])==null?void 0:p.cName)||k.funcId}else return`/* ERROR: Rc method ${g} not found in type module */`}else return`/* ERROR: No module found for Rc method ${g} */`}if(rt(a)||Rt(s)){let E=(d=e.$)==null?void 0:d.value;if(E){if(Ge(E)){if(E.variableName)return ot(E.variableName,(v=e.$)==null?void 0:v.env);if((T.inAsyncStateMachine||T.inEffectStateMachine)&&T.stateMachineVariables){for(let[,$]of T.stateMachineVariables)if($.name===g&&$.kind==="outer")return`sm->__capture.${g}`}}else if(!Rt(E))return yr(E,n,e)}return ot(g,(y=e.$)==null?void 0:y.env)}if(Qr(a)&&a.fields.length===1){let E=a.fields[0];if(E&&E.label===g)return o}if(Ye(a)){let E=a;if(fr(E))return o;for(let k of E.variants)if(k.fields){for(let C of k.fields)if(C.label===g){let w=k.name;return`${o}.data.${w}.${Ve(g)}`}}return`/* ERROR: field ${g} not found in enum ${E.typeName} */`}else if(X(s)&&Ye(s.value)){let E=s.value,$=E.variants.find(C=>C.name===g),k=(h=n.types[E.id])==null?void 0:h.cName;if($&&!$.fields&&k){let C=or(E,$.name,n);return`(${k}){ .tag = ${C}, .data = { } }`}}else if(et(a)){if(g==="*")return`(*${o})`;if(Vt(a.childType))return`${o}->${Ve(g)}`;{let E=0,$=a;for(;et($);)E++,$=$.childType;if(E>0&&Oe($)&&$.isReferenceSemantics&&E++,Qr($)&&$.fields.length===1){let k=$.fields[0];if(k&&k.label===g)return E===1?`(*${o})`:`${"*".repeat(E)}(${o})`}return E>0?E===1?`${o}->${Ve(g)}`:`${`(${"*".repeat(E-1)}${o})`}->${Ve(g)}`:`${o}.${Ve(g)}`}}else if(Tt(a)){if(g.match(/^\d+$/))return`${o}._${g}`;{let E=a.fields.findIndex($=>$.label===g);return`${o}._${E}`}}else return ht(a)?`${o}.vtable->${Ve(g)}`:dn(a)?`${o}->${Ve(g)}`:`${o}.${Ve(g)}`}return"/* ERROR: field name must be an identifier */"}var tx=0;function gC(e,t,n){var l,u,c,f,_,p,d,v,y,h;if(!((l=e.$)==null?void 0:l.type))return`// Error: No type information for pointer/reference expression ${A(e)}
11441
+ `;let i=e.args[0];if(S(i)){let g=(u=i.func.$)==null?void 0:u.type;if(g&&ft(g)){let T=i.args[0];if(T&&S(T)&&(b(T,"..")||b(T,"..="))){let E=b(T,"..="),$=J(i.func,t,n),k=J(T.args[0],t,n),C=J(T.args[1],t,n),w=`Slice_${Ve(se(g.childType,n))}`;return n.sliceStructTypes.has(w)||n.sliceStructTypes.set(w,{childType:se(g.childType,n)}),E?`(${w}){ .data = &${$}.data[${k}], .length = (${C}) - (${k}) + 1 }`:`(${w}){ .data = &${$}.data[${k}], .length = (${C}) - (${k}) }`}}else if(g&&(Vt(g)||et(g)&&Vt(g.childType))){let T=Vt(g)?g:g.childType,E=i.args[0];if(E&&S(E)&&(b(E,"..")||b(E,"..="))){let $=b(E,"..="),k=J(i.func,t,n),C=J(E.args[0],t,n),w=J(E.args[1],t,n),I=`Slice_${Ve(se(T.childType,n))}`;return n.sliceStructTypes.has(I)||n.sliceStructTypes.set(I,{childType:se(T.childType,n)}),$?`(${I}){ .data = &${k}.data[${C}], .length = (${w}) - (${C}) + 1 }`:`(${I}){ .data = &${k}.data[${C}], .length = (${w}) - (${C}) }`}}}let o=(c=i.$)==null?void 0:c.value,a=(f=i.$)==null?void 0:f.type;if(o!==void 0&&a){if(Mt(o)||Ut(o)){let g=J(i,t,n);return`(&(${se(a,n)}){${g}})`}if(pt(o)&&((_=i.$)!=null&&_.convertedRuntimeType))return`(&${J(i,t,n)})`}if((p=e.$)!=null&&p.isIndexTraitAddressOf&&S(i)&&((d=i.$)!=null&&d.indexMethodValue)){let g=i.$.indexMethodValue;if(Ie(g)){let T=i.func,E=J(T,t,n);if(S(T)&&!Q(T)&&!b(T,".")&&((v=T.$)!=null&&v.type)&&!(((y=T.$)==null?void 0:y.variableName)&&E===ot(T.$.variableName,T.$.env))){let L=se(T.$.type,n),x=`__yo_ptr_idx_tmp_${tx++}`;n.emitter.emitLine(`${t}${L} ${x} = ${E};`),E=x}let $=i.args[0],k=$?J($,t,n):"0",C=$o(g);if(C&&(F.__yo_array_index.includes(C)||F.__yo_slice_index.includes(C)))return`(&((&${E})->data[${k}]))`;let w=(h=n.functions[g.funcId])==null?void 0:h.cName;if(w)return`${w}(&${E}, ${k})`}}return`(&${J(i,t,n)})`}function hC(e,t,n){let r=e.args[0];return r?`__yo_decr_rc(${J(r,t,n)})`:"// Error: __yo_decr_rc requires exactly 1 argument"}function vC(e,t,n){let r=e.args[0];return r?`__yo_incr_rc(${J(r,t,n)})`:"// Error: __yo_incr_rc requires exactly 1 argument"}function TC(e,t,n){let r=e.args[0];return r?J(r,t,n):"// Error: __yo_rc_own requires exactly 1 argument"}function EC(e,t,n){var f;let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_drop_array_element requires exactly 2 arguments";let o=J(r,t,n),a=J(i,t,n),s=(f=r.$)==null?void 0:f.type;if(!s||!ft(s))return"// Error: __yo_drop_array_element requires an array type";let l=s.childType,u=H(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(ft(u)){let _=u.length;if(!Mt(_))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} < ${_.value}; ${p}++) {`);let v=`(${o}).data[${a}].data[${p}]`;d.emitLine(" { // drop nested array element");let y=Po(v,u.childType,n);return y&&d.emitLine(` ${y};`),d.emitLine(" }"),d.emitLine("}"),""}let c=zi(u,n);return c?`${c}((${o}).data[${a}])`:"// No drop function for array element type"}function $C(e,t,n){var f;let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_dup_array_element requires exactly 2 arguments";let o=J(r,t,n),a=J(i,t,n),s=(f=r.$)==null?void 0:f.type;if(!s||!ft(s))return"// Error: __yo_dup_array_element requires an array type";let l=s.childType,u=H(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(ft(u)){let _=u.length;if(!Mt(_))return"// Error: array element has non-constant length";let p=`temp_array_${Math.floor(Math.random()*1e6)}`,d=`i_${Math.floor(Math.random()*1e6)}`,v=se(u,n),y=n.emitter;y.emitLine(`${v} ${p} = (${o}).data[${a}];`),y.emitLine(`for (size_t ${d} = 0; ${d} < ${_.value}; ${d}++) {`);let h=rl(`${p}.data[${d}]`,u.childType,n);return y.emitLine(` ${p}.data[${d}] = ${h};`),y.emitLine("}"),p}let c=Ur(u,n);return c?`${c}((${o}).data[${a}])`:"// No dup function for array element type"}function bC(e,t,n){var _,p;let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_drop_tuple_element requires exactly 2 arguments";let o=J(r,t,n);J(i,t,n);let a=(_=r.$)==null?void 0:_.type;if(!a||!Tt(a))return"// Error: __yo_drop_tuple_element requires a tuple type";let s=(p=i.$)==null?void 0:p.value;if(!Mt(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=H(u)&&u.resolvedConcreteType?u.resolvedConcreteType:u;if(Tt(c)){let d=`(${o})._${l}`;return Po(d,c,n)}let f=zi(c,n);return f?`${f}((${o})._${l})`:"// No drop function for tuple element type"}function CC(e,t,n){var _,p;let r=e.args[0],i=e.args[1];if(!r||!i)return"// Error: __yo_dup_tuple_element requires exactly 2 arguments";let o=J(r,t,n);J(i,t,n);let a=(_=r.$)==null?void 0:_.type;if(!a||!Tt(a))return"// Error: __yo_dup_tuple_element requires a tuple type";let s=(p=i.$)==null?void 0:p.value;if(!Mt(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=H(u)&&u.resolvedConcreteType?u.resolvedConcreteType:u;if(Tt(c)){let d=`(${o})._${l}`;return rl(d,c,n)}let f=Ur(c,n);return f?`${f}((${o})._${l})`:"// No dup function for tuple element type"}function kC(e,t,n){var a,s;let r=e.args[0];if(!r)return"// Error: ___dup requires exactly 1 argument";let i=J(r,t,n),o=((a=r.$)==null?void 0:a.type)??((s=e.$)==null?void 0:s.type);return o?rl(i,o,n):i}function wC(e,t,n){var a,s;let r=e.args[0];if(!r)return"// Error: ___drop requires exactly 1 argument";let i=J(r,t,n),o=((a=r.$)==null?void 0:a.type)??((s=e.$)==null?void 0:s.type);return o?Po(i,o,n):""}function FC(e,t,n){let r=e.args[0];return r?`__yo_decr_rc((void*)(${J(r,t,n)}).data)`:"// Error: __yo_dyn_drop requires exactly 1 argument"}function LC(e,t,n){let r=e.args[0];return r?`__yo_incr_rc((void*)(${J(r,t,n)}).data)`:"// Error: __yo_dyn_dup requires exactly 1 argument"}function IC(e,t,n){let r=e.args[0];return r?`__yo_incr_rc_atomic(${J(r,t,n)})`:"// Error: __yo_incr_rc_atomic requires exactly 1 argument"}function SC(e,t,n){let r=e.args[0];return r?`__yo_decr_rc_atomic(${J(r,t,n)})`:"// Error: __yo_decr_rc_atomic requires exactly 1 argument"}function AC(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&&H(i)&&yt(i)){let l=J(r,t,n);return`if (${l} != NULL) { __yo_decr_rc((void*)${l}); }`}if(i&&H(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&&Ie(u.assignedValue)){let c=(s=n.functions[u.assignedValue.funcId])==null?void 0:s.cName;if(c){let f=J(r,t,n);return`${c}(${f})`}}}return"/* __yo_sometype_drop: no-op */"}function xC(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&&H(i)&&yt(i))return`__yo_incr_rc((void*)${J(r,t,n)})`;if(i&&H(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&&Ie(u.assignedValue)){let c=(s=n.functions[u.assignedValue.funcId])==null?void 0:s.cName;if(c){let f=J(r,t,n);return`${c}(${f})`}}}return"/* __yo_sometype_dup: no-op */"}function NC(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=J(r,t,n);return Ar(i)?uo(i)?`atomic_load_explicit((_Atomic size_t*)&((__yo_ref_header_t*)(${o}))->ref_count, memory_order_acquire)`:`((__yo_ref_header_t*)(${o}))->ref_count`:"1"}function DC(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=J(s,t,n);if((u=s.$)!=null&&u.deferredDupExpressions&&s.$.deferredDupExpressions.length>0){sn(s,t,o);let f=s.$.deferredDupExpressions[0];if(S(f)&&((c=f.$)!=null&&c.variableName))return ot(f.$.variableName,f.$.env)}return l}).join(", ");return`${n.currentFunctionName}(${a})`}else return`// Error: No arguments for recur call ${A(e)}
11442
+ `}function VC(e,t,n){let r=e.args[0];return`sizeof(${J(r,t,n)})`}function MC(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 v=n,y=r.map((h,g)=>{var $,k;let E=J(h,t,n);if(($=h.$)!=null&&$.deferredDupExpressions&&h.$.deferredDupExpressions.length>0){sn(h,t,v);let C=h.$.deferredDupExpressions[0];S(C)&&((k=C.$)!=null&&k.variableName)&&(E=ot(C.$.variableName,C.$.env))}return`._${g} = ${E}`}).join(", ");if(o&&((f=e.$)!=null&&f.type)){let h=`(${i}){ ${y} }`,g=fn(e.$.type,o,n);return n.emitter.emitLine(`${t}${g} = ${h};`),o}else return`(${i}){ ${y} }`}else{if(e.args.length===0)return"";{let v=r??e.args;if(!i)return`/* Error: tuple type not found - typeId: ${((p=(_=e.$)==null?void 0:_.type)==null?void 0:p.id)??"none"} */`;let y=v.map((h,g)=>{let T=J(h,t,n);return`._${g} = ${T}`}).join(", ");if(o&&((d=e.$)!=null&&d.type)){let h=`(${i}){ ${y} }`,g=fn(e.$.type,o,n);return n.emitter.emitLine(`${t}${g} = ${h};`),o}else return`(${i}){ ${y} }`}}}function RC(e,t,n){var u,c;let i=(u=e.args[0].$)==null?void 0:u.value;if(!i||!X(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)||se(o,n),l=`__yo_typeid_${Ve(s)}`;return n.typeIdStatics||(n.typeIdStatics=new Map),n.typeIdStatics.has(a)||(n.typeIdStatics.set(a,l),n.emitter.emitDeclarationLine(`static const char ${l} = 0;`)),n.cIncludes.add("<stdint.h>"),`(uintptr_t)&${l}`}function nx(e,t){if(S(e)&&b(e,B.begin)){let n=[];for(let r of e.args)if(S(r)&&b(r,"=",2)){let i=r.args[0],o=r.args[1],a=J(i,"",t),s=J(o,"",t);n.push(`${a} = ${s}`)}return n.join(", ")}else if(S(e)&&b(e,"=",2)){let n=e.args[0],r=e.args[1],i=J(n,"",t),o=J(r,"",t);return`${i} = ${o}`}return J(e,"",t)}function qm(e,t,n){var r,i,o,a;if(S(e)&&b(e,B.begin)){let s=n,l=s.pendingDeferredDrops,u=((r=e.$)==null?void 0:r.deferredDropExpressions)??[],c=new Map;for(let d of u){let v=ei(d);v&&c.set(v,d)}s.pendingDeferredDrops=[...l??[]];let f=s.consumedVarPendingDrops,_=((i=e.$)==null?void 0:i.consumedVariableDropExpressions)??[];s.consumedVarPendingDrops=[..._,...f??[]];let p=new Set;for(let d of e.args){let v=J(d,t,n);if(v&&n.emitter.emitLine(`${t}${v};`),(o=d.$)!=null&&o.env&&c.size>p.size)for(let y of d.$.env.frames)for(let h of y.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 v=J(d,t,n);v&&n.emitter.emitLine(`${t}${v};`)}s.pendingDeferredDrops=l,s.consumedVarPendingDrops=f}else{let s=J(e,t,n);s&&n.emitter.emitLine(`${t}${s};`)}}function OC(e,t,n){var i,o,a;if((i=e.$)!=null&&i.comptimeUnrolledBodies){for(let s of e.$.comptimeUnrolledBodies)qm(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 f=n,_=f.loopBodyDropsBaselineCount;f.loopBodyDropsBaselineCount=((o=f.pendingDeferredDrops)==null?void 0:o.length)??0,n.emitter.emitLine(`${t}while (true) {`);let p=J(s,t+" ",n);return n.emitter.emitLine(`${t} if (!(${p})) {`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t} }`),qm(l,t+" ",n),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}${c}:;`),f.loopBodyDropsBaselineCount=_,n.currentLoopLabel=u,""}else if(r.length===3){let s=r[0],l=r[1],u=r[2],c=n.currentLoopLabel,f=n.currentContinueLabel,_=`loop_${Math.random().toString(36).substr(2,9)}`,p=`continue_${Math.random().toString(36).substr(2,9)}`;n.currentLoopLabel=_,n.currentContinueLabel=p;let d=n,v=d.loopBodyDropsBaselineCount;d.loopBodyDropsBaselineCount=((a=d.pendingDeferredDrops)==null?void 0:a.length)??0,n.emitter.emitLine(`${t}while (true) {`);let y=J(s,t+" ",n);n.emitter.emitLine(`${t} if (!(${y})) {`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t} }`),qm(u,t+" ",n),n.emitter.emitLine(`${t}${p}:;`);let h=nx(l,n);return n.emitter.emitLine(`${t} ${h};`),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}${_}:;`),d.loopBodyDropsBaselineCount=v,n.currentLoopLabel=c,n.currentContinueLabel=f,""}else return n.emitter.emitLine(`${t}/* Error: while loop expects 2 or 3 arguments, got ${r.length} */`),""}var rx=0;function ix(e){let t=[];for(let n of e)if(n.isEffectRowSpread){let r=n.type;H(r)&&r.resolvedConcreteType&&(r=r.resolvedConcreteType),ln(r)&&t.push(...r.implicitParameters)}else t.push(n);return t}function ox(e,t,n){var c,f,_,p,d,v,y,h;let r=(c=e.$)==null?void 0:c.indexMethodValue;if(!r||!Ie(r))return"/* Error: Index trait method value missing */";let i=e.func,o=J(i,t,n);if(S(i)&&!Q(i)&&!b(i,".")&&((f=i.$)!=null&&f.type)&&!(((_=i.$)==null?void 0:_.variableName)&&o===ot(i.$.variableName,i.$.env))){let T=se(i.$.type,n),E=`__yo_idx_tmp_${rx++}`;n.emitter.emitLine(`${t}${T} ${E} = ${o};`),o=E}let a=e.args[0],s=a?J(a,t,n):"0",l,u=$o(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)&&et(e.$.indexTraitPtrType))l=`(&(${se(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)&&et(e.$.indexTraitPtrType))l=`(&(${se(e.$.indexTraitPtrType.childType,n)}){ .data = &((&${o})->data[(${s}).start]), .length = (${s}).end - (${s}).start + 1 })`;else{let g=(v=n.functions[r.funcId])==null?void 0:v.cName;if(!g)return`/* Error: Index method ${r.funcId} not found in function registry */`;l=`${g}(&${o}, ${s})`}else{let g=(y=n.functions[r.funcId])==null?void 0:y.cName;if(!g)return`/* Error: Index method ${r.funcId} not found in function registry */`;l=`${g}(&${o}, ${s})`}return(h=e.$)!=null&&h.isIndexTraitAddressOf?l:`(*${l})`}function ax(e,t,n,r){var f,_,p,d;let i=e.args[0];if(!((f=i==null?void 0:i.$)!=null&&f.type))return;let o=e.args.find(v=>S(v)&&b(v,B.using));if(!o)return;let a=jn(i.$.type);if(!((_=a==null?void 0:a.isFuture.effects)!=null&&_.length))return;let s=ix(a.isFuture.effects),l=o.args,u=r,c=u.emitter;for(let v=0;v<s.length&&v<l.length;v++){let y=s[v],h=l[v];if(_e(y.type)){let g=y.label,T;if(u.currentEvidenceParams){for(let E of u.currentEvidenceParams.values())if(E.fieldLabel===g){T=E.cParamName;break}}if(!T&&u.stateMachineVariables){for(let[,E]of u.stateMachineVariables)if(E.name===g&&E.kind==="outer"){T=`sm->__capture.${g}`;break}}if(!T){let E=(p=h.$)==null?void 0:p.value;if(E&&Ie(E)){let $=r.functions[E.funcId];$&&(T=$.cName)}}T||(T=J(h,n,r)),T&&c.emitLine(`${n} ${t}->__capture.${g} = (void*)${T};`)}else if(rt(y.type)){let g=y.type;for(let T of g.fields){if(!_e(T.type))continue;let E;if(u.stateMachineVariables){for(let[,$]of u.stateMachineVariables)if($.name===T.label&&$.kind==="outer"){E=`sm->__capture.${T.label}`;break}}if(!E){let $=(d=h.$)==null?void 0:d.value;if($&&Rt($)){let k=g.fields.indexOf(T),C=$.fields[k];if(C&&Ie(C)){let w=r.functions[C.funcId];w&&(E=w.cName)}}}if(!E&&u.currentEvidenceParams){for(let $ of u.currentEvidenceParams.values())if($.fieldLabel===T.label){E=$.cParamName;break}}E||(E=sx(T.label,g,u,e)),E&&c.emitLine(`${n} ${t}->__capture.${T.label} = (void*)${E};`)}}}}function sx(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=Pr(i,c=>c.isImplicit===!0);for(let c=o.length-1;c>=0;c--){let f=o[c],_=(l=f.value)==null?void 0:l[f.value.length-1];if(_&&Rt(_)){let p=_.type.fields.findIndex(d=>d.label===e);if(p>=0){let d=_.fields[p];if(d&&Ie(d)){let v=(u=n.functions[d.funcId])==null?void 0:u.cName;if(v)return v}}}}}function lx(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=J(i,t,n);if(r.effectHandlerParamDrops)for(let f of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${f};`);r.emitter.emitLine(`${t}${o.directReturnVar} = ${c};`),r.emitter.emitLine(`${t}goto ${o.directExitLabel};`)}else{if(r.effectHandlerParamDrops)for(let c of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${c};`);r.emitter.emitLine(`${t}goto ${o.directExitLabel};`)}return""}if(r.inAsyncStateMachine){let c=r.emitter;if(i){let f=J(i,t,n);f&&f!=="(void)0"&&c.emitLine(`${t}(void)${f};`)}if(r.effectHandlerParamDrops)for(let f of r.effectHandlerParamDrops)c.emitLine(`${t}${f};`);return Dr(t,r,e,!1,!0,!0),Bi(t,r,e,!0),gi({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(Dr(t,r,e,!1,!0,!0),Bi(t,r,e,!0),r.currentFunctionType){let c=r.currentFunctionType.return.type;if(!Ke(c)){let f=r.overrideReturnTypeStr??se(c,n);if(f!=="void")return`return (${f}){0}`}}return"return"}let s=J(i,t,n);if(r.effectHandlerParamDrops)for(let c of r.effectHandlerParamDrops)r.emitter.emitLine(`${t}${c};`);if(Dr(t,r,e,!1,!0,!0),Bi(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&&!Ke(c)){let _=se(c,n);r.emitter.emitLine(`${t}{ ${_} _esc_val = ${s}; memcpy(__yo_effect_escape_value, &_esc_val, sizeof(${_})); }`)}let f=r.currentFunctionType.return.type;if(!Ke(f)){let _=r.overrideReturnTypeStr??se(f,n);if(_!=="void")return`return (${_}){0}`}return"return"}return`return ${s}`}function PC(e,t,n){let r;switch(e.tag){case"FnCall":r=ux(e,t,n);break;case"Atom":r=ul(e,n,t);break}return r}function ux(e,t,n){var r,i,o,a,s,l,u,c,f,_,p,d,v,y,h;if((r=e.$)!=null&&r.macroExpansion)return J(e.$.macroExpansion,t,n);if(S(e.func)&&b(e.func,".",2)&&e.func.args[1]&&Q(e.func.args[1])){let g=e.func.args[1].token.value,T=e.func.args[0],E=(i=T==null?void 0:T.$)==null?void 0:i.type;if(E&&H(E)&&yt(E)){if(g===F.___drop[0]){let $=J(T,t,n);return`if (${$} != NULL) { __yo_decr_rc((void*)${$}); }`}if(g===F.___dup[0])return`__yo_incr_rc((void*)${J(T,t,n)})`}}if(j$(e))return H$(e,t,n);if(b(e,F.__yo_decr_rc))return hC(e,t,n);if(b(e,F.__yo_incr_rc))return vC(e,t,n);if(b(e,F.__yo_rc_own))return TC(e,t,n);if(b(e,F.__yo_drop_array_element))return EC(e,t,n);if(b(e,F.__yo_dup_array_element))return $C(e,t,n);if(b(e,F.__yo_drop_tuple_element))return bC(e,t,n);if(b(e,F.__yo_dup_tuple_element))return CC(e,t,n);if(b(e,F.___dup))return kC(e,t,n);if(b(e,F.___drop))return wC(e,t,n);if(b(e,F.__yo_dyn_drop))return FC(e,t,n);if(b(e,F.__yo_dyn_dup))return LC(e,t,n);if(b(e,F.__yo_incr_rc_atomic))return IC(e,t,n);if(b(e,F.__yo_decr_rc_atomic))return SC(e,t,n);if(b(e,F.__yo_iso_extract))return Jb(e,t,n);if(b(e,F.__yo_iso_dispose))return Zb(e,t,n);if(Om(e))return eC(e,t,n);if(b(e,F.__yo_sometype_drop))return AC(e,t,n);if(b(e,F.__yo_sometype_dup))return xC(e,t,n);if(b(e,F.__yo_gc_collect))return Xb(e,t,n);if(b(e,F.rc))return NC(e,t,n);if(b(e,F.panic))return _C(e,t,n);if(b(e,F.asm))return dC(e,t,n);if(b(e,F.global_asm))return mC(e,t,n);if(b(e,B.test))return"/* test declaration skipped */";if(b(e,F.__yo_thread_set_maximum_threads))return sC(e,t,n);if(b(e,B.op_and))return Db(e,t,n);if(b(e,B.op_or))return Vb(e,t,n);if(Qn(e))return(o=e.$)!=null&&o.awaitAnalysis?Y$(e,t,n):Z$(e,t,n);if(b(e,B.dyn))return Kb(e,t,n);if(Or(e))return Ub(e,t,n);if(UE(e))return zb(e,t,n);if(jf(e)){let g=e.args[0];if(!g)return"// Error: spawn requires a Future argument";let E=n.emitter,$=J(g,t,n),k=(a=g.$)==null?void 0:a.type,C=k?se(k,n):"void*",w=(s=e.$)==null?void 0:s.type,I=w?se(w,n):null,L=(l=e.$)!=null&&l.variableName?`__spawn_future_${e.$.variableName}`:"__spawn_future",x=(u=e.$)!=null&&u.variableName?`__spawn_state_${e.$.variableName}`:"__spawn_state";return E.emitLine(`${t}// io.spawn \u2014 start cold Future, return JoinHandle`),E.emitLine(`${t}${C} ${L} = ${$};`),E.emitLine(`${t}int ${x} = ${L}->state;`),E.emitLine(`${t}if (${x} == -2) {`),E.emitLine(`${t} fprintf(stderr, "panic: attempted to spawn an aborted Future\\n");`),E.emitLine(`${t} abort();`),E.emitLine(`${t}}`),yu((c=g.$)==null?void 0:c.type)||(E.emitLine(`${t}if (${x} == 0 && ${L}->__yo_resume_fn) {`),ax(e,L,t,n),E.emitLine(`${t} __yo_incr_rc((void*)${L});`),E.emitLine(`${t} ${L}->__yo_resume_fn((void*)${L});`),E.emitLine(`${t}}`)),I?`(${I}){ .__future = (void*)${L} }`:`(void*)${L}`}if(zE(e))return Bb(e,t,n);if(b(e,B.return))return vb(e,t,n);if(b(e,B.escape))return lx(e,t,n);if(b(e,F.__yo_array_fill,2))return Rb(e,t,n);if(b(e,"::",2))return"";if(b(e,":",2))return Wb(e,t,n);if(b(e,":=",2)){let g=Qb(e,t,n);if(g!==void 0)return g}else{if(b(e,"=",2))return Ob(e,t,n);if((f=e.$)!=null&&f.value&&!Ge((_=e.$)==null?void 0:_.value)&&!Ke(e.$.type)&&!an((p=e.$)==null?void 0:p.controlFlow))return yr(e.$.value,n,e);if(b(e,".",2))return yC(e,t,n);if(b(e,B.begin))return Gb(e,t,n);if(b(e,B.cond))return jb(e,t,n);if(b(e,B.match))return nC(e,t,n);if(b(e,F.__yo_address_of,1))return gC(e,t,n);if(b(e,B.tuple))return MC(e,t,n);if(b(e,B.array)){let g=Mb(e,t,n);if(g!==void 0)return g}else{if(b(e,B.recur))return DC(e,t,n);if(b(e,B.runtime,1))return J(e.args[0],t,n);if(b(e,F.sizeof,1))return VC(e,t,n);if(b(e,F.typeid,1))return RC(e,t,n);if(b(e,F.downcast,2))return Yb(e,t,n);if(b(e,Za)){let g=((d=e.$)==null?void 0:d.runtimeArgExprsInOrder)||e.args;if(g){let T=n,E=g.map($=>{var C,w;let k=J($,t,n);if((C=$.$)!=null&&C.deferredDupExpressions&&$.$.deferredDupExpressions.length>0){sn($,t,T);let I=$.$.deferredDupExpressions[0];if(S(I)&&((w=I.$)!=null&&w.variableName))return ot(I.$.variableName,I.$.env)}return k});return vu(e.func.token.value,E,e,n,t)}}else{if(b(e,B.while))return OC(e,t,n);if(b(e,"->",2)&&S(e.args[0])&&b(e.args[0],B.fn)){let g=(v=e.$)==null?void 0:v.value;return Ie(g)?yr(g,n):"// Error: Anonymous function missing function value"}else{if(b(e,F.consume))return Hb(e,t,n);if(b(e,F.comptime_expect_error)||b(e,F.comptime_assert)||b(e,F.__yo_var_print_info)||b(e,F.__yo_var_is_owning_the_rc_value)||b(e,F.__yo_var_has_other_aliases))return"";if(b(e,B.open))return rC(e,t,n);if((y=e.$)!=null&&y.indexTraitPtrType&&((h=e.$)!=null&&h.indexMethodType))return ox(e,t,n);{let g=fC(e,t,n);if(g!==void 0)return g}}}}}if(S(e))throw new Error(`Unhandled function call: ${A(e)}`);return`// Failed to transpile ${A(e)}`}function UC({expr:e,env:t,context:n}){it(e,F.alignof,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:"Failed to evaluate expression."});t=i.$.env;let o;i.$.value&&X(i.$.value)?o=i.$.value.value:o=i.$.type;let a=Xi(o),s;return a===null?s=Ee(Mn(),{env:t,context:n}):s=mr("Usize",a),e.$={env:t,type:Mn(),value:s,pathCollection:[]},e}function zC({expr:e,env:t,context:n}){let r=b(e,B.op_and)?"and":"or",i=e.args;if(i.length===0){let u=pn(r==="and");return e.$={env:t,type:tn(),value:u,pathCollection:[],isAccessingProperty:!1},e}let o=t,a,s=!1,l=!1;for(let u=0;u<i.length;u++){let c=i[u],f=U({expr:c,env:o,context:{...n}});if(!f.$||!Mr(f.$.type))throw m({token:c.token,errorMessage:`Expected bool type for "${r}" argument, got:
11443
11443
  ${A(c)}`});o=f.$.env;let _=f.$.value;if(Ge(_)){s=!0;continue}if(Ut(_)){let p=_.value;if(r==="and"){if(!p){a=pn(!1);break}!s&&!l&&(a=pn(!0))}else{if(p){a=pn(!0);break}!s&&!l&&(a=pn(!1))}}else l=!0}return Ut(a)||(l||s)&&(l?a=void 0:a=Ee(tn(),{env:o,context:n})),e.$={env:o,type:tn(),value:a,pathCollection:[],isAccessingProperty:!1},e}function BC({expr:e,env:t,context:n}){var v,y,h,g,T;it(e,F.__yo_array_fill,2);let r=e.args[0],i=e.args[1],o=U({expr:r,env:t,context:{...n}});(v=o.$)!=null&&v.env&&(t=o.$.env);let a=(y=o.$)==null?void 0:y.value;if(!X(a)||!ft(a.value))throw m({token:r.token,errorMessage:`__yo_array_fill expects first argument to be an ArrayType, got ${a?bt(a):"undefined"}`});let s=a.value,l=U({expr:i,env:t,context:{...n,expectedType:{type:s.childType,env:t}}});(h=l.$)!=null&&h.env&&(t=l.$.env);let u=(g=l.$)==null?void 0:g.type,c=(T=l.$)==null?void 0:T.value;if(!u)throw m({token:i.token,errorMessage:"Failed to evaluate fill value"});if(!c)throw m({token:i.token,errorMessage:"__yo_array_fill expects second argument to be a compile-time known value, got runtime value"});if(!Ce({type:s.childType,env:t},{type:u,env:t}))throw m({token:i.token,errorMessage:`Fill value type ${O(u)} is not compatible with array element type ${O(s.childType)}`});let f=s.length;if(Ge(f)){let E=Ee(s,{env:t,context:n});return e.$={env:t,type:s,value:E,pathCollection:[]},e}let _;if(Mt(f)){let E=f.value;if(_=typeof E=="bigint"?Number(E):E,!Number.isInteger(_)||_<0)throw m({token:i.token,errorMessage:`Array length must be a non-negative integer, got ${_}`})}else throw m({token:i.token,errorMessage:`Array length must be a compile-time known integer, got ${bt(f)}`});let p=[];if(Ge(c)){let E=Ee(s,{env:t,context:n});return e.$={env:t,type:s,value:E,pathCollection:[]},e}for(let E=0;E<_;E++)p.push(c);let d=aa(s,p);return e.$={env:t,type:s,value:d,pathCollection:[]},e}function qC({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)??ke.type;return e.$={env:t,type:c,value:Ke(c)?ke:Ee(c,{env:t,context:n}),pathCollection:[]},e}let r=e.args[0],i=e.args[1],o=U({expr:r,env:t,context:{...n}});if(!o.$||!Ut(o.$.value))throw m({token:r.token,errorMessage:`Expected bool value for "comptime_assert", got:
11444
11444
  ${A(r)}
11445
11445
 
@@ -11449,7 +11449,7 @@ ${A(r)}`,isAssertionError:!0})}function GC({expr:e,env:t,context:n}){if(b(e,F.__
11449
11449
  ${A(r)}`});t=r.$.env;let i;if(b(e,F.__yo_comptime_bool_not))Ut(r.$.value)?i=pn(!r.$.value.value):i=Ee(tn(),{env:t,context:n});else if(b(e,F.__yo_comptime_bool_to_comptime_string))Ut(r.$.value)?i=Gn(r.$.value.value.toString()):i=Ee(Wn(),{env:t,context:n});else throw m({token:e.token,errorMessage:`Unexpected function call for "${e.func.token.value}", expected "__yo_comptime_bool_not" or "__yo_comptime_bool_to_comptime_string" function`});e.$={env:t,type:i.type,value:i,pathCollection:[]}}else{let r=U({expr:e.args[0],env:t,context:{...n}});if(!r.$||!Mr(r.$.type)||!r.$.value)throw m({token:r.token,errorMessage:`Expected bool type for "${e.func.token.value}" first argument, got:
11450
11450
  ${A(r)}`});t=r.$.env;let i=U({expr:e.args[1],env:t,context:{...n}});if(!i.$||!Mr(i.$.type)||!i.$.value)throw m({token:i.token,errorMessage:`Expected bool type for "${e.func.token.value}" second argument, got:
11451
11451
  ${A(i)}`});t=i.$.env;let o=r.$.value,a=i.$.value,s;if(b(e,F.__yo_comptime_bool_and))Ut(o)&&Ut(a)?s=pn(o.value&&a.value):s=Ee(tn(),{env:t,context:n});else if(b(e,F.__yo_comptime_bool_or))Ut(o)&&Ut(a)?s=pn(o.value||a.value):s=Ee(tn(),{env:t,context:n});else if(b(e,F.__yo_comptime_bool_eq))Ut(o)&&Ut(a)?s=pn(o.value===a.value):s=Ee(tn(),{env:t,context:n});else if(b(e,F.__yo_comptime_bool_neq))Ut(o)&&Ut(a)?s=pn(o.value!==a.value):s=Ee(tn(),{env:t,context:n});else throw m({token:e.token,errorMessage:`Unexpected function call for comptime_bool operations: ${A(e)}`});e.$={env:t,type:s.type,value:s,pathCollection:[]}}return e}function WC({expr:e,env:t,context:n}){var o;let r=Et(e.args[0]),i=e.args[1]?Et(e.args[1]):void 0;try{U({expr:r,env:t,context:{...n}})}catch{return e.$={env:t,type:ke.type,value:ke,pathCollection:[]},e}if(i){let a=U({expr:i,env:t,context:{...n}});if((o=a.$)!=null&&o.value)throw m({token:e.token,errorMessage:pt(a.$.value)?a.$.value.value:bt(a.$.value)})}throw m({token:e.token,errorMessage:`Expected compile error, but the expression was evaluated successfully:
11452
- ${A(r)}`})}function cx(e){return{...e,forallParameters:e.forallParameters.map(t=>({...t,isCompileTimeOnly:!0})),parameters:e.parameters.map(t=>({...t,isCompileTimeOnly:!0})),return:{...e.return,isCompileTimeOnly:!0}}}function cl(e,t,n){var i;if(e.type.return.isCompileTimeOnly||e.type.isExtern||e.type.forallParameters.length>0)return;for(let o of e.type.parameters)if(go(o.type,t))return;if(go(e.type.return.type,t))return;let r=cx(e.type);try{let o=Et(e.body),a=vt(r.env);for(let u of r.parameters){let{env:c}=je({env:a,variable:{name:u.label,type:u.type,isCompileTimeOnly:!0,value:[Ee(u.type,{variableName:u.label,env:a,context:n})],token:Ue,initializedAtToken:Ue,consumedAtToken:void 0,isOwningTheRcValue:!1}});a=c}let s={tag:"Function",type:r,body:o,frameLevel:e.frameLevel,funcName:e.funcName?`${e.funcName}_comptime`:void 0,funcId:`${e.funcId}_comptime`,definitionSiteEnclosingFunctionType:e.definitionSiteEnclosingFunctionType,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},l=En({expr:o,env:a,context:{...n,isExecuting:!0,forceCompileTimeBindings:!0,isAnalyzingCtfeCapability:!0,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:r,value:s,evaluationEnv:a},expectedType:{type:r.return.type,env:a}},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(((i=l.$)==null?void 0:i.value)!==void 0)return s.body=l,Zt(a,!0),s;Zt(a,!0);return}catch{return}}function jC({expr:e,env:t,context:n}){let r=e.args[0];if(!r)throw m({token:e.token,errorMessage:"comptime_fn requires exactly one argument (a function)"});let i=U({expr:r,env:t,context:n});if(!i.$)throw m({token:r.token,errorMessage:"Failed to evaluate argument to comptime_fn"});let o=i.$.value;if(!Se(o))throw m({token:r.token,errorMessage:`comptime_fn requires a function argument, got: ${bt(o)}`});if(o.type.return.isCompileTimeOnly)return e.$={env:t,type:o.type,value:o,pathCollection:[]},e;let a=cl(o,t,n);if(a)return e.$={env:t,type:a.type,value:a,pathCollection:[]},e;throw m({token:r.token,errorMessage:"comptime_fn: Failed to create compile-time version of function. The function body cannot be evaluated at compile time."})}function HC({expr:e,env:t,context:n}){it(e,F.__yo_comptime_list_car,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
11452
+ ${A(r)}`})}function cx(e){return{...e,forallParameters:e.forallParameters.map(t=>({...t,isCompileTimeOnly:!0})),parameters:e.parameters.map(t=>({...t,isCompileTimeOnly:!0})),return:{...e.return,isCompileTimeOnly:!0}}}function cl(e,t,n){var i;if(e.type.return.isCompileTimeOnly||e.type.isExtern||e.type.forallParameters.length>0)return;for(let o of e.type.parameters)if(go(o.type,t))return;if(go(e.type.return.type,t))return;let r=cx(e.type);try{let o=Et(e.body),a=vt(r.env);for(let u of r.parameters){let{env:c}=je({env:a,variable:{name:u.label,type:u.type,isCompileTimeOnly:!0,value:[Ee(u.type,{variableName:u.label,env:a,context:n})],token:Ue,initializedAtToken:Ue,consumedAtToken:void 0,isOwningTheRcValue:!1}});a=c}let s={tag:"Function",type:r,body:o,frameLevel:e.frameLevel,funcName:e.funcName?`${e.funcName}_comptime`:void 0,funcId:`${e.funcId}_comptime`,definitionSiteEnclosingFunctionType:e.definitionSiteEnclosingFunctionType,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},l=En({expr:o,env:a,context:{...n,isExecuting:!0,forceCompileTimeBindings:!0,isAnalyzingCtfeCapability:!0,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:r,value:s,evaluationEnv:a},expectedType:{type:r.return.type,env:a}},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(((i=l.$)==null?void 0:i.value)!==void 0)return s.body=l,Zt(a,!0),s;Zt(a,!0);return}catch{return}}function jC({expr:e,env:t,context:n}){let r=e.args[0];if(!r)throw m({token:e.token,errorMessage:"comptime_fn requires exactly one argument (a function)"});let i=U({expr:r,env:t,context:n});if(!i.$)throw m({token:r.token,errorMessage:"Failed to evaluate argument to comptime_fn"});let o=i.$.value;if(!Ie(o))throw m({token:r.token,errorMessage:`comptime_fn requires a function argument, got: ${bt(o)}`});if(o.type.return.isCompileTimeOnly)return e.$={env:t,type:o.type,value:o,pathCollection:[]},e;let a=cl(o,t,n);if(a)return e.$={env:t,type:a.type,value:a,pathCollection:[]},e;throw m({token:r.token,errorMessage:"comptime_fn: Failed to create compile-time version of function. The function body cannot be evaluated at compile time."})}function HC({expr:e,env:t,context:n}){it(e,F.__yo_comptime_list_car,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
11453
11453
  ${A(r)}`});if(!vn(i.$.type))throw m({token:r.token,errorMessage:`Expected ComptimeList type for "${e.func.token.value}" argument, got:
11454
11454
  ${A(r)}`});let o=i.$.type,a=i.$.value;if(!a)throw m({token:r.token,errorMessage:`Expected ComptimeList value for "${e.func.token.value}" argument, got:
11455
11455
  ${A(r)}`});if(e.$={env:i.$.env,type:o.childType,value:Ee(o.childType,{variableName:`__comptime_list_car_${xt(t.modulePath)}`,env:i.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},Jr(a)){let s=a.elements;if(s.length>0)e.$.value=s[0];else throw m({token:r.token,errorMessage:`Unexpected empty ComptimeList for "${e.func.token.value}" argument`})}return e}function YC({expr:e,env:t,context:n}){it(e,F.__yo_comptime_list_cdr,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
@@ -11483,7 +11483,7 @@ ${A(r)}`});t=r.$.env;let i=U({expr:e.args[1],env:t,context:{...n}});if(!i.$||!yn
11483
11483
  ${A(i)}`});t=i.$.env;let o;if(e.args.length===3){if(o=U({expr:e.args[2],env:t,context:{...n}}),!o.$||!yn(o.$.type)||!o.$.value)throw m({token:o.token,errorMessage:`Expected comptime_int type for "${e.func.token.value}" end argument, got:
11484
11484
  ${A(o)}`});t=o.$.env}let a;if(pt(r.$.value)&&Gr(i.$.value)){let s=r.$.value.value,l=i.$.value.value,u=typeof l=="bigint"?Number(l):l,c=s.length;if(o&&o.$&&o.$.value&&Gr(o.$.value)){let f=o.$.value.value;c=typeof f=="bigint"?Number(f):f}a=Gn(s.slice(u,c))}else a=Ee(Wn(),{env:t,context:n});e.$={env:t,type:a.type,value:a,pathCollection:[]}}else{let r=U({expr:e.args[0],env:t,context:{...n}});if(!r.$||!gn(r.$.type)||!r.$.value)throw m({token:r.token,errorMessage:`Expected comptime_string type for "${e.func.token.value}" first argument, got:
11485
11485
  ${A(r)}`});t=r.$.env;let i=U({expr:e.args[1],env:t,context:{...n}});if(!i.$||!gn(i.$.type)||!i.$.value)throw m({token:i.token,errorMessage:`Expected comptime_string type for "${e.func.token.value}" second argument, got:
11486
- ${A(i)}`});t=i.$.env;let o=r.$.value,a=i.$.value,s;if(b(e,F.__yo_comptime_string_concat))pt(o)&&pt(a)?s=Gn(o.value+a.value):s=Ee(Wn(),{env:t,context:n});else if(b(e,F.__yo_comptime_string_eq))pt(o)&&pt(a)?s=pn(o.value===a.value):s=Ee(tn(),{env:t,context:n});else if(b(e,F.__yo_comptime_string_neq))pt(o)&&pt(a)?s=pn(o.value!==a.value):s=Ee(tn(),{env:t,context:n});else if(b(e,F.__yo_comptime_string_lt))pt(o)&&pt(a)?s=pn(o.value<a.value):s=Ee(tn(),{env:t,context:n});else if(b(e,F.__yo_comptime_string_lte))pt(o)&&pt(a)?s=pn(o.value<=a.value):s=Ee(tn(),{env:t,context:n});else if(b(e,F.__yo_comptime_string_gt))pt(o)&&pt(a)?s=pn(o.value>a.value):s=Ee(tn(),{env:t,context:n});else if(b(e,F.__yo_comptime_string_gte))pt(o)&&pt(a)?s=pn(o.value>=a.value):s=Ee(tn(),{env:t,context:n});else throw m({token:e.token,errorMessage:`Unexpected function call for comptime_string operations: ${A(e)}`});e.$={env:t,type:s.type,value:s,pathCollection:[]}}return e}function ns(e){return typeof e=="bigint"?Number(e):e}function g_(e,t){let n=e.fields[0],r=e.fields[1];if(!n||!r||!Mt(n)||!Mt(r))return;let i=ns(n.value),o=ns(r.value);return t&&(o+=1),{start:i,end:o}}function ok({expr:e,env:t,context:n,isSlice:r}){let i=e.args[0],o=e.args[1],a=U({expr:i,env:t,context:{...n}});if(!a.$)throw m({token:i.token,errorMessage:"Failed to evaluate self for comptime index"});t=a.$.env;let s=U({expr:o,env:t,context:{...n}});if(!s.$)throw m({token:o.token,errorMessage:"Failed to evaluate index for comptime index"});t=s.$.env;let l=a.$.value;if(r&&l&&Ma(l)){let f=l,_=f.type.childType;if(s.$.value&&Mt(s.$.value)){let p=ns(s.$.value.value),d=f.endIndex-f.startIndex;if(p<0||p>=d)throw m({token:o.token,errorMessage:`Slice index out of bounds: ${p}. Expected index in range [0, ${d-1}].`});let v=f.startIndex+p,y=f.sourceArray[0],h=y.elements[v];return e.$={env:t,type:_,value:h,pathCollection:[],comptimeRef:{kind:"array",arrayValue:y,index:v}},e}return e.$={env:t,type:_,value:Ee(_,{env:t,context:n}),pathCollection:[]},e}if(!r&&l&&qr(l)){let f=l,_=f.type.childType;if(s.$.value&&Mt(s.$.value)){let p=ns(s.$.value.value);if(p<0||p>=f.elements.length)throw m({token:o.token,errorMessage:`Array index out of bounds: ${p}. Expected index in range [0, ${f.elements.length-1}].`});let d=f.elements[p];return e.$={env:t,type:_,value:d,pathCollection:[],comptimeRef:{kind:"array",arrayValue:f,index:p}},e}return e.$={env:t,type:_,value:Ee(_,{env:t,context:n}),pathCollection:[]},e}let u=a.$.type,c=uk(u);return e.$={env:t,type:c,value:void 0,pathCollection:[]},e}function uk(e){if(et(e)){let t=e.childType;if(ft(t))return An(t.childType);if(Vt(t))return An(t.childType);if(vn(t))return An(t.childType)}return ft(e)?An(e.childType):Vt(e)?An(e.childType):vn(e)?An(e.childType):e}function hx({expr:e,env:t,context:n}){let r=e.args[0],i=e.args[1],o=U({expr:r,env:t,context:{...n}});if(!o.$)throw m({token:r.token,errorMessage:"Failed to evaluate self for comptime list index"});t=o.$.env;let a=U({expr:i,env:t,context:{...n}});if(!a.$)throw m({token:i.token,errorMessage:"Failed to evaluate index for comptime list index"});t=a.$.env;let s=o.$.value,l;if(Jr(s)?l=s:s&&bi(s)&&Jr(s.targetValue[0])&&(l=s.targetValue[0]),l){let f=l.type.childType;if(a.$.value&&Mt(a.$.value)){let _=ns(a.$.value.value);if(_<0||_>=l.elements.length)throw m({token:i.token,errorMessage:`ComptimeList index out of bounds: ${_}. Expected index in range [0, ${l.elements.length-1}].`});let p=l.elements[_];return e.$={env:t,type:f,value:p,pathCollection:[],comptimeRef:{kind:"comptime_list",listValue:l,index:_}},e}return e.$={env:t,type:f,value:Ee(f,{env:t,context:n}),pathCollection:[]},e}let u=o.$.type,c=uk(u);return e.$={env:t,type:c,value:Ee(c,{env:t,context:n}),pathCollection:[]},e}function ak({expr:e,env:t,context:n,isInclusive:r}){let i=e.args[0],o=e.args[1],a=U({expr:i,env:t,context:{...n}});if(!a.$)throw m({token:i.token,errorMessage:"Failed to evaluate self for comptime list range index"});t=a.$.env;let s=U({expr:o,env:t,context:{...n}});if(!s.$)throw m({token:o.token,errorMessage:"Failed to evaluate range for comptime list range index"});t=s.$.env;let l=a.$.value,u=s.$.value;if(!u||Ge(u)||!qn(u)){let y=a.$.type,h=sk(y);return e.$={env:t,type:h,value:Ee(h,{env:t,context:n}),pathCollection:[]},e}let c=g_(u,r);if(!c)throw m({token:o.token,errorMessage:"Expected numeric start/end in Range for comptime list range index"});let{start:f,end:_}=c,p;if(Jr(l)?p=l:l&&bi(l)&&Jr(l.targetValue[0])&&(p=l.targetValue[0]),p){let y=p.type.childType,h=Ao(y);if(f<0||f>p.elements.length)throw m({token:o.token,errorMessage:`ComptimeList range start out of bounds: ${f}. Expected in range [0, ${p.elements.length}].`});if(_<f||_>p.elements.length)throw m({token:o.token,errorMessage:`ComptimeList range end out of bounds: ${_}. Expected in range [${f}, ${p.elements.length}].`});let g=p.elements.slice(f,_),T=wr(y,g);return e.$={env:t,type:h,value:T,pathCollection:[]},e}let d=a.$.type,v=sk(d);return e.$={env:t,type:v,value:Ee(v,{env:t,context:n}),pathCollection:[]},e}function sk(e){if(et(e)){let t=e.childType;if(vn(t))return An(t)}return vn(e)?An(e):e}function y_({expr:e,env:t,context:n,isSlice:r,isInclusive:i}){let o=e.args[0],a=e.args[1],s=U({expr:o,env:t,context:{...n}});if(!s.$)throw m({token:o.token,errorMessage:"Failed to evaluate self for comptime range index"});t=s.$.env;let l=U({expr:a,env:t,context:{...n}});if(!l.$)throw m({token:a.token,errorMessage:"Failed to evaluate range index for comptime index"});t=l.$.env;let u=s.$.value,c=l.$.value;if(!c||Ge(c)||!qn(c)){let y=s.$.type,h=lk(y);return e.$={env:t,type:h,value:void 0,pathCollection:[]},e}let f=g_(c,i);if(!f)throw m({token:a.token,errorMessage:"Expected numeric start/end in Range for comptime range index"});let{start:_,end:p}=f;if(!r&&u&&qr(u)){let y=u,h=y.type.childType,g=Vo(h);if(_<0||_>y.elements.length)throw m({token:a.token,errorMessage:`Slice start index out of bounds: ${_}. Expected index in range [0, ${y.elements.length}].`});if(p<_||p>y.elements.length)throw m({token:a.token,errorMessage:`Slice end index out of bounds: ${p}. Expected index in range [${_}, ${y.elements.length}].`});let T=As(g,[y],_,p);return e.$={env:t,type:g,value:T,pathCollection:[]},e}if(r&&u&&Ma(u)){let y=u,h=y.type.childType,g=Vo(h),T=y.endIndex-y.startIndex;if(_<0||_>T)throw m({token:a.token,errorMessage:`Slice start index out of bounds: ${_}. Expected index in range [0, ${T}].`});if(p<_||p>T)throw m({token:a.token,errorMessage:`Slice end index out of bounds: ${p}. Expected index in range [${_}, ${T}].`});let E=y.startIndex+_,$=y.startIndex+p,k=As(g,y.sourceArray,E,$);return e.$={env:t,type:g,value:k,pathCollection:[]},e}let d=s.$.type,v=lk(d);return e.$={env:t,type:v,value:void 0,pathCollection:[]},e}function lk(e){if(et(e)){let t=e.childType;if(ft(t)){let n=t.childType;return An(Vo(n))}if(Vt(t))return e}if(ft(e)){let t=e.childType;return An(Vo(t))}return Vt(e)?An(e):e}function Wm({expr:e,env:t,context:n,isRange:r,isInclusive:i}){let o=e.args[0],a=e.args[1],s=U({expr:o,env:t,context:{...n}});if(!s.$)throw m({token:o.token,errorMessage:"Failed to evaluate self for comptime string index"});t=s.$.env;let l=U({expr:a,env:t,context:{...n}});if(!l.$)throw m({token:a.token,errorMessage:"Failed to evaluate index for comptime string index"});t=l.$.env;let u=s.$.value,c=s.$.type;if(!u||!pt(u))return e.$={env:t,type:c,value:void 0,pathCollection:[]},e;let f=u.value;if(!r){let y=l.$.value;if(!y||Ge(y)||!Gr(y))return e.$={env:t,type:c,value:void 0,pathCollection:[]},e;let h=ns(y.value);if(h<0||h>=f.length)throw m({token:a.token,errorMessage:`String index out of bounds: ${h}. Expected index in range [0, ${f.length-1}].`});return e.$={env:t,type:c,value:Gn(f[h]),pathCollection:[]},e}let _=l.$.value;if(!_||Ge(_)||!qn(_))return e.$={env:t,type:c,value:void 0,pathCollection:[]},e;let p=g_(_,i);if(!p)throw m({token:a.token,errorMessage:"Expected numeric start/end in Range for comptime string range index"});let{start:d,end:v}=p;if(d<0||d>f.length)throw m({token:a.token,errorMessage:`String slice start index out of bounds: ${d}. Expected index in range [0, ${f.length}].`});if(v<d||v>f.length)throw m({token:a.token,errorMessage:`String slice end index out of bounds: ${v}. Expected index in range [${d}, ${f.length}].`});return e.$={env:t,type:c,value:Gn(f.slice(d,v)),pathCollection:[]},e}function ck({expr:e,env:t,context:n}){if(b(e,F.__yo_comptime_array_index))return ok({expr:e,env:t,context:n,isSlice:!1});if(b(e,F.__yo_comptime_slice_index))return ok({expr:e,env:t,context:n,isSlice:!0});if(b(e,F.__yo_comptime_list_index))return hx({expr:e,env:t,context:n});if(b(e,F.__yo_comptime_list_index_range))return ak({expr:e,env:t,context:n,isInclusive:!1});if(b(e,F.__yo_comptime_list_index_range_inclusive))return ak({expr:e,env:t,context:n,isInclusive:!0});if(b(e,F.__yo_comptime_array_index_range))return y_({expr:e,env:t,context:n,isSlice:!1,isInclusive:!1});if(b(e,F.__yo_comptime_array_index_range_inclusive))return y_({expr:e,env:t,context:n,isSlice:!1,isInclusive:!0});if(b(e,F.__yo_comptime_slice_index_range))return y_({expr:e,env:t,context:n,isSlice:!0,isInclusive:!1});if(b(e,F.__yo_comptime_slice_index_range_inclusive))return y_({expr:e,env:t,context:n,isSlice:!0,isInclusive:!0});if(b(e,F.__yo_comptime_string_index))return Wm({expr:e,env:t,context:n,isRange:!1,isInclusive:!1});if(b(e,F.__yo_comptime_string_index_range))return Wm({expr:e,env:t,context:n,isRange:!0,isInclusive:!1});if(b(e,F.__yo_comptime_string_index_range_inclusive))return Wm({expr:e,env:t,context:n,isRange:!0,isInclusive:!0});throw m({token:e.token,errorMessage:`Unexpected comptime index builtin: ${A(e)}`})}function fk({strValue:e,argValue:t,token:n,isRange:r,isInclusive:i}){if(Ge(t))return Gn("");if(!r){if(!Gr(t))throw m({token:n,errorMessage:"Expected comptime_int index for comptime string index"});let l=ns(t.value);if(l<0||l>=e.length)throw m({token:n,errorMessage:`String index out of bounds: ${l}. Expected index in range [0, ${e.length-1}].`});return Gn(e[l])}if(!qn(t))throw m({token:n,errorMessage:"Expected comptime Range value for comptime string range index"});let o=g_(t,i);if(!o)throw m({token:n,errorMessage:"Expected numeric start/end in Range for comptime string range index"});let{start:a,end:s}=o;if(a<0||a>e.length)throw m({token:n,errorMessage:`String slice start index out of bounds: ${a}. Expected index in range [0, ${e.length}].`});if(s<a||s>e.length)throw m({token:n,errorMessage:`String slice end index out of bounds: ${s}. Expected index in range [${a}, ${e.length}].`});return Gn(e.slice(a,s))}function _k({expr:e,env:t,context:n}){it(e,F.consume,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:"Failed to evaluate expression."});return t=i.$.env,t=li(i,t),e.$={env:t,type:ke.type,value:ke,pathCollection:[]},e}function qo({functionCalleeExpr:e,functionType:t,functionValue:n,argValues:r,callerEnv:i,calleeEnv:o,context:a}){if(a.isAnalyzingCtfeCapability)return{value:Ee(t.return.type,{variableName:"ctfe_analysis_result_"+xt(i.modulePath),env:t.env,context:a}),callerEnv:i,calleeEnv:o};let s=[...r.forallArgs.map(T=>T.value),...r.args.map(T=>T.value),...r.variadicArgs.map(T=>T.value)];if(s.some(T=>!T))throw m({token:(e==null?void 0:e.token)??Ue,errorMessage:"Failed to call the function for compile-time. Some arguments are not compile-time evaluated correctly."});let l=s,u=t.return.type,c=Lt(u),f=n.funcId,_=n.calledComptimeFunctionCaches,p=c?_.find(T=>T.argValues.length===l.length&&T.argValues.every((E,$)=>{let k=l[$];return X(E)&&X(k)?H(E.value)&&H(k.value)||Xe(E.value)||Xe(k.value)?E.value.id===k.value.id:H(E.value)&&!H(k.value)?!1:Ce({type:E.value,env:T.env},{type:k.value,env:i},!0):Un({value:E,env:T.env},{value:k,env:i})})):void 0;if(p)return{callerEnv:i,calleeEnv:o,value:p.value};let d=n.body,v={funcId:f,argValues:l,value:Ee(t.return.type,{variableName:t.return.label,recursiveTypeRef:{functionValue:n,argValues:l},env:o,context:a}),env:o,body:Et(d)};n.calledComptimeFunctionCaches.push(v);let y=n.calledComptimeFunctionCaches.length-1,h;try{h=En({expr:v.body,env:o,context:{...a,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:t,value:n,evaluationEnv:o},isEvaluatingLoopBody:void 0,capturedVariables:void 0,isExecuting:!a.isValidatingFunctionDefinition,functionReturnImplConcreteType:[],SelfType:t.SelfType??a.SelfType,forceCompileTimeBindings:!0},variablesToAdd:[]})}catch(T){throw n.calledComptimeFunctionCaches.splice(y,1),T}if(!h.$)throw m({token:n.body.token,errorMessage:"Function body is not evaluated correctly"});let g=h.$.value;if(!g)throw m({token:n.body.token,errorMessage:"Function body is not evaluated correctly. Expected to return a compile-time known value."});if(o=h.$.env,X(g)){let T=g.value;!T.typeName&&n.funcName&&(T.typeName=n.funcName+`(${l.map(E=>bt(E)).join(", ")})`),(Oe(T)||Ye(T)||Ht(T)||rt(T)||_t(T))&&(T.functionValue||(T.functionValue=n))}return c?n.calledComptimeFunctionCaches[y]={funcId:f,argValues:l,value:g,env:h.$.env,body:h}:n.calledComptimeFunctionCaches.splice(y,1),{value:g,callerEnv:i,calleeEnv:o,comptimeRef:h.$.comptimeRef}}function jm(e,t,n){var p;let i=ve(t,"Option").find(d=>{var v;return((v=d.value)==null?void 0:v[0])&&Se(d.value[0])&&_e(d.type)});if(!i||!((p=i.value)!=null&&p[0])||!Se(i.value[0]))throw new Error("Cannot find Option type constructor in environment");let o=i.value[0],a=o.type,s=a.parameters[0],l=xe(e),u=vt(a.env),{env:c}=je({env:u,variable:{name:s.label,token:Ue,type:l.type,isCompileTimeOnly:!0,initializedAtToken:Ue,consumedAtToken:void 0,value:[l],isOwningTheRcValue:!1}}),{value:f,callerEnv:_}=qo({functionCalleeExpr:void 0,functionType:a,functionValue:o,argValues:{forallArgs:[],args:[{value:l,parameterType:s.type,argType:en()}],variadicArgs:[]},callerEnv:t,calleeEnv:c,context:n});if(!X(f))throw new Error("Option type constructor did not return a type value");return{optionType:f.value,env:_}}function pk({expr:e,env:t,context:n}){it(e,[F.__yo_decr_rc[0]],1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${F.__yo_decr_rc[0]}":
11486
+ ${A(i)}`});t=i.$.env;let o=r.$.value,a=i.$.value,s;if(b(e,F.__yo_comptime_string_concat))pt(o)&&pt(a)?s=Gn(o.value+a.value):s=Ee(Wn(),{env:t,context:n});else if(b(e,F.__yo_comptime_string_eq))pt(o)&&pt(a)?s=pn(o.value===a.value):s=Ee(tn(),{env:t,context:n});else if(b(e,F.__yo_comptime_string_neq))pt(o)&&pt(a)?s=pn(o.value!==a.value):s=Ee(tn(),{env:t,context:n});else if(b(e,F.__yo_comptime_string_lt))pt(o)&&pt(a)?s=pn(o.value<a.value):s=Ee(tn(),{env:t,context:n});else if(b(e,F.__yo_comptime_string_lte))pt(o)&&pt(a)?s=pn(o.value<=a.value):s=Ee(tn(),{env:t,context:n});else if(b(e,F.__yo_comptime_string_gt))pt(o)&&pt(a)?s=pn(o.value>a.value):s=Ee(tn(),{env:t,context:n});else if(b(e,F.__yo_comptime_string_gte))pt(o)&&pt(a)?s=pn(o.value>=a.value):s=Ee(tn(),{env:t,context:n});else throw m({token:e.token,errorMessage:`Unexpected function call for comptime_string operations: ${A(e)}`});e.$={env:t,type:s.type,value:s,pathCollection:[]}}return e}function ns(e){return typeof e=="bigint"?Number(e):e}function g_(e,t){let n=e.fields[0],r=e.fields[1];if(!n||!r||!Mt(n)||!Mt(r))return;let i=ns(n.value),o=ns(r.value);return t&&(o+=1),{start:i,end:o}}function ok({expr:e,env:t,context:n,isSlice:r}){let i=e.args[0],o=e.args[1],a=U({expr:i,env:t,context:{...n}});if(!a.$)throw m({token:i.token,errorMessage:"Failed to evaluate self for comptime index"});t=a.$.env;let s=U({expr:o,env:t,context:{...n}});if(!s.$)throw m({token:o.token,errorMessage:"Failed to evaluate index for comptime index"});t=s.$.env;let l=a.$.value;if(r&&l&&Ma(l)){let f=l,_=f.type.childType;if(s.$.value&&Mt(s.$.value)){let p=ns(s.$.value.value),d=f.endIndex-f.startIndex;if(p<0||p>=d)throw m({token:o.token,errorMessage:`Slice index out of bounds: ${p}. Expected index in range [0, ${d-1}].`});let v=f.startIndex+p,y=f.sourceArray[0],h=y.elements[v];return e.$={env:t,type:_,value:h,pathCollection:[],comptimeRef:{kind:"array",arrayValue:y,index:v}},e}return e.$={env:t,type:_,value:Ee(_,{env:t,context:n}),pathCollection:[]},e}if(!r&&l&&qr(l)){let f=l,_=f.type.childType;if(s.$.value&&Mt(s.$.value)){let p=ns(s.$.value.value);if(p<0||p>=f.elements.length)throw m({token:o.token,errorMessage:`Array index out of bounds: ${p}. Expected index in range [0, ${f.elements.length-1}].`});let d=f.elements[p];return e.$={env:t,type:_,value:d,pathCollection:[],comptimeRef:{kind:"array",arrayValue:f,index:p}},e}return e.$={env:t,type:_,value:Ee(_,{env:t,context:n}),pathCollection:[]},e}let u=a.$.type,c=uk(u);return e.$={env:t,type:c,value:void 0,pathCollection:[]},e}function uk(e){if(et(e)){let t=e.childType;if(ft(t))return An(t.childType);if(Vt(t))return An(t.childType);if(vn(t))return An(t.childType)}return ft(e)?An(e.childType):Vt(e)?An(e.childType):vn(e)?An(e.childType):e}function hx({expr:e,env:t,context:n}){let r=e.args[0],i=e.args[1],o=U({expr:r,env:t,context:{...n}});if(!o.$)throw m({token:r.token,errorMessage:"Failed to evaluate self for comptime list index"});t=o.$.env;let a=U({expr:i,env:t,context:{...n}});if(!a.$)throw m({token:i.token,errorMessage:"Failed to evaluate index for comptime list index"});t=a.$.env;let s=o.$.value,l;if(Jr(s)?l=s:s&&bi(s)&&Jr(s.targetValue[0])&&(l=s.targetValue[0]),l){let f=l.type.childType;if(a.$.value&&Mt(a.$.value)){let _=ns(a.$.value.value);if(_<0||_>=l.elements.length)throw m({token:i.token,errorMessage:`ComptimeList index out of bounds: ${_}. Expected index in range [0, ${l.elements.length-1}].`});let p=l.elements[_];return e.$={env:t,type:f,value:p,pathCollection:[],comptimeRef:{kind:"comptime_list",listValue:l,index:_}},e}return e.$={env:t,type:f,value:Ee(f,{env:t,context:n}),pathCollection:[]},e}let u=o.$.type,c=uk(u);return e.$={env:t,type:c,value:Ee(c,{env:t,context:n}),pathCollection:[]},e}function ak({expr:e,env:t,context:n,isInclusive:r}){let i=e.args[0],o=e.args[1],a=U({expr:i,env:t,context:{...n}});if(!a.$)throw m({token:i.token,errorMessage:"Failed to evaluate self for comptime list range index"});t=a.$.env;let s=U({expr:o,env:t,context:{...n}});if(!s.$)throw m({token:o.token,errorMessage:"Failed to evaluate range for comptime list range index"});t=s.$.env;let l=a.$.value,u=s.$.value;if(!u||Ge(u)||!qn(u)){let y=a.$.type,h=sk(y);return e.$={env:t,type:h,value:Ee(h,{env:t,context:n}),pathCollection:[]},e}let c=g_(u,r);if(!c)throw m({token:o.token,errorMessage:"Expected numeric start/end in Range for comptime list range index"});let{start:f,end:_}=c,p;if(Jr(l)?p=l:l&&bi(l)&&Jr(l.targetValue[0])&&(p=l.targetValue[0]),p){let y=p.type.childType,h=Ao(y);if(f<0||f>p.elements.length)throw m({token:o.token,errorMessage:`ComptimeList range start out of bounds: ${f}. Expected in range [0, ${p.elements.length}].`});if(_<f||_>p.elements.length)throw m({token:o.token,errorMessage:`ComptimeList range end out of bounds: ${_}. Expected in range [${f}, ${p.elements.length}].`});let g=p.elements.slice(f,_),T=wr(y,g);return e.$={env:t,type:h,value:T,pathCollection:[]},e}let d=a.$.type,v=sk(d);return e.$={env:t,type:v,value:Ee(v,{env:t,context:n}),pathCollection:[]},e}function sk(e){if(et(e)){let t=e.childType;if(vn(t))return An(t)}return vn(e)?An(e):e}function y_({expr:e,env:t,context:n,isSlice:r,isInclusive:i}){let o=e.args[0],a=e.args[1],s=U({expr:o,env:t,context:{...n}});if(!s.$)throw m({token:o.token,errorMessage:"Failed to evaluate self for comptime range index"});t=s.$.env;let l=U({expr:a,env:t,context:{...n}});if(!l.$)throw m({token:a.token,errorMessage:"Failed to evaluate range index for comptime index"});t=l.$.env;let u=s.$.value,c=l.$.value;if(!c||Ge(c)||!qn(c)){let y=s.$.type,h=lk(y);return e.$={env:t,type:h,value:void 0,pathCollection:[]},e}let f=g_(c,i);if(!f)throw m({token:a.token,errorMessage:"Expected numeric start/end in Range for comptime range index"});let{start:_,end:p}=f;if(!r&&u&&qr(u)){let y=u,h=y.type.childType,g=Vo(h);if(_<0||_>y.elements.length)throw m({token:a.token,errorMessage:`Slice start index out of bounds: ${_}. Expected index in range [0, ${y.elements.length}].`});if(p<_||p>y.elements.length)throw m({token:a.token,errorMessage:`Slice end index out of bounds: ${p}. Expected index in range [${_}, ${y.elements.length}].`});let T=As(g,[y],_,p);return e.$={env:t,type:g,value:T,pathCollection:[]},e}if(r&&u&&Ma(u)){let y=u,h=y.type.childType,g=Vo(h),T=y.endIndex-y.startIndex;if(_<0||_>T)throw m({token:a.token,errorMessage:`Slice start index out of bounds: ${_}. Expected index in range [0, ${T}].`});if(p<_||p>T)throw m({token:a.token,errorMessage:`Slice end index out of bounds: ${p}. Expected index in range [${_}, ${T}].`});let E=y.startIndex+_,$=y.startIndex+p,k=As(g,y.sourceArray,E,$);return e.$={env:t,type:g,value:k,pathCollection:[]},e}let d=s.$.type,v=lk(d);return e.$={env:t,type:v,value:void 0,pathCollection:[]},e}function lk(e){if(et(e)){let t=e.childType;if(ft(t)){let n=t.childType;return An(Vo(n))}if(Vt(t))return e}if(ft(e)){let t=e.childType;return An(Vo(t))}return Vt(e)?An(e):e}function Wm({expr:e,env:t,context:n,isRange:r,isInclusive:i}){let o=e.args[0],a=e.args[1],s=U({expr:o,env:t,context:{...n}});if(!s.$)throw m({token:o.token,errorMessage:"Failed to evaluate self for comptime string index"});t=s.$.env;let l=U({expr:a,env:t,context:{...n}});if(!l.$)throw m({token:a.token,errorMessage:"Failed to evaluate index for comptime string index"});t=l.$.env;let u=s.$.value,c=s.$.type;if(!u||!pt(u))return e.$={env:t,type:c,value:void 0,pathCollection:[]},e;let f=u.value;if(!r){let y=l.$.value;if(!y||Ge(y)||!Gr(y))return e.$={env:t,type:c,value:void 0,pathCollection:[]},e;let h=ns(y.value);if(h<0||h>=f.length)throw m({token:a.token,errorMessage:`String index out of bounds: ${h}. Expected index in range [0, ${f.length-1}].`});return e.$={env:t,type:c,value:Gn(f[h]),pathCollection:[]},e}let _=l.$.value;if(!_||Ge(_)||!qn(_))return e.$={env:t,type:c,value:void 0,pathCollection:[]},e;let p=g_(_,i);if(!p)throw m({token:a.token,errorMessage:"Expected numeric start/end in Range for comptime string range index"});let{start:d,end:v}=p;if(d<0||d>f.length)throw m({token:a.token,errorMessage:`String slice start index out of bounds: ${d}. Expected index in range [0, ${f.length}].`});if(v<d||v>f.length)throw m({token:a.token,errorMessage:`String slice end index out of bounds: ${v}. Expected index in range [${d}, ${f.length}].`});return e.$={env:t,type:c,value:Gn(f.slice(d,v)),pathCollection:[]},e}function ck({expr:e,env:t,context:n}){if(b(e,F.__yo_comptime_array_index))return ok({expr:e,env:t,context:n,isSlice:!1});if(b(e,F.__yo_comptime_slice_index))return ok({expr:e,env:t,context:n,isSlice:!0});if(b(e,F.__yo_comptime_list_index))return hx({expr:e,env:t,context:n});if(b(e,F.__yo_comptime_list_index_range))return ak({expr:e,env:t,context:n,isInclusive:!1});if(b(e,F.__yo_comptime_list_index_range_inclusive))return ak({expr:e,env:t,context:n,isInclusive:!0});if(b(e,F.__yo_comptime_array_index_range))return y_({expr:e,env:t,context:n,isSlice:!1,isInclusive:!1});if(b(e,F.__yo_comptime_array_index_range_inclusive))return y_({expr:e,env:t,context:n,isSlice:!1,isInclusive:!0});if(b(e,F.__yo_comptime_slice_index_range))return y_({expr:e,env:t,context:n,isSlice:!0,isInclusive:!1});if(b(e,F.__yo_comptime_slice_index_range_inclusive))return y_({expr:e,env:t,context:n,isSlice:!0,isInclusive:!0});if(b(e,F.__yo_comptime_string_index))return Wm({expr:e,env:t,context:n,isRange:!1,isInclusive:!1});if(b(e,F.__yo_comptime_string_index_range))return Wm({expr:e,env:t,context:n,isRange:!0,isInclusive:!1});if(b(e,F.__yo_comptime_string_index_range_inclusive))return Wm({expr:e,env:t,context:n,isRange:!0,isInclusive:!0});throw m({token:e.token,errorMessage:`Unexpected comptime index builtin: ${A(e)}`})}function fk({strValue:e,argValue:t,token:n,isRange:r,isInclusive:i}){if(Ge(t))return Gn("");if(!r){if(!Gr(t))throw m({token:n,errorMessage:"Expected comptime_int index for comptime string index"});let l=ns(t.value);if(l<0||l>=e.length)throw m({token:n,errorMessage:`String index out of bounds: ${l}. Expected index in range [0, ${e.length-1}].`});return Gn(e[l])}if(!qn(t))throw m({token:n,errorMessage:"Expected comptime Range value for comptime string range index"});let o=g_(t,i);if(!o)throw m({token:n,errorMessage:"Expected numeric start/end in Range for comptime string range index"});let{start:a,end:s}=o;if(a<0||a>e.length)throw m({token:n,errorMessage:`String slice start index out of bounds: ${a}. Expected index in range [0, ${e.length}].`});if(s<a||s>e.length)throw m({token:n,errorMessage:`String slice end index out of bounds: ${s}. Expected index in range [${a}, ${e.length}].`});return Gn(e.slice(a,s))}function _k({expr:e,env:t,context:n}){it(e,F.consume,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:"Failed to evaluate expression."});return t=i.$.env,t=li(i,t),e.$={env:t,type:ke.type,value:ke,pathCollection:[]},e}function qo({functionCalleeExpr:e,functionType:t,functionValue:n,argValues:r,callerEnv:i,calleeEnv:o,context:a}){if(a.isAnalyzingCtfeCapability)return{value:Ee(t.return.type,{variableName:"ctfe_analysis_result_"+xt(i.modulePath),env:t.env,context:a}),callerEnv:i,calleeEnv:o};let s=[...r.forallArgs.map(T=>T.value),...r.args.map(T=>T.value),...r.variadicArgs.map(T=>T.value)];if(s.some(T=>!T))throw m({token:(e==null?void 0:e.token)??Ue,errorMessage:"Failed to call the function for compile-time. Some arguments are not compile-time evaluated correctly."});let l=s,u=t.return.type,c=Lt(u),f=n.funcId,_=n.calledComptimeFunctionCaches,p=c?_.find(T=>T.argValues.length===l.length&&T.argValues.every((E,$)=>{let k=l[$];return X(E)&&X(k)?H(E.value)&&H(k.value)||Xe(E.value)||Xe(k.value)?E.value.id===k.value.id:H(E.value)&&!H(k.value)?!1:Ce({type:E.value,env:T.env},{type:k.value,env:i},!0):Un({value:E,env:T.env},{value:k,env:i})})):void 0;if(p)return{callerEnv:i,calleeEnv:o,value:p.value};let d=n.body,v={funcId:f,argValues:l,value:Ee(t.return.type,{variableName:t.return.label,recursiveTypeRef:{functionValue:n,argValues:l},env:o,context:a}),env:o,body:Et(d)};n.calledComptimeFunctionCaches.push(v);let y=n.calledComptimeFunctionCaches.length-1,h;try{h=En({expr:v.body,env:o,context:{...a,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:t,value:n,evaluationEnv:o},isEvaluatingLoopBody:void 0,capturedVariables:void 0,isExecuting:!a.isValidatingFunctionDefinition,functionReturnImplConcreteType:[],SelfType:t.SelfType??a.SelfType,forceCompileTimeBindings:!0},variablesToAdd:[]})}catch(T){throw n.calledComptimeFunctionCaches.splice(y,1),T}if(!h.$)throw m({token:n.body.token,errorMessage:"Function body is not evaluated correctly"});let g=h.$.value;if(!g)throw m({token:n.body.token,errorMessage:"Function body is not evaluated correctly. Expected to return a compile-time known value."});if(o=h.$.env,X(g)){let T=g.value;!T.typeName&&n.funcName&&(T.typeName=n.funcName+`(${l.map(E=>bt(E)).join(", ")})`),(Oe(T)||Ye(T)||Ht(T)||rt(T)||_t(T))&&(T.functionValue||(T.functionValue=n))}return c?n.calledComptimeFunctionCaches[y]={funcId:f,argValues:l,value:g,env:h.$.env,body:h}:n.calledComptimeFunctionCaches.splice(y,1),{value:g,callerEnv:i,calleeEnv:o,comptimeRef:h.$.comptimeRef}}function jm(e,t,n){var p;let i=ve(t,"Option").find(d=>{var v;return((v=d.value)==null?void 0:v[0])&&Ie(d.value[0])&&_e(d.type)});if(!i||!((p=i.value)!=null&&p[0])||!Ie(i.value[0]))throw new Error("Cannot find Option type constructor in environment");let o=i.value[0],a=o.type,s=a.parameters[0],l=xe(e),u=vt(a.env),{env:c}=je({env:u,variable:{name:s.label,token:Ue,type:l.type,isCompileTimeOnly:!0,initializedAtToken:Ue,consumedAtToken:void 0,value:[l],isOwningTheRcValue:!1}}),{value:f,callerEnv:_}=qo({functionCalleeExpr:void 0,functionType:a,functionValue:o,argValues:{forallArgs:[],args:[{value:l,parameterType:s.type,argType:en()}],variadicArgs:[]},callerEnv:t,calleeEnv:c,context:n});if(!X(f))throw new Error("Option type constructor did not return a type value");return{optionType:f.value,env:_}}function pk({expr:e,env:t,context:n}){it(e,[F.__yo_decr_rc[0]],1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${F.__yo_decr_rc[0]}":
11487
11487
  ${A(r)}`});return t=i.$.env,e.$={env:t,type:ke.type,value:ke,pathCollection:[]},e}function dk({expr:e,env:t,context:n}){it(e,[F.__yo_incr_rc[0]]);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${F.__yo_incr_rc[0]}":
11488
11488
  ${A(r)}`});return t=i.$.env,e.$={env:t,type:ke.type,value:ke,pathCollection:[]},e}function mk({expr:e,env:t,context:n}){it(e,[F.__yo_incr_rc_atomic[0]]);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${F.__yo_incr_rc_atomic[0]}":
11489
11489
  ${A(r)}`});return t=i.$.env,e.$={env:t,type:ke.type,value:ke,pathCollection:[]},e}function yk({expr:e,env:t,context:n}){it(e,[F.__yo_decr_rc_atomic[0]]);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${F.__yo_decr_rc_atomic[0]}":
@@ -11549,7 +11549,7 @@ ${A(v)}`});h=v.token.value}{let g=U({expr:y,env:t,context:{...n,SelfType:o}});if
11549
11549
  - Expected: ${O(t.isFn.callType.return.type)}
11550
11550
  - Given : ${O(p)}`});if(t.isFn.callType.return.isCompileTimeOnly&&!f.$.value)throw m({token:t.isFn.callType.return.typeExpr.token,errorMessage:"Expected to return a compile-time value, but got runtime value."});l=Zt(l,!0);let d=_&&_.size>0?E_({capturedVariables:_,env:r}):void 0,v=r,{capturedVariableDupExpressions:y,env:h}=$_({capturedVariablesWithValues:d,env:r,context:i});v=h;let{captureType:g}=T_({expectedCaptureType:void 0,capturedVariablesWithValues:d,env:v,closureToken:e.token,context:{...i}}),T=c.ownConsumedCaptures?Array.from(c.ownConsumedCaptures):void 0;u.closureInfo={closureType:t,captureType:g,consumedCaptures:T!=null&&T.length?T:void 0},H(n)&&g&&v_({wrapperType:n,captureType:g,env:v,errorToken:e.token});let E;return H(n)?(n.resolvedConcreteType=g,E={...n,resolvedConcreteType:g}):ht(n)?E=n:E=t,e.$={env:v,value:void 0,type:E,pathCollection:_&&_.size>0?pl(_):[],deferredDupExpressions:y&&y.length>0?y:void 0,captureType:g,closureFunctionValue:u},ht(n)&&Gt(e,!0),e}function Uk({expr:e,comptimeListType:t,argExprs:n,callerEnv:r,context:i}){let o=[],a=r,s=t.childType;for(let u=0;u<n.length;u++){let c=n[u],f=U({expr:c,env:a,context:{...i,expectedType:{type:s,env:a}}});if(!f.$)throw m({token:c.token,errorMessage:`Failed to evaluate ComptimeList element at index ${u}.`});if(cr(f,i),a=f.$.env,!Ce({type:s,env:a},{type:f.$.type,env:a}))throw m({token:c.token,errorMessage:`ComptimeList element at index ${u} has incompatible type:
11551
11551
  - Expected: ${O(s)}
11552
- - Given : ${O(f.$.type)}`});if(f.$.value!==void 0)o.push(f.$.value);else throw m({token:c.token,errorMessage:`Expected compile-time known value for ComptimeList element at index ${u}, got ${O(f.$.type)}`})}let l=wr(t.childType,o);return e.$={env:a,value:l,type:t,pathCollection:[]},e}function qk(e,t,n,r=!1,i){let o=_e(n)?n:void 0,s=Wf(e,{detect(u,c,f){var p,d,v;if(u.tag!=="FnCall")return;if(zk(u,t,i,!0)){let y=[];for(let g of u.args)(p=g.$)!=null&&p.type&&y.push(g.$.type);if(y.length===0&&o)for(let g of o.parameters)g.isCompileTimeOnly||y.push(g.type);let h=((d=u.$)==null?void 0:d.type)??(o==null?void 0:o.return.type);if(y.length>0&&h){let g=tu(c);f.push({index:f.length,expr:u,operationArgTypes:y,operationResultType:h,targetVariableId:g})}}if(r&&!zk(u,t,i)){let y=$x(u,t);if(y){let h=n,g=h.parameters.filter(E=>!E.isCompileTimeOnly).map(E=>E.type),T=y.viaClosure?h.return.type:(v=u.$)==null?void 0:v.type;if(g.length>0&&T){let E=tu(c);f.push({index:f.length,expr:u,operationArgTypes:g,operationResultType:T,targetVariableId:E,isTransitiveEffectCall:!0,isTransitiveClosureCall:y.viaClosure})}}}},shouldSkipBody(u){return Qn(u)}}),l=s.capturedVariables.map(u=>({id:u.id,name:u.name,type:u.type,isOwningTheSameRcValueAs:void 0}));return{effectCallPoints:s.suspensionPoints,capturedVariables:l,hasEffects:s.hasSuspensions,variableIdRemapping:s.variableIdRemapping,effectParameterName:t,effectParameterType:n,effectFieldPath:i}}function zk(e,t,n,r=!1){var l,u;if(e.tag!=="FnCall")return!1;let i=e.func;if(!n||n.length===0){if(i.tag!=="Atom"||i.token.value!==t)return!1;let c=(l=i.$)==null?void 0:l.type;return!(!r&&(!c||!_e(c))||r&&c&&!_e(c))}let o=[],a=i;for(;a.tag==="FnCall"&&b(a,".")&&a.args.length>=2;){let c=a.args[1];if(!c||c.tag!=="Atom")return!1;o.unshift(c.token.value),a=a.args[0]}if(a.tag!=="Atom"||a.token.value!==t||o.length!==n.length)return!1;for(let c=0;c<o.length;c++)if(o[c]!==n[c])return!1;let s=(u=i.$)==null?void 0:u.type;return!(!r&&(!s||!_e(s))||r&&s&&!_e(s))}function $x(e,t){var i,o,a;if(e.tag!=="FnCall")return;let n=(i=e.func.$)==null?void 0:i.type;if(!n)return;if(_e(n)){if(!n.implicitParameters)return;for(let s of n.implicitParameters){if(s.label===t&&(_e(s.type)||rt(s.type)))return{matched:!0,viaClosure:!1};if(s.isEffectRowSpread&&Bk(s,t,(o=e.func.$)==null?void 0:o.env))return{matched:!0,viaClosure:!1}}return}let r=Er(n);if(r){let s=r.isFn.callType;if(s.implicitParameters)for(let l of s.implicitParameters){if(l.label===t&&(_e(l.type)||rt(l.type)))return{matched:!0,viaClosure:!0};if(l.isEffectRowSpread&&Bk(l,t,(a=e.func.$)==null?void 0:a.env))return{matched:!0,viaClosure:!0}}}}function Bk(e,t,n){var o,a;if(!n)return!1;let r=e.type,i;if(H(r)&&r.isEffectsRow){let l=(a=(o=ve(n,e.label).at(-1))==null?void 0:o.value)==null?void 0:a[0];if(l&&X(l)&&ln(l.value))i=l.value;else{let u=Xn(n,r);ln(u)&&(i=u)}}else ln(r)&&(i=r);if(i){for(let s of i.implicitParameters)if(s.label===t&&(_e(s.type)||rt(s.type)))return!0}return!1}function Wk(e,t){for(let n=0;n<e.fields.length;n++){let r=e.fields[n];if(_e(r.type)){let i=t==null?void 0:t.fields[n];if(i&&Se(i)&&i.isControlFunction)return!0}if(rt(r.type)){let i=t==null?void 0:t.fields[n];if(Wk(r.type,i&&Rt(i)?i:void 0))return!0}}return!1}function bx({variablesToDrop:e,env:t,context:n}){var o;let r=[],i=t;for(let a of e){let s=Qt(`${F.___drop[0]}(${a.name})`),l=U({expr:s,env:i,context:{...n,expectedType:void 0}});if(r.push(l),(o=l.$)!=null&&o.env)i=l.$.env;else throw m({token:s.token,errorMessage:`Failed to evaluate "___drop" expression for variable "${a.name}":
11552
+ - Given : ${O(f.$.type)}`});if(f.$.value!==void 0)o.push(f.$.value);else throw m({token:c.token,errorMessage:`Expected compile-time known value for ComptimeList element at index ${u}, got ${O(f.$.type)}`})}let l=wr(t.childType,o);return e.$={env:a,value:l,type:t,pathCollection:[]},e}function qk(e,t,n,r=!1,i){let o=_e(n)?n:void 0,s=Wf(e,{detect(u,c,f){var p,d,v;if(u.tag!=="FnCall")return;if(zk(u,t,i,!0)){let y=[];for(let g of u.args)(p=g.$)!=null&&p.type&&y.push(g.$.type);if(y.length===0&&o)for(let g of o.parameters)g.isCompileTimeOnly||y.push(g.type);let h=((d=u.$)==null?void 0:d.type)??(o==null?void 0:o.return.type);if(y.length>0&&h){let g=tu(c);f.push({index:f.length,expr:u,operationArgTypes:y,operationResultType:h,targetVariableId:g})}}if(r&&!zk(u,t,i)){let y=$x(u,t);if(y){let h=n,g=h.parameters.filter(E=>!E.isCompileTimeOnly).map(E=>E.type),T=y.viaClosure?h.return.type:(v=u.$)==null?void 0:v.type;if(g.length>0&&T){let E=tu(c);f.push({index:f.length,expr:u,operationArgTypes:g,operationResultType:T,targetVariableId:E,isTransitiveEffectCall:!0,isTransitiveClosureCall:y.viaClosure})}}}},shouldSkipBody(u){return Qn(u)}}),l=s.capturedVariables.map(u=>({id:u.id,name:u.name,type:u.type,isOwningTheSameRcValueAs:void 0}));return{effectCallPoints:s.suspensionPoints,capturedVariables:l,hasEffects:s.hasSuspensions,variableIdRemapping:s.variableIdRemapping,effectParameterName:t,effectParameterType:n,effectFieldPath:i}}function zk(e,t,n,r=!1){var l,u;if(e.tag!=="FnCall")return!1;let i=e.func;if(!n||n.length===0){if(i.tag!=="Atom"||i.token.value!==t)return!1;let c=(l=i.$)==null?void 0:l.type;return!(!r&&(!c||!_e(c))||r&&c&&!_e(c))}let o=[],a=i;for(;a.tag==="FnCall"&&b(a,".")&&a.args.length>=2;){let c=a.args[1];if(!c||c.tag!=="Atom")return!1;o.unshift(c.token.value),a=a.args[0]}if(a.tag!=="Atom"||a.token.value!==t||o.length!==n.length)return!1;for(let c=0;c<o.length;c++)if(o[c]!==n[c])return!1;let s=(u=i.$)==null?void 0:u.type;return!(!r&&(!s||!_e(s))||r&&s&&!_e(s))}function $x(e,t){var i,o,a;if(e.tag!=="FnCall")return;let n=(i=e.func.$)==null?void 0:i.type;if(!n)return;if(_e(n)){if(!n.implicitParameters)return;for(let s of n.implicitParameters){if(s.label===t&&(_e(s.type)||rt(s.type)))return{matched:!0,viaClosure:!1};if(s.isEffectRowSpread&&Bk(s,t,(o=e.func.$)==null?void 0:o.env))return{matched:!0,viaClosure:!1}}return}let r=Er(n);if(r){let s=r.isFn.callType;if(s.implicitParameters)for(let l of s.implicitParameters){if(l.label===t&&(_e(l.type)||rt(l.type)))return{matched:!0,viaClosure:!0};if(l.isEffectRowSpread&&Bk(l,t,(a=e.func.$)==null?void 0:a.env))return{matched:!0,viaClosure:!0}}}}function Bk(e,t,n){var o,a;if(!n)return!1;let r=e.type,i;if(H(r)&&r.isEffectsRow){let l=(a=(o=ve(n,e.label).at(-1))==null?void 0:o.value)==null?void 0:a[0];if(l&&X(l)&&ln(l.value))i=l.value;else{let u=Xn(n,r);ln(u)&&(i=u)}}else ln(r)&&(i=r);if(i){for(let s of i.implicitParameters)if(s.label===t&&(_e(s.type)||rt(s.type)))return!0}return!1}function Wk(e,t){for(let n=0;n<e.fields.length;n++){let r=e.fields[n];if(_e(r.type)){let i=t==null?void 0:t.fields[n];if(i&&Ie(i)&&i.isControlFunction)return!0}if(rt(r.type)){let i=t==null?void 0:t.fields[n];if(Wk(r.type,i&&Rt(i)?i:void 0))return!0}}return!1}function bx({variablesToDrop:e,env:t,context:n}){var o;let r=[],i=t;for(let a of e){let s=Qt(`${F.___drop[0]}(${a.name})`),l=U({expr:s,env:i,context:{...n,expectedType:void 0}});if(r.push(l),(o=l.$)!=null&&o.env)i=l.$.env;else throw m({token:s.token,errorMessage:`Failed to evaluate "___drop" expression for variable "${a.name}":
11553
11553
  ${A(s)}`})}return{deferredDropExpressions:r.length>0?r:void 0,env:i}}function Cx({functionType:e,definitionSiteEnclosingFunctionType:t,parameter:n,argExprs:r,argIndex:i,calleeEnv:o,callerEnv:a,context:s,isMethodCall:l,runtimeArgExprsInOrder:u}){var C,w,I,L,x,V,M,q,P,R,te;let c=r[i],f;if(c&&S(c)&&b(c,":",2)){if(f=c.args[0],c=c.args[1],!Q(f))throw m({token:f.token,errorMessage:`Expected identifier for label, got:
11554
11554
  ${A(f)}`});let j=f.token.value;if(n.label==="")throw m({token:f.token,errorMessage:"Named argument call is not allowed for this parameter (it has no label)."});if(n.label!==j)throw m({token:f.token,errorMessage:`Named argument is not supported. Label is only used for readibility.
11555
11555
  Expected ${n?`label "${n.label}"`:"no label"} at the argument position, but got "${j}".`})}let{parameterType:_,calleeEnv:p}=bu({functionType:e,definitionSiteEnclosingFunctionType:t,parameter:n,calleeEnv:o,context:{...s,isEvaluatingFunctionType:!0}});o=p;let d;if(!c||Q(c)&&Tn(c,B.undefined))if(n.exprs.defaultValueExpr)d=U({expr:Et(n.exprs.defaultValueExpr),env:o,context:{...s,expectedType:{type:_,env:o}}}),(C=d.$)!=null&&C.env&&(o=(w=d.$)==null?void 0:w.env),c&&(c.$=d.$),n.isCompileTimeOnly||u.push(d);else throw m({token:(c==null?void 0:c.token)??Ue,errorMessage:`Expected default value for parameter "${n.label}"`});else if(n.isQuote)if(Pn(_))d=Et(c),d.$={type:ir(),value:vr(c),env:a,pathCollection:[]};else throw m({token:c.token,errorMessage:`Expected "Expr" type for "quote" parameter "${n.label}", got:
@@ -11560,13 +11560,13 @@ Got: ${bt(d.$.value)}`});let y=d.$.value;if(!n.isCompileTimeOnly&&Oa(v,d.$.env
11560
11560
  ${A(d)}`});let h=n.isCompileTimeOnly||s.forceCompileTimeBindings===!0,T=!h&&H(_)&&(((te=(R=ai(o,_))==null?void 0:R.requiredTraits)==null?void 0:te.length)??0)>0?{..._,resolvedConcreteType:v}:v,{env:E}=je({env:o,variable:{name:n.label,type:T,isCompileTimeOnly:h,value:y?[y]:void 0,token:(c==null?void 0:c.token)??Ue,initializedAtToken:(c==null?void 0:c.token)??Ue,consumedAtToken:void 0,isOwningTheRcValue:n.isOwningTheRcValue}});if(o=E,y&&X(y)&&H(y.value)){let j=y.value,Y=ai(a,j);if(Y){for(let le of Y.requiredTraits){let Z={...le,receiverType:j};o=to({env:o,someType:j,traitType:Z,isNegated:!1})}for(let le of Y.negativeTraits){let Z={...le,receiverType:j};o=to({env:o,someType:j,traitType:Z,isNegated:!0})}}}try{let{expectedEnv:j}=Kt({type:_,env:o},{type:v,env:a});o=j}catch(j){throw m({token:(c==null?void 0:c.token)??Ue,errorMessage:`Failed to synthesize types for parameter "${n.label}":
11561
11561
  ${j.message}`})}let{parameterType:$,calleeEnv:k}=bu({functionType:e,definitionSiteEnclosingFunctionType:t,parameter:n,calleeEnv:o,context:{...s,isEvaluatingFunctionType:!0}});if(o=k,!Ce({type:$,env:o},{type:v,env:a},i===0&&l))throw m({token:(c==null?void 0:c.token)??Ue,errorMessage:`Type mismatch for parameter "${n.label}":
11562
11562
  Expected: ${O($)}
11563
- Got: ${O(v)}`});return{calleeEnv:o,callerEnv:a,context:{...s},argValue:y,argType:v,parameterType:$}}function ml(e){if(e&&Se(e))return e}function b_(e){let t=process.env[e];return t==="1"||(t==null?void 0:t.toLowerCase())==="true"}var k_=b_("YO_DEBUG_CALL")||b_("YO_DEBUG_CALL_PROFILE")||b_("YO_DEBUG_EVAL")||b_("YO_DEBUG_EVAL_PROFILE"),Gk=globalThis,ko=Gk.__yoCallProfilerState??(Gk.__yoCallProfilerState={tryCallCount:0,specializeCount:0,cacheHitCount:0,cacheMissCount:0,specializeNames:new Map,tryCallNames:new Map});function $a({expr:e,functionValue:t,functionType:n,functionCalleeExpr:r,argExprs:i,callerEnv:o,context:a,isMethodCall:s,skipSpecialization:l,skipCtfeExecution:u}){var De,ze,We,pe,fe,$e,Le,Me,Ze,$t,It,jt,st,Ct,rn,Bt,gt,ut,Nt,Yt,wt,Ft,ee,W,oe,me,de,ye,he,Be,qe,Pe;if(k_){ko.tryCallCount++;let ie="(unknown)";t&&"funcName"in t&&t.funcName?ie=t.funcName:t&&"funcId"in t?ie=String(t.funcId):r&&(ie=A(r).slice(0,60)),ko.tryCallNames.set(ie,(ko.tryCallNames.get(ie)??0)+1),ko.tryCallCount<=5&&console.log(`[DEBUG tryCall] #${ko.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,v=0;i.length>0&&S(i[0])&&b(i[0],B.forall)?(c=i[0],v=1):s&&i.length>1&&S(i[1])&&b(i[1],B.forall)&&(c=i[1],i=[i[0],...i.slice(2)]);let y,h=i.slice(v),g=h.findIndex(ie=>S(ie)&&b(ie,B.using));if(g!==-1){let ie=h.findIndex((ae,we)=>we>g&&S(ae)&&b(ae,B.using));if(ie!==-1)throw m({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))'});y=h[g],h=[...h.slice(0,g),...h.slice(g+1)]}let T=n.parameters.length,E=h;if(!n.variadicParameter){if(E.length>T){let ie=n.parameters.at(-1);if(!(ie&&ie.isQuote&&Va(ie.type)))throw m({token:(r==null?void 0:r.token)??Ue,errorMessage:`Too many arguments for function call:
11563
+ Got: ${O(v)}`});return{calleeEnv:o,callerEnv:a,context:{...s},argValue:y,argType:v,parameterType:$}}function ml(e){if(e&&Ie(e))return e}function b_(e){let t=process.env[e];return t==="1"||(t==null?void 0:t.toLowerCase())==="true"}var k_=b_("YO_DEBUG_CALL")||b_("YO_DEBUG_CALL_PROFILE")||b_("YO_DEBUG_EVAL")||b_("YO_DEBUG_EVAL_PROFILE"),Gk=globalThis,ko=Gk.__yoCallProfilerState??(Gk.__yoCallProfilerState={tryCallCount:0,specializeCount:0,cacheHitCount:0,cacheMissCount:0,specializeNames:new Map,tryCallNames:new Map});function $a({expr:e,functionValue:t,functionType:n,functionCalleeExpr:r,argExprs:i,callerEnv:o,context:a,isMethodCall:s,skipSpecialization:l,skipCtfeExecution:u}){var De,ze,We,pe,fe,$e,Le,Me,Ze,$t,It,jt,st,Ct,rn,Bt,gt,ut,Nt,Yt,wt,Ft,ee,W,oe,me,de,ye,he,Be,qe,Pe;if(k_){ko.tryCallCount++;let ie="(unknown)";t&&"funcName"in t&&t.funcName?ie=t.funcName:t&&"funcId"in t?ie=String(t.funcId):r&&(ie=A(r).slice(0,60)),ko.tryCallNames.set(ie,(ko.tryCallNames.get(ie)??0)+1),ko.tryCallCount<=5&&console.log(`[DEBUG tryCall] #${ko.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,v=0;i.length>0&&S(i[0])&&b(i[0],B.forall)?(c=i[0],v=1):s&&i.length>1&&S(i[1])&&b(i[1],B.forall)&&(c=i[1],i=[i[0],...i.slice(2)]);let y,h=i.slice(v),g=h.findIndex(ie=>S(ie)&&b(ie,B.using));if(g!==-1){let ie=h.findIndex((ae,we)=>we>g&&S(ae)&&b(ae,B.using));if(ie!==-1)throw m({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))'});y=h[g],h=[...h.slice(0,g),...h.slice(g+1)]}let T=n.parameters.length,E=h;if(!n.variadicParameter){if(E.length>T){let ie=n.parameters.at(-1);if(!(ie&&ie.isQuote&&Va(ie.type)))throw m({token:(r==null?void 0:r.token)??Ue,errorMessage:`Too many arguments for function call:
11564
11564
  Expected: ${T} arguments
11565
11565
  Got: ${E.length} arguments`})}else if(E.length<T&&!n.parameters.slice(E.length).every(ae=>ae.exprs.defaultValueExpr!==void 0))throw m({token:(r==null?void 0:r.token)??Ue,errorMessage:`Too few arguments for function call:
11566
11566
  Expected: ${T} arguments
11567
11567
  Got: ${E.length} arguments`})}let $=h.slice(0,T),k=h.slice(T);i=$,o=vt(o);let C=vt(n.env);if(n.SelfType){let ie=xe(n.SelfType),{env:ae}=je({env:C,variable:{name:"Self",token:Ue,type:ie.type,isCompileTimeOnly:!0,initializedAtToken:Ue,consumedAtToken:void 0,value:[ie],isOwningTheRcValue:!1},allowVariableShadowing:!0});C=ae}for(let ie=0;ie<n.forallParameters.length;ie++){let ae=n.forallParameters[ie],we;if(ae.exprs.labelExpr&&ae.label){let tt=Lt(ae.type)&&ae.type.level===1&&S(ae.exprs.expr)&&b(ae.exprs.expr,"...",1)?xe(Wa(ae.label,C)):Ee(ae.type,{variableName:ae.label,env:C,context:a}),{env:Ae,variable:He}=je({env:C,variable:{name:ae.label,type:ae.type,isCompileTimeOnly:!0,value:[tt],token:ae.exprs.labelExpr.token,initializedAtToken:ae.exprs.labelExpr.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});C=Ae,we=He}if(c){let Ne=c.args[ie],tt;if(S(Ne)&&b(Ne,":",2)){if(tt=Ne.args[0],Ne=Ne.args[1],!Q(tt))throw m({token:tt.token,errorMessage:`Expected identifier for type parameter label, got:
11568
11568
  ${A(tt)}`});if(ae.label!==tt.token.value)throw m({token:tt.token,errorMessage:`Expected type parameter label "${ae.label}", got "${tt.token.value}".`})}let Ae;if(Q(Ne)&&Ne.token.value==="_")continue;if(!Ne||Q(Ne)&&Tn(Ne,B.undefined))if(ae.exprs.defaultValueExpr){let Je=U({expr:Et(ae.exprs.defaultValueExpr),env:C,context:{...a}});if((De=Je.$)!=null&&De.env&&(o=Je.$.env),Ne&&(Ne.$=Je.$),!X((ze=Je.$)==null?void 0:ze.value))throw m({token:(Ne==null?void 0:Ne.token)??(r==null?void 0:r.token)??Ue,errorMessage:Ne?`Expected type for default value, got:
11569
- ${A(Ne)}`:"Expected type for default value."});Ae=(We=Je.$)==null?void 0:We.value}else throw m({token:(Ne==null?void 0:Ne.token)??(r==null?void 0:r.token)??Ue,errorMessage:"Type parameter does not have default value."});else{let Je=U({expr:Ne,env:o,context:{...a,expectedType:{type:ae.type,env:C}}});if((pe=Je.$)!=null&&pe.env&&(o=Je.$.env),_e(ae.type)){if(!Se((fe=Je.$)==null?void 0:fe.value))throw m({token:Ne.token,errorMessage:`Expected type constructor for HKT parameter "${ae.label}", got:
11569
+ ${A(Ne)}`:"Expected type for default value."});Ae=(We=Je.$)==null?void 0:We.value}else throw m({token:(Ne==null?void 0:Ne.token)??(r==null?void 0:r.token)??Ue,errorMessage:"Type parameter does not have default value."});else{let Je=U({expr:Ne,env:o,context:{...a,expectedType:{type:ae.type,env:C}}});if((pe=Je.$)!=null&&pe.env&&(o=Je.$.env),_e(ae.type)){if(!Ie((fe=Je.$)==null?void 0:fe.value))throw m({token:Ne.token,errorMessage:`Expected type constructor for HKT parameter "${ae.label}", got:
11570
11570
  ${A(Ne)}`});Ae=($e=Je.$)==null?void 0:$e.value}else{if(!X((Le=Je.$)==null?void 0:Le.value))throw m({token:Ne.token,errorMessage:`Expected type for argument, got:
11571
11571
  ${A(Ne)}`});Ae=(Me=Je.$)==null?void 0:Me.value}}tt&&(tt.$={env:C,type:Ae.type,value:Ae,pathCollection:[]});let He=_e(ae.type),Qe=ae.type;if(!He){let{parameterType:Je,calleeEnv:lt}=bu({parameter:ae,calleeEnv:C,definitionSiteEnclosingFunctionType:d,context:{...a,isEvaluatingFunctionType:!0},functionType:n});C=lt,Qe=Je;let{expectedEnv:re,givenEnv:N}=Kt({type:Qe,env:C},{type:Ae.type,env:o});if(C=re,o=N,!Ce({type:Qe,env:C},{type:Ae.type,env:o}))throw m({token:(Ne==null?void 0:Ne.token)??(r==null?void 0:r.token)??Ue,errorMessage:`Type mismatch for type parameter "${ae.label}":
11572
11572
  Expected: ${O(Qe)}
@@ -11581,9 +11581,9 @@ Or pass it explicitly:
11581
11581
  ${(t==null?void 0:t.funcName)??"func"}(..., using(<value>))`});if(Ae[Ae.length-1].isFromEffectSpread&&!(()=>{if(!r||!Q(r))return!1;let K=r.token.value,G=a.isEvaluatingFunctionBodyOrAsyncBlock;return!G||G.kind!=="function-body"?!1:G.type.parameters.some(D=>D.label===K)})())throw m({token:(r==null?void 0:r.token)??(e==null?void 0:e.token)??Ue,errorMessage:`Effect "${ae.label}" of type ${O(Ne)} is available through an effect row spread but not explicitly declared in the function's using clause.
11582
11582
  Add it explicitly:
11583
11583
  using(${ae.label} : ${O(Ne)}, ...(E))`});let Qe=Ae;if(Qe.length>1){let N=lu(o,K=>K.isImplicit===!0&&K.isCompileTimeOnly===!0&&Ce({type:Ne,env:C},{type:K.type,env:o}));if(N>=0){let G=o.frames[N].variables.filter(z=>z.isImplicit===!0&&z.isCompileTimeOnly===!0&&Ce({type:Ne,env:C},{type:z.type,env:o}));G.length>0&&(Qe=G)}}if(Qe.length>1)throw m({token:(r==null?void 0:r.token)??(e==null?void 0:e.token)??Ue,errorMessage:`Ambiguous implicit parameter "${ae.label}": found ${Qe.length} "given" variables with compatible type ${O(Ne)} in the same scope.
11584
- Please use explicit using() to disambiguate.`});let Je=Qe[Qe.length-1],lt=(Ft=Je.value)==null?void 0:Ft[0];if(!lt)throw m({token:(r==null?void 0:r.token)??(e==null?void 0:e.token)??Ue,errorMessage:`The "given" variable "${Je.name}" has no compile-time value.`});M.push({value:lt,parameterType:Ne,argType:Je.type});let{env:re}=je({env:C,variable:{name:ae.label,type:Ne,isCompileTimeOnly:!0,isImplicit:!0,value:[lt],token:((ee=ae.exprs.labelExpr)==null?void 0:ee.token)??Ue,initializedAtToken:((W=ae.exprs.labelExpr)==null?void 0:W.token)??Ue,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});C=re}}let q={args:_,forallArgs:f,implicitArgs:M,variadicArgs:x},P;if(n.return.isCompileTimeOnly)if(u)P=Ee(I,{variableName:n.return.label,env:n.env,context:a});else if(Se(t)){let{value:ie,callerEnv:ae,calleeEnv:we}=qo({functionCalleeExpr:r,functionType:n,functionValue:t,argValues:q,callerEnv:o,calleeEnv:C,context:{...a}});P=ie,I=ie.type,o=ae,C=we}else{let ie=Lt(I)&&I.level===0,ae=`${n.id}_return_sometype`;if(ie)if((oe=a.expectedType)!=null&&oe.type)P=xe(a.expectedType.type);else if(a.isEvaluatingFunctionType){let we=Zr(I,n.return.label,{id:ae,env:C,context:a});we.functionApplication=e;let Ne=Xn(C,we);P=xe(Ne)}else throw m({token:(e==null?void 0:e.token)??(r==null?void 0:r.token)??Ue,errorMessage:"Cannot infer comptime return type. Please provide the expected type."});else P=Ee(I,{variableName:n.return.label,env:n.env,context:a})}Lx({returnType:I,env:C,expr:e,context:a});let R,te=((me=a.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:me.kind)==="function-body"&&a.isEvaluatingFunctionBodyOrAsyncBlock.value&&Se(a.isEvaluatingFunctionBodyOrAsyncBlock.value)&&t&&Se(t)&&a.isEvaluatingFunctionBodyOrAsyncBlock.value.funcId===t.funcId,j=(de=q.implicitArgs)==null?void 0:de.some(ie=>Ge(ie.value)),Y=j&&!((ye=q.implicitArgs)!=null&&ye.some(ie=>Ge(ie.value)&&!rt(ie.parameterType))),le=q.args.some(ie=>ie.argType&&H(ie.argType)),Z=Y&&le,ce=(()=>{if(!j||!n.implicitParameters.some(Ne=>Ne.isEffectRowSpread))return!1;let ae=0;for(let Ne of n.implicitParameters)Ne.isEffectRowSpread||ae++;let we=q.implicitArgs??[];for(let Ne=0;Ne<ae&&Ne<we.length;Ne++)if(Ge(we[Ne].value))return!1;return!0})(),Ie=Di(n)&&!_o(n)&&n.implicitParameters.some(ie=>rt(ie.type)?ie.type.fields.some(ae=>_e(ae.type)&&ae.type.forallParameters.length===0):!!ie.isEffectRowSpread);if(!l&&!Ie&&t&&Se(t)&&!t.isControlFunction&&Di(n)&&!te&&(!j||Z||ce)){if(R=wx({originalFunction:t,argValues:q,calleeEnv:C,callerEnv:o,context:a}),R&&H(I)){let ie=(Be=(he=R.body)==null?void 0:he.$)==null?void 0:Be.type;ie&&!H(ie)&&(I=ie,R.specializedType&&(R.specializedType={...R.specializedType,return:{...R.specializedType.return,type:ie}}))}if(R){let ie=new Set,ae=0;for(let we=0;we<n.parameters.length;we++)if(!n.parameters[we].isCompileTimeOnly){let tt=q.args[we],Ae=tt==null?void 0:tt.value;Ae&&Se(Ae)&&Ae.type.implicitParameters.some(He=>_e(He.type)||rt(He.type))&&ie.add(ae),ae++}if(ie.size>0)for(let we=p.length-1;we>=0;we--)ie.has(we)&&p.splice(we,1)}}if(te&&!R&&a.currentlySpecializingFunction&&t&&Se(t)){let ie=a.currentlySpecializingFunction;R={...t,funcId:ie.specializedFuncId,specializedType:{...n,return:{...n.return,type:ie.specializedReturnType}}},H(I)&&(I=ie.specializedReturnType)}if(!l&&t&&Se(t)&&t.isControlFunction&&n.forallParameters.length>0&&!R&&(R=Fx({originalFunction:t,argValues:q,calleeEnv:C,callerEnv:o,context:a}),R&&H(I))){let ie=(Pe=(qe=R.body)==null?void 0:qe.$)==null?void 0:Pe.type;ie&&!H(ie)&&(I=ie,R.specializedType&&(R.specializedType={...R.specializedType,return:{...R.specializedType.return,type:ie}}))}let ge=Ks(o),be;if(ge.length>0){let ie=bx({variablesToDrop:ge,env:o,context:a});be=ie.deferredDropExpressions,o=ie.env}return{returnType:I,calleeEnv:C,callerEnv:o,pathCollection:V,argValues:q,returnValue:P,specializedFunctionValue:R,runtimeArgExprsInOrder:p,deferredDropExpressions:be}}function C_(e){if(X(e)){let t=e.value;if(t.id)return`${bt(e)}_id${t.id}`}return Se(e)?`fn_${e.funcId}`:bt(e)}function kx({functionType:e,argValues:t,calleeEnv:n,runtimeParameters:r}){let i=[];return e.forallParameters.forEach((o,a)=>{var s,l;if(a<t.forallArgs.length){let u=t.forallArgs[a];i.push(Ve(C_(u.value)))}else{let u=o.label,c=ve(n,u);c.length>0&&((l=(s=c[c.length-1])==null?void 0:s.value)!=null&&l[0])?i.push(Ve(C_(c[c.length-1].value[0]))):i.push("unknown")}}),e.parameters.forEach((o,a)=>{if(o.isCompileTimeOnly&&a<t.args.length){let s=t.args[a];s?i.push(Ve(C_(s.value))):i.push("unknown")}}),t.implicitArgs&&t.implicitArgs.forEach(o=>{i.push(Ve(C_(o.value)))}),r.forEach((o,a)=>{let s=o.type;(s.id||Xe(s))&&i.push(`rtparam${a}_${Ve(O(s))}_id${s.id}`)}),i.join("_")}function wx({originalFunction:e,argValues:t,calleeEnv:n,callerEnv:r,context:i}){var V,M,q,P,R,te,j,Y,le,Z,ce,Te,Ie;if(k_){ko.specializeCount++;let ge=e.funcName??e.funcId;ko.specializeNames.set(ge,(ko.specializeNames.get(ge)??0)+1)}let o=e.specializedType??e.type,a=[],s=[];t.forallArgs&&a.push(...t.forallArgs.map(ge=>ge.value)),t.implicitArgs&&a.push(...t.implicitArgs.map(ge=>ge.value)),o.parameters.forEach((ge,be)=>{let De=t.args[be];if(ge.isCompileTimeOnly)De.value&&a.push(De.value);else if(De.value&&Se(De.value)&&De.value.type.implicitParameters.some(We=>_e(We.type)||rt(We.type)))De.value&&a.push(De.value);else{let pe=H(De.argType)&&De.argType.resolvedConcreteType&&!yt(De.argType)?De.argType.resolvedConcreteType:De.argType;s.push({...ge,type:pe})}});let l=s.map(ge=>ge.type),u=e.specializedFunctionCaches.find(ge=>ge.compileTimeArgValues.length===a.length&&ge.compileTimeArgValues.every((ze,We)=>{let pe=a[We];return Un({value:ze,env:ge.env},{value:pe,env:r})})?ge.runtimeParameterTypes.length===l.length&&ge.runtimeParameterTypes.every((ze,We)=>{let pe=l[We];return Ce({type:ze,env:ge.env},{type:pe,env:r},!0)}):!1);if(u)return k_&&ko.cacheHitCount++,u.specializedFunction;k_&&ko.cacheMissCount++;let c=n;for(let ge of r.frames)for(let be of ge.variables){if(!be.isCompileTimeOnly||ve(c,be.name).length>0)continue;let{env:ze}=je({env:c,variable:{...be},allowVariableShadowing:!0});c=ze}for(let ge of s){let be=ve(c,ge.label);if(be.length>0){let De=be[be.length-1],ze={...De,value:void 0};c=zt(c,De,ze)}}let f=Et(e.body),{returnType:_,calleeEnv:p}=rs({functionType:o,calleeEnv:c,context:{...i,isEvaluatingFunctionType:!0},functionCalleeExpr:void 0});c=p;let d=i.enclosingFunctionReturnType,v=((V=t.implicitArgs)==null?void 0:V.some(ge=>Se(ge.value)&&ge.value.isControlFunction||Rt(ge.value)&&Wk(ge.value.type,ge.value)))??!1,y=kx({functionType:o,argValues:t,calleeEnv:n,runtimeParameters:s}),h=`${e.funcId}_${y}`,g=i.currentlySpecializingFunction;i.currentlySpecializingFunction={originalFuncId:e.funcId,specializedFuncId:h,specializedReturnType:_,originalFunction:e};let T=En({expr:f,env:c,context:{...i,expectedType:{type:_,env:c},isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:{...o,return:{...o.return,type:_}},value:e,evaluationEnv:c},isEvaluatingLoopBody:void 0,capturedVariables:void 0,functionReturnImplConcreteType:[],hasControlFunctionImplicitParams:v,...d?{enclosingFunctionReturnType:d}:{}},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(i.currentlySpecializingFunction=g,!T.$)throw m({token:e.body.token,errorMessage:"Failed to evaluate function body for specialization."});let E=[],$=0;for(let ge=0;ge<o.implicitParameters.length;ge++){let be=o.implicitParameters[ge];if(_e(be.type)){let De=(M=t.implicitArgs)==null?void 0:M[$],ze=De&&Se(De.value)?De.value:void 0;ze!=null&&ze.isControlFunction&&E.push({handlerArgIndex:$,label:be.label,type:be.type,fromSpread:!1}),$+=1}else if(be.isEffectRowSpread){let De=be.type;if(H(De)){let We=(P=(q=ve(c,be.label).at(-1))==null?void 0:q.value)==null?void 0:P[0];if(We&&X(We)&&ln(We.value))De=We.value;else{let pe=Xn(c,De);pe&&(De=pe)}}if(ln(De)){for(let ze=0;ze<De.implicitParameters.length;ze++){let We=De.implicitParameters[ze];if(_e(We.type)){let pe=(R=t.implicitArgs)==null?void 0:R[$+ze],fe=pe&&Se(pe.value)?pe.value:void 0;fe!=null&&fe.isControlFunction&&E.push({handlerArgIndex:$+ze,label:We.label,type:We.type,fromSpread:!0})}else if(rt(We.type)){let pe=(te=t.implicitArgs)==null?void 0:te[$+ze],fe=pe&&Rt(pe.value)?pe.value:void 0,$e=[],Le=(Me,Ze,$t)=>{for(let It=0;It<Me.fields.length;It++){let jt=Me.fields[It];if(_e(jt.type)){let st=$t==null?void 0:$t.fields[It];if(st&&Se(st)&&st.isControlFunction){let Ct=st.specializedType??jt.type;$e.push({path:[...Ze,jt.label],type:Ct})}}else if(rt(jt.type)){let st=$t==null?void 0:$t.fields[It];Le(jt.type,[...Ze,jt.label],st&&Rt(st)?st:void 0)}}};Le(We.type,[],fe);for(let Me of $e)E.push({handlerArgIndex:$+ze,label:We.label,type:Me.type,fromSpread:!0,effectFieldPath:Me.path})}}$+=De.implicitParameters.length}else $+=1}else if(rt(be.type)){let De=[],ze=(j=t.implicitArgs)==null?void 0:j[$],We=(pe,fe,$e)=>{for(let Le=0;Le<pe.fields.length;Le++){let Me=pe.fields[Le];if(_e(Me.type)){let Ze=$e==null?void 0:$e.fields[Le];if(Ze&&Se(Ze)&&Ze.isControlFunction){let $t=Ze.specializedType??Me.type;De.push({path:[...fe,Me.label],type:$t})}}else if(rt(Me.type)){let Ze=$e==null?void 0:$e.fields[Le];We(Me.type,[...fe,Me.label],Ze&&Rt(Ze)?Ze:void 0)}}};We(be.type,[],ze&&Rt(ze.value)?ze.value:void 0);for(let pe of De)E.push({handlerArgIndex:$,label:be.label,type:pe.type,fromSpread:!1,effectFieldPath:pe.path});$+=1}else $+=1}let k=[];for(let ge of E){let be=qk(T,ge.label,ge.type,!0,ge.effectFieldPath);if(be.hasEffects){let De=(Y=t.implicitArgs)==null?void 0:Y[ge.handlerArgIndex],ze,We=ge.effectFieldPath;if(De&&Se(De.value))ze=De.value;else if(De&&Rt(De.value)&&We&&We.length>0){let pe=De.value;for(let fe of We){if(!Rt(pe)){pe=void 0;break}let $e=pe.type.fields.findIndex(Le=>Le.label===fe);if($e<0||!pe.fields[$e]){pe=void 0;break}pe=pe.fields[$e]}pe&&Se(pe)&&(ze=pe)}if(ze){let pe=ze,fe=ge.type,$e=!pe.body.$;if(!$e&&pe.isControlFunction&&S(pe.body)&&pe.body.args.length>0&&!((le=pe.body.args[0])!=null&&le.$)&&($e=!0),$e&&_e(fe)&&fe.forallParameters.length>0&&be.effectCallPoints.length>0){let Le=new Map,Me=fe.return.type,Ze=be.effectCallPoints[0].operationResultType;if(H(Me)&&Le.set(Me.name,Ze),Le.size===0&&fe.forallParameters.length===1){let rn=fe.forallParameters[0];Le.set(rn.label,Ze)}let $t=Et(pe.body),It=((Z=pe.body.$)==null?void 0:Z.env)??c;It=vt(It);for(let rn of fe.forallParameters){let Bt=Le.get(rn.label);Bt&&(It=je({env:It,variable:{name:rn.label,type:rn.type,isCompileTimeOnly:!0,value:[xe(Bt)],token:Ue,initializedAtToken:Ue,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0}).env)}let jt=pe.specializedType??pe.type,st=((ce=pe.definitionSiteEnclosingFunctionType)==null?void 0:ce.return.type)??Ci(),Ct={...i,expectedType:void 0,enclosingFunctionReturnType:st,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:jt,value:pe,evaluationEnv:It}};try{let rn=ba({expr:$t,env:It,context:Ct}),Bt=jt.parameters.map(Yt=>{if(Yt.isCompileTimeOnly)return Yt;if(H(Yt.type)){let wt=Le.get(Yt.type.name);if(wt)return{...Yt,type:wt}}return Yt}),gt=jt.return.type;if(H(gt)){let Yt=Le.get(gt.name);Yt&&(gt=Yt)}let ut={...jt,parameters:Bt,return:{...jt.return,type:gt}},Nt={...pe,body:rn,specializedType:ut};be.handlerValue=Nt,be.effectParameterType=ut;for(let Yt of be.effectCallPoints)Yt.isTransitiveEffectCall&&(Yt.operationArgTypes=Yt.operationArgTypes.map(wt=>H(wt)?Le.get(wt.name)??wt:wt))}catch(rn){if(S(pe.body)&&pe.body.args.length>0&&!((Te=pe.body.args[0])!=null&&Te.$))throw rn;be.handlerValue=pe}}else be.handlerValue=pe}else De&&(be.handlerValue=De.value);k.push({analysis:be,ctlParam:ge})}}if(k.length===1)T.$.effectAnalysis=k[0].analysis;else if(k.length>1){let ge=[],be=new Map,De=new Map,ze=[];for(let fe=0;fe<k.length;fe++){let{analysis:$e}=k[fe];ze.push({effectParameterName:$e.effectParameterName,effectParameterType:$e.effectParameterType,effectFieldPath:$e.effectFieldPath,handlerValue:$e.handlerValue,operationArgTypes:$e.effectCallPoints.length>0?$e.effectCallPoints[0].operationArgTypes:[],operationResultType:$e.effectCallPoints.length>0?$e.effectCallPoints[0].operationResultType:{tag:"unit"}});for(let Le of $e.effectCallPoints)ge.push({...Le,effectIndex:fe});for(let Le of $e.capturedVariables)be.has(Le.id)||be.set(Le.id,Le);for(let[Le,Me]of $e.variableIdRemapping)De.set(Le,Me)}if(S(T)&&b(T,B.begin)){let fe=T.args,$e=new Map;for(let Me=0;Me<fe.length;Me++)$e.set(fe[Me],Me);let Le=Me=>{for(let Ze=0;Ze<fe.length;Ze++)if(Qm(fe[Ze],Me.expr))return Ze;return 999};ge.sort((Me,Ze)=>Le(Me)-Le(Ze))}for(let fe=0;fe<ge.length;fe++)ge[fe].index=fe;let We=k[0].analysis,pe={effectCallPoints:ge,capturedVariables:Array.from(be.values()),hasEffects:!0,variableIdRemapping:De,effectParameterName:We.effectParameterName,effectParameterType:We.effectParameterType,effectFieldPath:We.effectFieldPath,handlerValue:We.handlerValue,effectHandlerInfos:ze};T.$.effectAnalysis=pe}let C=y,w=[];for(let ge of o.implicitParameters)if(ge.isEffectRowSpread){let be=ge.type;if(H(be)){if(t.forallArgs){for(let De=0;De<o.forallParameters.length;De++)if(o.forallParameters[De].label===be.name&&De<t.forallArgs.length){let We=t.forallArgs[De].value;X(We)&&ln(We.value)&&(be=We.value);break}}if(H(be)&&be.resolvedConcreteType&&ln(be.resolvedConcreteType)&&(be=be.resolvedConcreteType),H(be)){let De=ve(c,be.name);if(De.length>0){let We=(Ie=De[De.length-1].value)==null?void 0:Ie[0];We&&X(We)&&ln(We.value)&&(be=We.value)}}}ln(be)&&w.push(...be.implicitParameters)}else rt(ge.type)&&w.push(ge);let I=Mo({forallParameters:[],parameters:s,implicitParameters:w.length>0?w:void 0,variadicParameter:void 0,return_:{...o.return,type:_},parametersFrame:c.frames[c.frames.length-1],env:o.env,SelfType:o.SelfType}),L={...e,specializedType:I,body:T,isControlFunction:e.isControlFunction||eo(T),funcId:`${e.funcId}_${C}`,funcName:`${e.funcName}_${C}`,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},x={funcId:e.funcId,compileTimeArgValues:a,runtimeParameterTypes:l,specializedFunction:L,env:T.$.env};return e.specializedFunctionCaches=[...e.specializedFunctionCaches,x],L}function Fx({originalFunction:e,calleeEnv:t,callerEnv:n,context:r}){var h,g,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=((g=e.definitionSiteEnclosingFunctionType)==null?void 0:g.return.type)??Ci(),s=Ve(O(o)),l=e.specializedFunctionCaches.find(E=>E.specializedFunction.funcId===`${e.funcId}_ctl_${s}`);if(l)return l.specializedFunction;let u=vt(t);for(let E of n.frames)for(let $ of E.variables){if(!$.isCompileTimeOnly||ve(u,$.name).length>0)continue;let{env:C}=je({env:u,variable:{...$},allowVariableShadowing:!0});u=C}for(let E of i.forallParameters){let $=o,{env:k}=je({env:u,variable:{name:E.label,type:E.type,isCompileTimeOnly:!0,value:[xe($)],token:Ue,initializedAtToken:Ue,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});u=k}let c=Et(e.body),f={...r,expectedType:void 0,enclosingFunctionReturnType:a,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:i,value:e,evaluationEnv:u},functionReturnImplConcreteType:[]},_=ba({expr:c,env:u,context:f}),p={...e,body:_,isControlFunction:e.isControlFunction||eo(_),funcId:`${e.funcId}_ctl_${s}`,funcName:`${e.funcName??e.funcId}_ctl_${s}`,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},d=new Set(i.forallParameters.map(E=>E.type)),v=E=>H(E)&&d.has(E)?o:E,y=Mo({forallParameters:[],parameters:i.parameters.map(E=>({...E,type:v(E.type)})),implicitParameters:i.implicitParameters.length>0?i.implicitParameters:void 0,variadicParameter:void 0,return_:{...i.return,type:v(i.return.type)},parametersFrame:u.frames[u.frames.length-1],env:i.env,SelfType:i.SelfType});return p.specializedType=y,e.specializedFunctionCaches=[...e.specializedFunctionCaches,{funcId:e.funcId,compileTimeArgValues:[],runtimeParameterTypes:[],specializedFunction:p,env:((T=_.$)==null?void 0:T.env)??u}],p}function Lx({returnType:e,expr:t,env:n,context:r}){var o;if(r.isEvaluatingFunctionType||r.expectedType)return;let i=Yd(e);for(let a of i){if(yt(a)||ur(a)||a.resolvedConcreteType||a.requiredTraits&&a.requiredTraits.length>0)continue;if(!ve(n,a.name).length){let l=Pr(n,()=>!0),u=!1;for(let c of l)if(X((o=c.value)==null?void 0:o[0])){let f=c.value[0].value,_=Yd(f);for(let p of _)if(p.name===a.name){u=!0;break}if(u)break}if(u)continue;throw m({token:(t==null?void 0:t.token)??Ue,errorMessage:`Failed to infer the function call return type.
11585
- Please consider providing the expected type.`})}}}function Qm(e,t){if(e===t)return!0;if(e.tag==="FnCall"){if(Qm(e.func,t))return!0;for(let n of e.args)if(Qm(n,t))return!0}return!1}function Jm({concreteType:e,env:t}){let n=[];if(e.trait)for(let i of e.trait.fields){if(i.label===""&&i.assignedValue&&on(i.assignedValue)){let o=i.assignedValue,a=o.type,s=a.fields.findIndex(l=>l.label==="index"&&_e(l.type));if(s>=0){let l=a.fields[s];if(_e(l.type)){let u=o.fields[s],c=l.type;Se(u)&&u.specializedType&&(c=u.specializedType),n.push({type:c,value:u})}}}i.label==="index"&&_e(i.type)&&n.push({type:i.type,value:i.assignedValue})}let r=ki({concreteType:e,methodName:"index",env:t});return n.push(...r),n}function w_({concreteType:e,argType:t,env:n}){let r=Jm({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(et(a.type)&&Ce({type:s.type,env:n},{type:t,env:n})&&et(o.return.type))return i}}function Kk({expr:e,valueType:t,selfValue:n,argExprs:r,callerEnv:i,context:o}){if(r.length!==1)throw m({token:e.func.token,errorMessage:`Index trait expects exactly 1 argument, got ${r.length}.`});let a=r[0],s=n&&qr(n)?n:void 0,l=n&&Ma(n)?n:void 0,u=n&&pt(n)?n.value:void 0;if(!!(s||l||u!==void 0)&&(s||l)&&(ft(t)||Vt(t))){let g=xx({argExpr:a,arrayValue:s,sliceValue:l,arrayType:t,env:i,context:o});if(g){let T=jk({concreteType:t,argExpr:a,callerEnv:i,context:o});return T&&(g.indexMethodType=T.fnType,g.indexMethodValue=T.value),g}}if(u!==void 0){let g=Vx({argExpr:a,strValue:u,env:i,context:o}),T=jk({concreteType:t,argExpr:a,callerEnv:i,context:o});return T&&(g.indexMethodType=T.fnType,g.indexMethodValue=T.value),g}if(n&&!Ge(n)&&!s&&!l&&u===void 0){let g=Sx({expr:e,argExpr:a,selfValue:n,valueType:t,callerEnv:i,context:o});if(g)return g}let f=U({expr:a,env:i,context:{...o,expectedType:void 0}});if(!f.$)throw m({token:a.token,errorMessage:`Failed to evaluate index argument:
11586
- ${A(a)}`});i=f.$.env;let _=f.$.type,p=w_({concreteType:t,argType:_,env:i});if(!p)throw m({token:e.func.token,errorMessage:`Type "${O(t)}" does not implement Index(${O(_)}).`});let d=p.type,v=d.return.type;if(!et(v))throw m({token:e.func.token,errorMessage:`Index method must return a pointer type, got: ${O(v)}`});let y=v.childType,h=Ee(y,{env:i,context:o});return Ge(h)&&(h.isRuntimeOnly=!0),{value:h,type:y,ptrType:v,indexMethodType:d,indexMethodValue:p.value,callerEnv:i}}function jk({concreteType:e,argExpr:t,callerEnv:n,context:r}){try{let i=U({expr:t,env:n,context:{...r,expectedType:void 0}});if(!i.$)return;let o=w_({concreteType:e,argType:i.$.type,env:i.$.env});return o?{fnType:o.type,value:o.value}:void 0}catch{return}}function Ix({concreteType:e,argType:t,env:n}){let r=Jm({concreteType:e,env:n});for(let i of r){let o=i.type;if(o.parameters.length!==2)continue;let a=o.parameters[0],s=o.parameters[1];if(et(a.type)&&Ce({type:s.type,env:n},{type:t,env:n})&&et(o.return.type)&&a.isCompileTimeOnly&&s.isCompileTimeOnly)return i}}function Sx({expr:e,argExpr:t,selfValue:n,valueType:r,callerEnv:i,context:o}){let a=U({expr:t,env:i,context:{...o,expectedType:void 0}});if(!a.$||!a.$.value)return;let s=a.$.type,l=a.$.value;i=a.$.env;let u=Ix({concreteType:r,argType:s,env:i});if(!u||!Se(u.value))return;let c=u.type,f=u.value,_=An(r),p=sa(_,[n]),d=vt(c.env),v=c.parameters[0],y=c.parameters[1],h=e.func.token??Ue;({env:d}=je({env:d,variable:{name:v.label,type:v.type,value:[p],isCompileTimeOnly:!0,isOwningTheRcValue:!1,initializedAtToken:h,consumedAtToken:void 0,token:h}})),{env:d}=je({env:d,variable:{name:y.label,type:y.type,value:[l],isCompileTimeOnly:!0,isOwningTheRcValue:!1,initializedAtToken:h,consumedAtToken:void 0,token:h}});let g={...o,isValidatingFunctionDefinition:void 0},T=qo({functionCalleeExpr:e.func,functionType:c,functionValue:f,argValues:{forallArgs:[],args:[{value:p,parameterType:v.type,argType:_},{value:l,parameterType:y.type,argType:s}],variadicArgs:[]},callerEnv:i,calleeEnv:d,context:g}),E=T.value,$=c.return.type;if(!et($))return;let k=$.childType;if(bi(E)){let w=E.targetValue[0],I,L;qr(w)?(I=w.elements[E.targetIndex],L={kind:"array",arrayValue:w,index:E.targetIndex}):qn(w)?(I=w.fields[E.targetIndex]??w,L={kind:"struct",structValue:w,fieldIndex:E.targetIndex}):kr(w)?(I=w.fields[E.targetIndex]??w,L={kind:"tuple",tupleValue:w,fieldIndex:E.targetIndex}):I=w;let x=w_({concreteType:r,argType:s,env:i});return{value:I,type:k,ptrType:$,indexMethodType:x==null?void 0:x.type,indexMethodValue:x==null?void 0:x.value,callerEnv:i,comptimeRef:L}}let C=w_({concreteType:r,argType:s,env:i});return{value:E,type:k,ptrType:$,indexMethodType:C==null?void 0:C.type,indexMethodValue:C==null?void 0:C.value,callerEnv:i,comptimeRef:T.comptimeRef}}function Xk({concreteType:e,argExprs:t,callerEnv:n,_context:r}){if(t.length!==1)return!1;if(ft(e)||Vt(e))return!0;try{return Jm({concreteType:e,env:n}).length>0}catch{return!1}}function Hk(e,t,n){var l;let i=ve(t,e).find(u=>{var c;return((c=u.value)==null?void 0:c[0])&&Se(u.value[0])&&_e(u.type)});if(!i||!((l=i.value)!=null&&l[0])||!Se(i.value[0]))return;let o=i.value[0],a=o.type,s=xe(Mn());try{let{value:u}=qo({functionCalleeExpr:void 0,functionType:a,functionValue:o,argValues:{forallArgs:[],args:[{value:s,parameterType:a.parameters[0].type,argType:s.type}],variadicArgs:[]},callerEnv:t,calleeEnv:t,context:n});if(X(u)&&Oe(u.value))return u.value}catch{}}var Yk=new WeakMap;function Ax(e,t){let n=e.frames[0],r=Yk.get(n);return r||(r={range:Hk("Range",e,t),rangeInclusive:Hk("RangeInclusive",e,t)},Yk.set(n,r)),r}function Qk(e,t,n){if(!Oe(e))return{isRange:!1,isInclusive:!1};let{range:r,rangeInclusive:i}=Ax(t,n);return i&&Ce({type:i,env:t},{type:e,env:t})?{isRange:!0,isInclusive:!0}:r&&Ce({type:r,env:t},{type:e,env:t})?{isRange:!0,isInclusive:!1}:{isRange:!1,isInclusive:!1}}function xx({argExpr:e,arrayValue:t,sliceValue:n,arrayType:r,env:i,context:o}){let a=U({expr:e,env:i,context:{...o,expectedType:void 0}});if(!a.$)throw m({token:e.token,errorMessage:`Failed to evaluate argument expression:
11584
+ Please use explicit using() to disambiguate.`});let Je=Qe[Qe.length-1],lt=(Ft=Je.value)==null?void 0:Ft[0];if(!lt)throw m({token:(r==null?void 0:r.token)??(e==null?void 0:e.token)??Ue,errorMessage:`The "given" variable "${Je.name}" has no compile-time value.`});M.push({value:lt,parameterType:Ne,argType:Je.type});let{env:re}=je({env:C,variable:{name:ae.label,type:Ne,isCompileTimeOnly:!0,isImplicit:!0,value:[lt],token:((ee=ae.exprs.labelExpr)==null?void 0:ee.token)??Ue,initializedAtToken:((W=ae.exprs.labelExpr)==null?void 0:W.token)??Ue,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});C=re}}let q={args:_,forallArgs:f,implicitArgs:M,variadicArgs:x},P;if(n.return.isCompileTimeOnly)if(u)P=Ee(I,{variableName:n.return.label,env:n.env,context:a});else if(Ie(t)){let{value:ie,callerEnv:ae,calleeEnv:we}=qo({functionCalleeExpr:r,functionType:n,functionValue:t,argValues:q,callerEnv:o,calleeEnv:C,context:{...a}});P=ie,I=ie.type,o=ae,C=we}else{let ie=Lt(I)&&I.level===0,ae=`${n.id}_return_sometype`;if(ie)if((oe=a.expectedType)!=null&&oe.type)P=xe(a.expectedType.type);else if(a.isEvaluatingFunctionType){let we=Zr(I,n.return.label,{id:ae,env:C,context:a});we.functionApplication=e;let Ne=Xn(C,we);P=xe(Ne)}else throw m({token:(e==null?void 0:e.token)??(r==null?void 0:r.token)??Ue,errorMessage:"Cannot infer comptime return type. Please provide the expected type."});else P=Ee(I,{variableName:n.return.label,env:n.env,context:a})}Lx({returnType:I,env:C,expr:e,context:a});let R,te=((me=a.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:me.kind)==="function-body"&&a.isEvaluatingFunctionBodyOrAsyncBlock.value&&Ie(a.isEvaluatingFunctionBodyOrAsyncBlock.value)&&t&&Ie(t)&&a.isEvaluatingFunctionBodyOrAsyncBlock.value.funcId===t.funcId,j=(de=q.implicitArgs)==null?void 0:de.some(ie=>Ge(ie.value)),Y=j&&!((ye=q.implicitArgs)!=null&&ye.some(ie=>Ge(ie.value)&&!rt(ie.parameterType))),le=q.args.some(ie=>ie.argType&&H(ie.argType)),Z=Y&&le,ce=(()=>{if(!j||!n.implicitParameters.some(Ne=>Ne.isEffectRowSpread))return!1;let ae=0;for(let Ne of n.implicitParameters)Ne.isEffectRowSpread||ae++;let we=q.implicitArgs??[];for(let Ne=0;Ne<ae&&Ne<we.length;Ne++)if(Ge(we[Ne].value))return!1;return!0})(),Se=Di(n)&&!_o(n)&&n.implicitParameters.some(ie=>rt(ie.type)?ie.type.fields.some(ae=>_e(ae.type)&&ae.type.forallParameters.length===0):!!ie.isEffectRowSpread);if(!l&&!Se&&t&&Ie(t)&&!t.isControlFunction&&Di(n)&&!te&&(!j||Z||ce)){if(R=wx({originalFunction:t,argValues:q,calleeEnv:C,callerEnv:o,context:a}),R&&H(I)){let ie=(Be=(he=R.body)==null?void 0:he.$)==null?void 0:Be.type;ie&&!H(ie)&&(I=ie,R.specializedType&&(R.specializedType={...R.specializedType,return:{...R.specializedType.return,type:ie}}))}if(R){let ie=new Set,ae=0;for(let we=0;we<n.parameters.length;we++)if(!n.parameters[we].isCompileTimeOnly){let tt=q.args[we],Ae=tt==null?void 0:tt.value;Ae&&Ie(Ae)&&Ae.type.implicitParameters.some(He=>_e(He.type)||rt(He.type))&&ie.add(ae),ae++}if(ie.size>0)for(let we=p.length-1;we>=0;we--)ie.has(we)&&p.splice(we,1)}}if(te&&!R&&a.currentlySpecializingFunction&&t&&Ie(t)){let ie=a.currentlySpecializingFunction;R={...t,funcId:ie.specializedFuncId,specializedType:{...n,return:{...n.return,type:ie.specializedReturnType}}},H(I)&&(I=ie.specializedReturnType)}if(!l&&t&&Ie(t)&&t.isControlFunction&&n.forallParameters.length>0&&!R&&(R=Fx({originalFunction:t,argValues:q,calleeEnv:C,callerEnv:o,context:a}),R&&H(I))){let ie=(Pe=(qe=R.body)==null?void 0:qe.$)==null?void 0:Pe.type;ie&&!H(ie)&&(I=ie,R.specializedType&&(R.specializedType={...R.specializedType,return:{...R.specializedType.return,type:ie}}))}let ge=Ks(o),be;if(ge.length>0){let ie=bx({variablesToDrop:ge,env:o,context:a});be=ie.deferredDropExpressions,o=ie.env}return{returnType:I,calleeEnv:C,callerEnv:o,pathCollection:V,argValues:q,returnValue:P,specializedFunctionValue:R,runtimeArgExprsInOrder:p,deferredDropExpressions:be}}function C_(e){if(X(e)){let t=e.value;if(t.id)return`${bt(e)}_id${t.id}`}return Ie(e)?`fn_${e.funcId}`:bt(e)}function kx({functionType:e,argValues:t,calleeEnv:n,runtimeParameters:r}){let i=[];return e.forallParameters.forEach((o,a)=>{var s,l;if(a<t.forallArgs.length){let u=t.forallArgs[a];i.push(Ve(C_(u.value)))}else{let u=o.label,c=ve(n,u);c.length>0&&((l=(s=c[c.length-1])==null?void 0:s.value)!=null&&l[0])?i.push(Ve(C_(c[c.length-1].value[0]))):i.push("unknown")}}),e.parameters.forEach((o,a)=>{if(o.isCompileTimeOnly&&a<t.args.length){let s=t.args[a];s?i.push(Ve(C_(s.value))):i.push("unknown")}}),t.implicitArgs&&t.implicitArgs.forEach(o=>{i.push(Ve(C_(o.value)))}),r.forEach((o,a)=>{let s=o.type;(s.id||Xe(s))&&i.push(`rtparam${a}_${Ve(O(s))}_id${s.id}`)}),i.join("_")}function wx({originalFunction:e,argValues:t,calleeEnv:n,callerEnv:r,context:i}){var V,M,q,P,R,te,j,Y,le,Z,ce,Te,Se;if(k_){ko.specializeCount++;let ge=e.funcName??e.funcId;ko.specializeNames.set(ge,(ko.specializeNames.get(ge)??0)+1)}let o=e.specializedType??e.type,a=[],s=[];t.forallArgs&&a.push(...t.forallArgs.map(ge=>ge.value)),t.implicitArgs&&a.push(...t.implicitArgs.map(ge=>ge.value)),o.parameters.forEach((ge,be)=>{let De=t.args[be];if(ge.isCompileTimeOnly)De.value&&a.push(De.value);else if(De.value&&Ie(De.value)&&De.value.type.implicitParameters.some(We=>_e(We.type)||rt(We.type)))De.value&&a.push(De.value);else{let pe=H(De.argType)&&De.argType.resolvedConcreteType&&!yt(De.argType)?De.argType.resolvedConcreteType:De.argType;s.push({...ge,type:pe})}});let l=s.map(ge=>ge.type),u=e.specializedFunctionCaches.find(ge=>ge.compileTimeArgValues.length===a.length&&ge.compileTimeArgValues.every((ze,We)=>{let pe=a[We];return Un({value:ze,env:ge.env},{value:pe,env:r})})?ge.runtimeParameterTypes.length===l.length&&ge.runtimeParameterTypes.every((ze,We)=>{let pe=l[We];return Ce({type:ze,env:ge.env},{type:pe,env:r},!0)}):!1);if(u)return k_&&ko.cacheHitCount++,u.specializedFunction;k_&&ko.cacheMissCount++;let c=n;for(let ge of r.frames)for(let be of ge.variables){if(!be.isCompileTimeOnly||ve(c,be.name).length>0)continue;let{env:ze}=je({env:c,variable:{...be},allowVariableShadowing:!0});c=ze}for(let ge of s){let be=ve(c,ge.label);if(be.length>0){let De=be[be.length-1],ze={...De,value:void 0};c=zt(c,De,ze)}}let f=Et(e.body),{returnType:_,calleeEnv:p}=rs({functionType:o,calleeEnv:c,context:{...i,isEvaluatingFunctionType:!0},functionCalleeExpr:void 0});c=p;let d=i.enclosingFunctionReturnType,v=((V=t.implicitArgs)==null?void 0:V.some(ge=>Ie(ge.value)&&ge.value.isControlFunction||Rt(ge.value)&&Wk(ge.value.type,ge.value)))??!1,y=kx({functionType:o,argValues:t,calleeEnv:n,runtimeParameters:s}),h=`${e.funcId}_${y}`,g=i.currentlySpecializingFunction;i.currentlySpecializingFunction={originalFuncId:e.funcId,specializedFuncId:h,specializedReturnType:_,originalFunction:e};let T=En({expr:f,env:c,context:{...i,expectedType:{type:_,env:c},isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:{...o,return:{...o.return,type:_}},value:e,evaluationEnv:c},isEvaluatingLoopBody:void 0,capturedVariables:void 0,functionReturnImplConcreteType:[],hasControlFunctionImplicitParams:v,...d?{enclosingFunctionReturnType:d}:{}},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(i.currentlySpecializingFunction=g,!T.$)throw m({token:e.body.token,errorMessage:"Failed to evaluate function body for specialization."});let E=[],$=0;for(let ge=0;ge<o.implicitParameters.length;ge++){let be=o.implicitParameters[ge];if(_e(be.type)){let De=(M=t.implicitArgs)==null?void 0:M[$],ze=De&&Ie(De.value)?De.value:void 0;ze!=null&&ze.isControlFunction&&E.push({handlerArgIndex:$,label:be.label,type:be.type,fromSpread:!1}),$+=1}else if(be.isEffectRowSpread){let De=be.type;if(H(De)){let We=(P=(q=ve(c,be.label).at(-1))==null?void 0:q.value)==null?void 0:P[0];if(We&&X(We)&&ln(We.value))De=We.value;else{let pe=Xn(c,De);pe&&(De=pe)}}if(ln(De)){for(let ze=0;ze<De.implicitParameters.length;ze++){let We=De.implicitParameters[ze];if(_e(We.type)){let pe=(R=t.implicitArgs)==null?void 0:R[$+ze],fe=pe&&Ie(pe.value)?pe.value:void 0;fe!=null&&fe.isControlFunction&&E.push({handlerArgIndex:$+ze,label:We.label,type:We.type,fromSpread:!0})}else if(rt(We.type)){let pe=(te=t.implicitArgs)==null?void 0:te[$+ze],fe=pe&&Rt(pe.value)?pe.value:void 0,$e=[],Le=(Me,Ze,$t)=>{for(let It=0;It<Me.fields.length;It++){let jt=Me.fields[It];if(_e(jt.type)){let st=$t==null?void 0:$t.fields[It];if(st&&Ie(st)&&st.isControlFunction){let Ct=st.specializedType??jt.type;$e.push({path:[...Ze,jt.label],type:Ct})}}else if(rt(jt.type)){let st=$t==null?void 0:$t.fields[It];Le(jt.type,[...Ze,jt.label],st&&Rt(st)?st:void 0)}}};Le(We.type,[],fe);for(let Me of $e)E.push({handlerArgIndex:$+ze,label:We.label,type:Me.type,fromSpread:!0,effectFieldPath:Me.path})}}$+=De.implicitParameters.length}else $+=1}else if(rt(be.type)){let De=[],ze=(j=t.implicitArgs)==null?void 0:j[$],We=(pe,fe,$e)=>{for(let Le=0;Le<pe.fields.length;Le++){let Me=pe.fields[Le];if(_e(Me.type)){let Ze=$e==null?void 0:$e.fields[Le];if(Ze&&Ie(Ze)&&Ze.isControlFunction){let $t=Ze.specializedType??Me.type;De.push({path:[...fe,Me.label],type:$t})}}else if(rt(Me.type)){let Ze=$e==null?void 0:$e.fields[Le];We(Me.type,[...fe,Me.label],Ze&&Rt(Ze)?Ze:void 0)}}};We(be.type,[],ze&&Rt(ze.value)?ze.value:void 0);for(let pe of De)E.push({handlerArgIndex:$,label:be.label,type:pe.type,fromSpread:!1,effectFieldPath:pe.path});$+=1}else $+=1}let k=[];for(let ge of E){let be=qk(T,ge.label,ge.type,!0,ge.effectFieldPath);if(be.hasEffects){let De=(Y=t.implicitArgs)==null?void 0:Y[ge.handlerArgIndex],ze,We=ge.effectFieldPath;if(De&&Ie(De.value))ze=De.value;else if(De&&Rt(De.value)&&We&&We.length>0){let pe=De.value;for(let fe of We){if(!Rt(pe)){pe=void 0;break}let $e=pe.type.fields.findIndex(Le=>Le.label===fe);if($e<0||!pe.fields[$e]){pe=void 0;break}pe=pe.fields[$e]}pe&&Ie(pe)&&(ze=pe)}if(ze){let pe=ze,fe=ge.type,$e=!pe.body.$;if(!$e&&pe.isControlFunction&&S(pe.body)&&pe.body.args.length>0&&!((le=pe.body.args[0])!=null&&le.$)&&($e=!0),$e&&_e(fe)&&fe.forallParameters.length>0&&be.effectCallPoints.length>0){let Le=new Map,Me=fe.return.type,Ze=be.effectCallPoints[0].operationResultType;if(H(Me)&&Le.set(Me.name,Ze),Le.size===0&&fe.forallParameters.length===1){let rn=fe.forallParameters[0];Le.set(rn.label,Ze)}let $t=Et(pe.body),It=((Z=pe.body.$)==null?void 0:Z.env)??c;It=vt(It);for(let rn of fe.forallParameters){let Bt=Le.get(rn.label);Bt&&(It=je({env:It,variable:{name:rn.label,type:rn.type,isCompileTimeOnly:!0,value:[xe(Bt)],token:Ue,initializedAtToken:Ue,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0}).env)}let jt=pe.specializedType??pe.type,st=((ce=pe.definitionSiteEnclosingFunctionType)==null?void 0:ce.return.type)??Ci(),Ct={...i,expectedType:void 0,enclosingFunctionReturnType:st,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:jt,value:pe,evaluationEnv:It}};try{let rn=ba({expr:$t,env:It,context:Ct}),Bt=jt.parameters.map(Yt=>{if(Yt.isCompileTimeOnly)return Yt;if(H(Yt.type)){let wt=Le.get(Yt.type.name);if(wt)return{...Yt,type:wt}}return Yt}),gt=jt.return.type;if(H(gt)){let Yt=Le.get(gt.name);Yt&&(gt=Yt)}let ut={...jt,parameters:Bt,return:{...jt.return,type:gt}},Nt={...pe,body:rn,specializedType:ut};be.handlerValue=Nt,be.effectParameterType=ut;for(let Yt of be.effectCallPoints)Yt.isTransitiveEffectCall&&(Yt.operationArgTypes=Yt.operationArgTypes.map(wt=>H(wt)?Le.get(wt.name)??wt:wt))}catch(rn){if(S(pe.body)&&pe.body.args.length>0&&!((Te=pe.body.args[0])!=null&&Te.$))throw rn;be.handlerValue=pe}}else be.handlerValue=pe}else De&&(be.handlerValue=De.value);k.push({analysis:be,ctlParam:ge})}}if(k.length===1)T.$.effectAnalysis=k[0].analysis;else if(k.length>1){let ge=[],be=new Map,De=new Map,ze=[];for(let fe=0;fe<k.length;fe++){let{analysis:$e}=k[fe];ze.push({effectParameterName:$e.effectParameterName,effectParameterType:$e.effectParameterType,effectFieldPath:$e.effectFieldPath,handlerValue:$e.handlerValue,operationArgTypes:$e.effectCallPoints.length>0?$e.effectCallPoints[0].operationArgTypes:[],operationResultType:$e.effectCallPoints.length>0?$e.effectCallPoints[0].operationResultType:{tag:"unit"}});for(let Le of $e.effectCallPoints)ge.push({...Le,effectIndex:fe});for(let Le of $e.capturedVariables)be.has(Le.id)||be.set(Le.id,Le);for(let[Le,Me]of $e.variableIdRemapping)De.set(Le,Me)}if(S(T)&&b(T,B.begin)){let fe=T.args,$e=new Map;for(let Me=0;Me<fe.length;Me++)$e.set(fe[Me],Me);let Le=Me=>{for(let Ze=0;Ze<fe.length;Ze++)if(Qm(fe[Ze],Me.expr))return Ze;return 999};ge.sort((Me,Ze)=>Le(Me)-Le(Ze))}for(let fe=0;fe<ge.length;fe++)ge[fe].index=fe;let We=k[0].analysis,pe={effectCallPoints:ge,capturedVariables:Array.from(be.values()),hasEffects:!0,variableIdRemapping:De,effectParameterName:We.effectParameterName,effectParameterType:We.effectParameterType,effectFieldPath:We.effectFieldPath,handlerValue:We.handlerValue,effectHandlerInfos:ze};T.$.effectAnalysis=pe}let C=y,w=[];for(let ge of o.implicitParameters)if(ge.isEffectRowSpread){let be=ge.type;if(H(be)){if(t.forallArgs){for(let De=0;De<o.forallParameters.length;De++)if(o.forallParameters[De].label===be.name&&De<t.forallArgs.length){let We=t.forallArgs[De].value;X(We)&&ln(We.value)&&(be=We.value);break}}if(H(be)&&be.resolvedConcreteType&&ln(be.resolvedConcreteType)&&(be=be.resolvedConcreteType),H(be)){let De=ve(c,be.name);if(De.length>0){let We=(Se=De[De.length-1].value)==null?void 0:Se[0];We&&X(We)&&ln(We.value)&&(be=We.value)}}}ln(be)&&w.push(...be.implicitParameters)}else rt(ge.type)&&w.push(ge);let I=Mo({forallParameters:[],parameters:s,implicitParameters:w.length>0?w:void 0,variadicParameter:void 0,return_:{...o.return,type:_},parametersFrame:c.frames[c.frames.length-1],env:o.env,SelfType:o.SelfType}),L={...e,specializedType:I,body:T,isControlFunction:e.isControlFunction||eo(T),funcId:`${e.funcId}_${C}`,funcName:`${e.funcName}_${C}`,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},x={funcId:e.funcId,compileTimeArgValues:a,runtimeParameterTypes:l,specializedFunction:L,env:T.$.env};return e.specializedFunctionCaches=[...e.specializedFunctionCaches,x],L}function Fx({originalFunction:e,calleeEnv:t,callerEnv:n,context:r}){var h,g,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=((g=e.definitionSiteEnclosingFunctionType)==null?void 0:g.return.type)??Ci(),s=Ve(O(o)),l=e.specializedFunctionCaches.find(E=>E.specializedFunction.funcId===`${e.funcId}_ctl_${s}`);if(l)return l.specializedFunction;let u=vt(t);for(let E of n.frames)for(let $ of E.variables){if(!$.isCompileTimeOnly||ve(u,$.name).length>0)continue;let{env:C}=je({env:u,variable:{...$},allowVariableShadowing:!0});u=C}for(let E of i.forallParameters){let $=o,{env:k}=je({env:u,variable:{name:E.label,type:E.type,isCompileTimeOnly:!0,value:[xe($)],token:Ue,initializedAtToken:Ue,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});u=k}let c=Et(e.body),f={...r,expectedType:void 0,enclosingFunctionReturnType:a,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:i,value:e,evaluationEnv:u},functionReturnImplConcreteType:[]},_=ba({expr:c,env:u,context:f}),p={...e,body:_,isControlFunction:e.isControlFunction||eo(_),funcId:`${e.funcId}_ctl_${s}`,funcName:`${e.funcName??e.funcId}_ctl_${s}`,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},d=new Set(i.forallParameters.map(E=>E.type)),v=E=>H(E)&&d.has(E)?o:E,y=Mo({forallParameters:[],parameters:i.parameters.map(E=>({...E,type:v(E.type)})),implicitParameters:i.implicitParameters.length>0?i.implicitParameters:void 0,variadicParameter:void 0,return_:{...i.return,type:v(i.return.type)},parametersFrame:u.frames[u.frames.length-1],env:i.env,SelfType:i.SelfType});return p.specializedType=y,e.specializedFunctionCaches=[...e.specializedFunctionCaches,{funcId:e.funcId,compileTimeArgValues:[],runtimeParameterTypes:[],specializedFunction:p,env:((T=_.$)==null?void 0:T.env)??u}],p}function Lx({returnType:e,expr:t,env:n,context:r}){var o;if(r.isEvaluatingFunctionType||r.expectedType)return;let i=Yd(e);for(let a of i){if(yt(a)||ur(a)||a.resolvedConcreteType||a.requiredTraits&&a.requiredTraits.length>0)continue;if(!ve(n,a.name).length){let l=Pr(n,()=>!0),u=!1;for(let c of l)if(X((o=c.value)==null?void 0:o[0])){let f=c.value[0].value,_=Yd(f);for(let p of _)if(p.name===a.name){u=!0;break}if(u)break}if(u)continue;throw m({token:(t==null?void 0:t.token)??Ue,errorMessage:`Failed to infer the function call return type.
11585
+ Please consider providing the expected type.`})}}}function Qm(e,t){if(e===t)return!0;if(e.tag==="FnCall"){if(Qm(e.func,t))return!0;for(let n of e.args)if(Qm(n,t))return!0}return!1}function Jm({concreteType:e,env:t}){let n=[];if(e.trait)for(let i of e.trait.fields){if(i.label===""&&i.assignedValue&&on(i.assignedValue)){let o=i.assignedValue,a=o.type,s=a.fields.findIndex(l=>l.label==="index"&&_e(l.type));if(s>=0){let l=a.fields[s];if(_e(l.type)){let u=o.fields[s],c=l.type;Ie(u)&&u.specializedType&&(c=u.specializedType),n.push({type:c,value:u})}}}i.label==="index"&&_e(i.type)&&n.push({type:i.type,value:i.assignedValue})}let r=ki({concreteType:e,methodName:"index",env:t});return n.push(...r),n}function w_({concreteType:e,argType:t,env:n}){let r=Jm({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(et(a.type)&&Ce({type:s.type,env:n},{type:t,env:n})&&et(o.return.type))return i}}function Kk({expr:e,valueType:t,selfValue:n,argExprs:r,callerEnv:i,context:o}){if(r.length!==1)throw m({token:e.func.token,errorMessage:`Index trait expects exactly 1 argument, got ${r.length}.`});let a=r[0],s=n&&qr(n)?n:void 0,l=n&&Ma(n)?n:void 0,u=n&&pt(n)?n.value:void 0;if(!!(s||l||u!==void 0)&&(s||l)&&(ft(t)||Vt(t))){let g=xx({argExpr:a,arrayValue:s,sliceValue:l,arrayType:t,env:i,context:o});if(g){let T=jk({concreteType:t,argExpr:a,callerEnv:i,context:o});return T&&(g.indexMethodType=T.fnType,g.indexMethodValue=T.value),g}}if(u!==void 0){let g=Vx({argExpr:a,strValue:u,env:i,context:o}),T=jk({concreteType:t,argExpr:a,callerEnv:i,context:o});return T&&(g.indexMethodType=T.fnType,g.indexMethodValue=T.value),g}if(n&&!Ge(n)&&!s&&!l&&u===void 0){let g=Sx({expr:e,argExpr:a,selfValue:n,valueType:t,callerEnv:i,context:o});if(g)return g}let f=U({expr:a,env:i,context:{...o,expectedType:void 0}});if(!f.$)throw m({token:a.token,errorMessage:`Failed to evaluate index argument:
11586
+ ${A(a)}`});i=f.$.env;let _=f.$.type,p=w_({concreteType:t,argType:_,env:i});if(!p)throw m({token:e.func.token,errorMessage:`Type "${O(t)}" does not implement Index(${O(_)}).`});let d=p.type,v=d.return.type;if(!et(v))throw m({token:e.func.token,errorMessage:`Index method must return a pointer type, got: ${O(v)}`});let y=v.childType,h=Ee(y,{env:i,context:o});return Ge(h)&&(h.isRuntimeOnly=!0),{value:h,type:y,ptrType:v,indexMethodType:d,indexMethodValue:p.value,callerEnv:i}}function jk({concreteType:e,argExpr:t,callerEnv:n,context:r}){try{let i=U({expr:t,env:n,context:{...r,expectedType:void 0}});if(!i.$)return;let o=w_({concreteType:e,argType:i.$.type,env:i.$.env});return o?{fnType:o.type,value:o.value}:void 0}catch{return}}function Ix({concreteType:e,argType:t,env:n}){let r=Jm({concreteType:e,env:n});for(let i of r){let o=i.type;if(o.parameters.length!==2)continue;let a=o.parameters[0],s=o.parameters[1];if(et(a.type)&&Ce({type:s.type,env:n},{type:t,env:n})&&et(o.return.type)&&a.isCompileTimeOnly&&s.isCompileTimeOnly)return i}}function Sx({expr:e,argExpr:t,selfValue:n,valueType:r,callerEnv:i,context:o}){let a=U({expr:t,env:i,context:{...o,expectedType:void 0}});if(!a.$||!a.$.value)return;let s=a.$.type,l=a.$.value;i=a.$.env;let u=Ix({concreteType:r,argType:s,env:i});if(!u||!Ie(u.value))return;let c=u.type,f=u.value,_=An(r),p=sa(_,[n]),d=vt(c.env),v=c.parameters[0],y=c.parameters[1],h=e.func.token??Ue;({env:d}=je({env:d,variable:{name:v.label,type:v.type,value:[p],isCompileTimeOnly:!0,isOwningTheRcValue:!1,initializedAtToken:h,consumedAtToken:void 0,token:h}})),{env:d}=je({env:d,variable:{name:y.label,type:y.type,value:[l],isCompileTimeOnly:!0,isOwningTheRcValue:!1,initializedAtToken:h,consumedAtToken:void 0,token:h}});let g={...o,isValidatingFunctionDefinition:void 0},T=qo({functionCalleeExpr:e.func,functionType:c,functionValue:f,argValues:{forallArgs:[],args:[{value:p,parameterType:v.type,argType:_},{value:l,parameterType:y.type,argType:s}],variadicArgs:[]},callerEnv:i,calleeEnv:d,context:g}),E=T.value,$=c.return.type;if(!et($))return;let k=$.childType;if(bi(E)){let w=E.targetValue[0],I,L;qr(w)?(I=w.elements[E.targetIndex],L={kind:"array",arrayValue:w,index:E.targetIndex}):qn(w)?(I=w.fields[E.targetIndex]??w,L={kind:"struct",structValue:w,fieldIndex:E.targetIndex}):kr(w)?(I=w.fields[E.targetIndex]??w,L={kind:"tuple",tupleValue:w,fieldIndex:E.targetIndex}):I=w;let x=w_({concreteType:r,argType:s,env:i});return{value:I,type:k,ptrType:$,indexMethodType:x==null?void 0:x.type,indexMethodValue:x==null?void 0:x.value,callerEnv:i,comptimeRef:L}}let C=w_({concreteType:r,argType:s,env:i});return{value:E,type:k,ptrType:$,indexMethodType:C==null?void 0:C.type,indexMethodValue:C==null?void 0:C.value,callerEnv:i,comptimeRef:T.comptimeRef}}function Xk({concreteType:e,argExprs:t,callerEnv:n,_context:r}){if(t.length!==1)return!1;if(ft(e)||Vt(e))return!0;try{return Jm({concreteType:e,env:n}).length>0}catch{return!1}}function Hk(e,t,n){var l;let i=ve(t,e).find(u=>{var c;return((c=u.value)==null?void 0:c[0])&&Ie(u.value[0])&&_e(u.type)});if(!i||!((l=i.value)!=null&&l[0])||!Ie(i.value[0]))return;let o=i.value[0],a=o.type,s=xe(Mn());try{let{value:u}=qo({functionCalleeExpr:void 0,functionType:a,functionValue:o,argValues:{forallArgs:[],args:[{value:s,parameterType:a.parameters[0].type,argType:s.type}],variadicArgs:[]},callerEnv:t,calleeEnv:t,context:n});if(X(u)&&Oe(u.value))return u.value}catch{}}var Yk=new WeakMap;function Ax(e,t){let n=e.frames[0],r=Yk.get(n);return r||(r={range:Hk("Range",e,t),rangeInclusive:Hk("RangeInclusive",e,t)},Yk.set(n,r)),r}function Qk(e,t,n){if(!Oe(e))return{isRange:!1,isInclusive:!1};let{range:r,rangeInclusive:i}=Ax(t,n);return i&&Ce({type:i,env:t},{type:e,env:t})?{isRange:!0,isInclusive:!0}:r&&Ce({type:r,env:t},{type:e,env:t})?{isRange:!0,isInclusive:!1}:{isRange:!1,isInclusive:!1}}function xx({argExpr:e,arrayValue:t,sliceValue:n,arrayType:r,env:i,context:o}){let a=U({expr:e,env:i,context:{...o,expectedType:void 0}});if(!a.$)throw m({token:e.token,errorMessage:`Failed to evaluate argument expression:
11587
11587
  ${A(e)}`});let s=a.$.env,l=a.$.type,u=a.$.value,{isRange:c,isInclusive:f}=Qk(l,i,o);return c?Nx({argExpr:e,argValue:u,isInclusive:f,arrayValue:t,sliceValue:n,arrayType:r,callerEnv:s}):Dx({argExpr:e,argValue:u,arrayValue:t,sliceValue:n,arrayType:r,callerEnv:s,context:o})}function Nx({argExpr:e,argValue:t,isInclusive:n,arrayValue:r,sliceValue:i,arrayType:o,callerEnv:a}){let s=Vo(o.childType);if(!qn(t))return;let l=t.fields[0],u=t.fields[1];if(!l||!u||!Mt(l)||!Mt(u))return;let c=l.value,f=u.value,_=typeof c=="bigint"?Number(c):c,p=(typeof f=="bigint"?Number(f):f)+(n?1:0);if(r){if(_<0||_>r.elements.length)throw m({token:e.token,errorMessage:`Slice start index out of bounds: ${_}. Expected index in range [0, ${r.elements.length}].`});if(p<_||p>r.elements.length)throw m({token:e.token,errorMessage:`Slice end index out of bounds: ${p}. Expected index in range [${_}, ${r.elements.length}].`});return{value:As(s,[r],_,p),type:s,ptrType:An(s),indexMethodType:void 0,indexMethodValue:void 0,callerEnv:a}}if(i){let d=i.endIndex-i.startIndex;if(_<0||_>d)throw m({token:e.token,errorMessage:`Slice start index out of bounds: ${_}. Expected index in range [0, ${d}].`});if(p<_||p>d)throw m({token:e.token,errorMessage:`Slice end index out of bounds: ${p}. Expected index in range [${_}, ${d}].`});let v=i.startIndex+_,y=i.startIndex+p;return{value:As(s,i.sourceArray,v,y),type:s,ptrType:An(s),indexMethodType:void 0,indexMethodValue:void 0,callerEnv:a}}}function Dx({argExpr:e,argValue:t,arrayValue:n,sliceValue:r,arrayType:i,callerEnv:o,context:a}){let s=i.childType;if(Mt(t)){let l=t.value,u=typeof l=="bigint"?Number(l):l;if(n){if(u<0||u>=n.elements.length)throw m({token:e.token,errorMessage:`Array index out of bounds: ${u}. Expected index in range [0, ${n.elements.length-1}].`});return{value:n.elements[u],type:s,ptrType:An(s),indexMethodType:void 0,indexMethodValue:void 0,callerEnv:o,index:u,comptimeRef:{kind:"array",arrayValue:n,index:u}}}if(r){let c=r.endIndex-r.startIndex;if(u<0||u>=c)throw m({token:e.token,errorMessage:`Slice index out of bounds: ${u}. Expected index in range [0, ${c-1}].`});let f=r.startIndex+u,_=r.sourceArray[0];return{value:_.elements[f],type:s,ptrType:An(s),indexMethodType:void 0,indexMethodValue:void 0,callerEnv:o,index:u,comptimeRef:{kind:"array",arrayValue:_,index:f}}}}else return t?{value:Ee(s,{env:o,context:a}),type:s,ptrType:An(s),indexMethodType:void 0,indexMethodValue:void 0,callerEnv:o}:{value:void 0,type:hn({type:s,env:o}),ptrType:An(s),indexMethodType:void 0,indexMethodValue:void 0,callerEnv:o}}function Vx({argExpr:e,strValue:t,env:n,context:r}){let i=U({expr:e,env:n,context:{...r,expectedType:void 0}});if(!i.$||!i.$.value)throw m({token:e.token,errorMessage:"Failed to evaluate index argument for comptime string indexing"});let o=i.$.type,a=i.$.value,s=i.$.env,{isRange:l,isInclusive:u}=Qk(o,n,r),c=fk({strValue:t,argValue:a,token:e.token,isRange:l,isInclusive:u}),f=c.type,_=An(f);return{value:c,type:f,ptrType:_,indexMethodType:void 0,indexMethodValue:void 0,callerEnv:s}}function Jk({expr:e,env:t,context:n}){let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for Iso:
11588
11588
  ${A(r)}`});if(t=i.$.env,!X(i.$.value))throw m({token:r.token,errorMessage:`Iso expects a type as argument, but got:
11589
11589
  ${A(r)}`});let a=i.$.value.value,s=IE(a,t);t=uE({isoType:s,env:t,context:n});let l=xe(s);return e.$={env:t,type:l.type,value:l,pathCollection:[]},e}function Zk({expr:e,env:t,context:n,isoType:r}){var s;let i=e.args[0],o=U({expr:i,env:t,context:{...n,expectedType:{type:r.childType,env:t}}});if(!o.$)throw m({token:i.token,errorMessage:`Failed to evaluate the argument expression for Iso value constructor:
@@ -11593,7 +11593,7 @@ ${A(T)}`});y=T.token.value}else throw m({token:g.token,errorMessage:`Expected me
11593
11593
  ${A(g)}`});if(!t.fields.find(E=>E.label===y))throw m({token:T.token,errorMessage:`Module member with label "${y}" does not exist in the module type.`});if(d.label===y){if(v=!0,d.assignedValue)throw m({token:g.token,errorMessage:`Module member "${d.label}" already has a assigned value:
11594
11594
  ${bt(d.assignedValue)}`});let E,$=d.exprs.typeExpr,k=d.exprs.defaultValueExpr;if($){let x=(l=U({expr:Et($),env:vt(t.env,r.frames[r.frames.length-1]),context:{...i,expectedType:void 0,ReceiverType:void 0,SelfType:void 0,SelfModuleType:t}}).$)==null?void 0:l.value;if(!X(x))throw m({token:g.token,errorMessage:`Failed to evaluate the module member "${y}"`});E=x.value}else if(k){let x=(u=U({expr:Et(k),env:vt(t.env,r.frames[r.frames.length-1]),context:{...i,expectedType:void 0,ReceiverType:void 0,SelfType:void 0}}).$)==null?void 0:u.value;if(!x)throw m({token:g.token,errorMessage:`Failed to evaluate the module member "${y}"`});E=x.type}else throw m({token:g.token,errorMessage:`Module member "${y}" has no type or default value or assigned value.`});let C=U({expr:g,env:r,context:{...i,expectedType:{type:E,env:r},ReceiverType:void 0,SelfType:void 0}}),w=(c=C.$)==null?void 0:c.type;if(!w)throw m({token:g.token,errorMessage:`Failed to evaluate the module member "${y}"`});if((f=C.$)!=null&&f.env&&(r=C.$.env),!Ce({type:E,env:r},{type:w,env:r}))throw m({token:g.token,errorMessage:`Type mismatch for the module member "${y}":
11595
11595
  Expected: ${O(E)}
11596
- Got: ${O(w)}`});let I=(_=C.$)==null?void 0:_.value;w.ioBuiltin&&(t.fields[p].type.ioBuiltin=w.ioBuiltin),Se(I)&&(I.funcId+=`_${d.label}`,!I.specializedType&&_e(E)&&(I.specializedType={...E,parameters:I.type.parameters,parametersFrame:I.type.parametersFrame})),o[p]=I,a.fields[p].assignedValue=I,g.$={env:r,type:w,value:I,pathCollection:[]},T&&(T.$=g.$);break}}if(!v){let h=d.defaultValue,g=d.assignedValue,T=g;if(!g&&h&&(T=h),!T)throw m({token:e.token,errorMessage:`Module member "${d.label}" is not provided and has no required/default value.`});o[p]=T,a.fields[p].assignedValue=T}}return{moduleValue:ZT({...t},o),callerEnv:r}}function tw({targetType:e,argExpr:t,expr:n,callerEnv:r,context:i}){if(!et(e))return;let o=U({expr:t,env:r,context:{...i,expectedType:void 0}});if(!o.$)throw m({token:t.token,errorMessage:`Failed to evaluate argument: ${A(t)}`});let a=o.$.env,s=o.$.type;if(gn(s)&&(Yi(e.childType)||Is(e.childType))){let u=hn({type:s,expectedType:e,expr:o,env:a});return o.$={...o.$,type:u,convertedRuntimeType:u},Object.assign(n,o),n.$=o.$,{expr:n,env:a}}if(!et(s))throw m({token:t.token,errorMessage:`Cannot cast ${O(s)} to ${O(e)}. Expected a pointer type or comptime_string.`});let l={tag:"FnCall",func:{tag:"Atom",token:{...n.token,value:F.__yo_as[0],type:"identifier"},$:void 0},args:[o,n.func],token:n.token,$:{env:a,type:e,value:void 0,pathCollection:o.$.pathCollection,runtimeArgExprsInOrder:[o]}};return i_(n,l),{expr:n,env:a}}function nw({traitType:e,argExprs:t,callerEnv:n,context:r}){let i=[];for(let a of t){if(!S(a)||!b(a,":=",2))throw m({token:a.token,errorMessage:`Expected ":=" for trait specialization (binding associated types), got:
11596
+ Got: ${O(w)}`});let I=(_=C.$)==null?void 0:_.value;w.ioBuiltin&&(t.fields[p].type.ioBuiltin=w.ioBuiltin),Ie(I)&&(I.funcId+=`_${d.label}`,!I.specializedType&&_e(E)&&(I.specializedType={...E,parameters:I.type.parameters,parametersFrame:I.type.parametersFrame})),o[p]=I,a.fields[p].assignedValue=I,g.$={env:r,type:w,value:I,pathCollection:[]},T&&(T.$=g.$);break}}if(!v){let h=d.defaultValue,g=d.assignedValue,T=g;if(!g&&h&&(T=h),!T)throw m({token:e.token,errorMessage:`Module member "${d.label}" is not provided and has no required/default value.`});o[p]=T,a.fields[p].assignedValue=T}}return{moduleValue:ZT({...t},o),callerEnv:r}}function tw({targetType:e,argExpr:t,expr:n,callerEnv:r,context:i}){if(!et(e))return;let o=U({expr:t,env:r,context:{...i,expectedType:void 0}});if(!o.$)throw m({token:t.token,errorMessage:`Failed to evaluate argument: ${A(t)}`});let a=o.$.env,s=o.$.type;if(gn(s)&&(Yi(e.childType)||Is(e.childType))){let u=hn({type:s,expectedType:e,expr:o,env:a});return o.$={...o.$,type:u,convertedRuntimeType:u},Object.assign(n,o),n.$=o.$,{expr:n,env:a}}if(!et(s))throw m({token:t.token,errorMessage:`Cannot cast ${O(s)} to ${O(e)}. Expected a pointer type or comptime_string.`});let l={tag:"FnCall",func:{tag:"Atom",token:{...n.token,value:F.__yo_as[0],type:"identifier"},$:void 0},args:[o,n.func],token:n.token,$:{env:a,type:e,value:void 0,pathCollection:o.$.pathCollection,runtimeArgExprsInOrder:[o]}};return i_(n,l),{expr:n,env:a}}function nw({traitType:e,argExprs:t,callerEnv:n,context:r}){let i=[];for(let a of t){if(!S(a)||!b(a,":=",2))throw m({token:a.token,errorMessage:`Expected ":=" for trait specialization (binding associated types), got:
11597
11597
  ${A(a)}`});let s=a.args[0],l=a.args[1];if(!Q(s))throw m({token:s.token,errorMessage:`Expected identifier for associated type label, got:
11598
11598
  ${A(s)}`});let u=s.token.value,c=e.fields.find(_=>_.label===u);if(!c)throw m({token:s.token,errorMessage:`Field "${u}" not found in trait "${e.typeName??"unknown"}".`});if(!c.unassignedSomeType&&!Lt(c.type))throw m({token:s.token,errorMessage:`Field "${u}" is not an associated type. Only associated type fields can be constrained with ":=".`});let f=U({expr:l,env:n,context:{...r}});if(!f.$||!X(f.$.value))throw m({token:l.token,errorMessage:`Expected type for associated type constraint "${u}", got:
11599
11599
  ${A(l)}`});n=f.$.env,i.push({label:u,constraintType:f.$.value.value})}return{specializedTraitType:{...e,associatedTypeConstraints:i},callerEnv:n}}function rw({traitExpr:e,traitType:t,argExprs:n,callerEnv:r,context:i}){var f,_,p,d,v,y,h,g;if(n.length>t.fields.length)throw m({token:e.token,errorMessage:"Failed to implement the trait. Too many fields provided."});let o=Array(t.fields.length).fill(void 0),a={...t,fields:t.fields.map((T,E)=>({...T,assignedValue:o[E]}))},s=i.ReceiverType,l=i.ReceiverType??a;if(!s)throw m({token:e.token,errorMessage:`Receiver type is undefined when implementing trait.
@@ -11608,14 +11608,14 @@ ${A(I)}`});k=I.token.value}else throw m({token:w.token,errorMessage:`Expected me
11608
11608
  ${A(w)}`});if(!t.fields.find(L=>L.label===k))throw m({token:I.token,errorMessage:`Trait member with label "${k}" does not exist in the trait type.`});if(E.label===k){if($=!0,E.assignedValue)throw m({token:w.token,errorMessage:`Trait member "${E.label}" already has a assigned value:
11609
11609
  ${bt(E.assignedValue)}`});let L,x=E.exprs.typeExpr,V=E.exprs.defaultValueExpr;if(x){let te=(f=U({expr:Et(x),env:vt(t.env,r.frames[r.frames.length-1]),context:{...i,expectedType:void 0,ReceiverType:void 0,SelfType:l,SelfTraitType:t}}).$)==null?void 0:f.value;if(!X(te))throw m({token:w.token,errorMessage:`Failed to evaluate the trait member "${k}"`});L=te.value}else if(V){let te=(_=U({expr:Et(V),env:vt(t.env,r.frames[r.frames.length-1]),context:{...i,expectedType:void 0,ReceiverType:void 0,SelfType:l,SelfTraitType:t}}).$)==null?void 0:_.value;if(!te)throw m({token:w.token,errorMessage:`Failed to evaluate the trait member "${k}"`});L=te.type}else throw m({token:w.token,errorMessage:`Trait member "${k}" has no type or default value or assigned value.`});let M=U({expr:w,env:r,context:{...i,expectedType:{type:L,env:r},ReceiverType:void 0,SelfType:l}}),q=(p=M.$)==null?void 0:p.type;if(!q)throw m({token:w.token,errorMessage:`Failed to evaluate the trait member "${k}"`});if((d=M.$)!=null&&d.env&&(r=M.$.env),!Ce({type:L,env:r},{type:q,env:r}))throw m({token:w.token,errorMessage:`Type mismatch for the trait member "${k}":
11610
11610
  Expected: ${O(L)}
11611
- Got: ${O(q)}`});let P=(v=M.$)==null?void 0:v.value;Se(P)&&(P.funcId+=`_${E.label}`,!P.specializedType&&_e(L)&&(P.specializedType={...L,parameters:P.type.parameters,parametersFrame:P.type.parametersFrame})),o[T]=P,a.fields[T].assignedValue=P,s&&s.trait&&(s.trait.fields[T].assignedValue=P),w.$={env:r,type:q,value:P,pathCollection:[]},I&&(I.$=w.$);break}}if(!$){let C=E.exprs.typeExpr,w=E.exprs.defaultValueExpr,I=E.defaultValue,L=E.assignedValue,x=L;if(!L&&w)try{let V;if(C){let P=(y=U({expr:Et(C),env:vt(t.env,r.frames[r.frames.length-1]),context:{...i,expectedType:void 0,ReceiverType:void 0,SelfType:l,SelfTraitType:t}}).$)==null?void 0:y.value;X(P)&&(V=P.value)}x=(h=U({expr:Et(w),env:vt(t.env,r.frames[r.frames.length-1]),context:{...i,expectedType:V?{type:V,env:r}:void 0,ReceiverType:void 0,SelfType:l,SelfTraitType:t}}).$)==null?void 0:h.value,x&&Se(x)&&(x.funcId+=`_${E.label}`,!x.specializedType&&V&&_e(V)&&(x.specializedType={...V,parameters:x.type.parameters,parametersFrame:x.type.parametersFrame}))}catch{x=I}if(!x&&I&&(x=I),!x)throw m({token:e.token,errorMessage:`Trait member "${E.label}" is not provided and has no required/default value.`});o[T]=x,a.fields[T].assignedValue=x}}s&&u&&(s.trait=u);for(let T=0;T<t.fields.length;T++){let E=t.fields[T];if(!E.unassignedSomeType)continue;let $=E.unassignedSomeType,k=o[T];if(!k||!X(k))continue;let C=k.value;if(!Xe(C))for(let{traitType:w}of $.requiredTraits){let I=w;if(w.associatedTypeConstraints){let x=w.associatedTypeConstraints.map(V=>{let M=V.constraintType;if(H(M)){for(let q=0;q<t.fields.length;q++)if(t.fields[q].unassignedSomeType===M){let R=o[q];R&&X(R)&&(M=R.value);break}}return{...V,constraintType:M}});I={...w,associatedTypeConstraints:x}}if(!zn({targetType:C,traitType:I,env:r}))throw m({token:e.token,errorMessage:`Where clause constraint not satisfied: ${O(C)} does not implement ${I.typeName??"trait"}(${((g=I.associatedTypeConstraints)==null?void 0:g.map(x=>`${x.label} := ${O(x.constraintType)}`).join(", "))??""}).
11611
+ Got: ${O(q)}`});let P=(v=M.$)==null?void 0:v.value;Ie(P)&&(P.funcId+=`_${E.label}`,!P.specializedType&&_e(L)&&(P.specializedType={...L,parameters:P.type.parameters,parametersFrame:P.type.parametersFrame})),o[T]=P,a.fields[T].assignedValue=P,s&&s.trait&&(s.trait.fields[T].assignedValue=P),w.$={env:r,type:q,value:P,pathCollection:[]},I&&(I.$=w.$);break}}if(!$){let C=E.exprs.typeExpr,w=E.exprs.defaultValueExpr,I=E.defaultValue,L=E.assignedValue,x=L;if(!L&&w)try{let V;if(C){let P=(y=U({expr:Et(C),env:vt(t.env,r.frames[r.frames.length-1]),context:{...i,expectedType:void 0,ReceiverType:void 0,SelfType:l,SelfTraitType:t}}).$)==null?void 0:y.value;X(P)&&(V=P.value)}x=(h=U({expr:Et(w),env:vt(t.env,r.frames[r.frames.length-1]),context:{...i,expectedType:V?{type:V,env:r}:void 0,ReceiverType:void 0,SelfType:l,SelfTraitType:t}}).$)==null?void 0:h.value,x&&Ie(x)&&(x.funcId+=`_${E.label}`,!x.specializedType&&V&&_e(V)&&(x.specializedType={...V,parameters:x.type.parameters,parametersFrame:x.type.parametersFrame}))}catch{x=I}if(!x&&I&&(x=I),!x)throw m({token:e.token,errorMessage:`Trait member "${E.label}" is not provided and has no required/default value.`});o[T]=x,a.fields[T].assignedValue=x}}s&&u&&(s.trait=u);for(let T=0;T<t.fields.length;T++){let E=t.fields[T];if(!E.unassignedSomeType)continue;let $=E.unassignedSomeType,k=o[T];if(!k||!X(k))continue;let C=k.value;if(!Xe(C))for(let{traitType:w}of $.requiredTraits){let I=w;if(w.associatedTypeConstraints){let x=w.associatedTypeConstraints.map(V=>{let M=V.constraintType;if(H(M)){for(let q=0;q<t.fields.length;q++)if(t.fields[q].unassignedSomeType===M){let R=o[q];R&&X(R)&&(M=R.value);break}}return{...V,constraintType:M}});I={...w,associatedTypeConstraints:x}}if(!zn({targetType:C,traitType:I,env:r}))throw m({token:e.token,errorMessage:`Where clause constraint not satisfied: ${O(C)} does not implement ${I.typeName??"trait"}(${((g=I.associatedTypeConstraints)==null?void 0:g.map(x=>`${x.label} := ${O(x.constraintType)}`).join(", "))??""}).
11612
11612
  Field "${E.label}" must satisfy the trait's where clause.`})}}return{traitValue:Ss({...t,receiverType:s},o),callerEnv:r}}function F_({typeFields:e,functionCalleeExpr:t,argExprs:n,callerEnv:r,context:i,isUnionType:o}){var c;if(n.length>e.length)throw m({token:t.token,errorMessage:`Failed to call the type. Too many members provided. Expected ${e.length} arguments, got ${n.length}.`});if(o&&n.length!==1)throw m({token:t.token,errorMessage:`Failed to call the union type. Expected exactly one argument, got ${n.length}.`});let a=new Set,s=Array(e.length).fill(void 0),l=[];for(let f=0;f<e.length;f++){let _=e[f],p=n[f];if(!p)break;let d;if(S(p)&&b(p,":",2)&&(d=p.args[0],p=p.args[1],!Q(d)))throw m({token:d.token,errorMessage:`Expected identifier for label, got:
11613
11613
  ${A(d)}`});if(d){let g=d.token.value,T=e.find(E=>E.label===g);if(T){if(T.assignedValue)throw m({token:p.token,errorMessage:`Cannot use label "${g}" for already assigned value:
11614
11614
  ${Bs(T)}`});_=T}else throw m({token:p.token,errorMessage:`Failed to find "${g}" in the type.`})}if(a.has(_))throw m({token:p.token,errorMessage:`Type member "${_.label}" is already implemented.`});let v=e.indexOf(_),y=U({expr:p,env:r,context:{...i,expectedType:{type:_.type,env:r}}});if(!y.$)throw m({token:p.token,errorMessage:`Failed to evaluate argument expression:
11615
11615
  ${A(p)}`});cr(y,i),r=y.$.env;let h=y.$.type;if(Oa(_.type,r)||(h=hn({type:h,expectedType:_.type,expr:y,env:r})),d&&(d.$=y.$),!Ce({type:_.type,env:r},{type:h,env:r}))throw m({token:p.token,errorMessage:`Type mismatch for type member "${_.label}":
11616
11616
  Expected: ${O(_.type)}
11617
- Got: ${O(h)}`});s[v]=(c=y.$)==null?void 0:c.value,l[v]=y,a.add(_)}if(!o)for(let f=0;f<e.length;f++){let _=e[f];if(!a.has(_)){if(!_.defaultValue&&!_.assignedValue)throw m({token:t.token,errorMessage:`Type member "${_.label}" is not provided and has no default value or assigned value.`});s[f]=_.defaultValue??_.assignedValue,l[f]=_.exprs.defaultValueExpr??_.exprs.assignedValueExpr}}return{values:s,pathCollection:[],callerEnv:r,runtimeArgExprsInOrder:l}}function Mx(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 X(l)&&X(c)?Ce({type:l.value,env:s.env},{type:c.value,env:t},!0):Un({value:l,env:s.env},{value:c,env:t})}));if(o&&X(o.value)&&!(H(o.value.value)&&o.value.value.recursiveTypeRef))return o.value.value;if(n!=null&&n.SelfType&&dn(n.SelfType)||n!=null&&n.SelfType&&Oe(n.SelfType))return n.SelfType;let a=r.calledComptimeFunctionCaches.find(s=>!(!X(s.value)||H(s.value.value)&&s.value.value.recursiveTypeRef));if(a&&X(a.value))return a.value.value}function wi({expr:e,env:t,context:n,givenFunc:r,forMacroExpansion:i}){var g,T,E,$,k,C,w,I,L,x,V,M,q,P,R,te,j,Y,le,Z,ce,Te,Ie,ge,be,De,ze,We,pe,fe,$e,Le,Me,Ze,$t,It,jt,st,Ct,rn,Bt,gt,ut,Nt,Yt,wt,Ft,ee;let o=e.func,a=e.args,s,l=[];if(r)l=[r];else if(S(o)){let W=b(o,"."),oe=U({expr:o,env:t,context:W?{...n}:{...n,expectedType:void 0}});if(o=oe,(g=o.$)!=null&&g.env&&(t=o.$.env),(T=oe.$)!=null&&T.type)l=[{type:oe.$.type,value:oe.$.value}];else if(S(oe)&&b(oe,".",2)){let me=oe.args[0];s=oe.args[1];let de=(E=me.$)==null?void 0:E.type;if(!de)throw m({token:me.token,errorMessage:"Expected to be evaluated."});let ye=($=me.$)==null?void 0:$.value,he=X(ye);if(Q(s)){let Be=s.token.value;if(he){let qe=ye.value;l=a$({env:t,context:n,methodName:Be,type:qe}).map(ie=>({type:ie.type,value:ie.value,args:a}))}else l=hm({env:t,context:n,methodName:Be,receiverType:de,isInfixOperatorCall:!1}).map(Pe=>{let ie;if(Pe.needsPointerConversion){let ae={tag:"Atom",token:me.token,$:void 0};ae.token={...me.token,value:"&",type:"identifier"},ie=[{tag:"FnCall",func:ae,args:[me],token:me.token,$:void 0},...a]}else ie=[me,...a];return{type:Pe.type,value:Pe.value,needsPointerConversion:Pe.needsPointerConversion,args:ie}})}else{let Be=U({expr:s,env:t,context:{...n}});(k=Be.$)!=null&&k.env&&(t=(C=Be.$)==null?void 0:C.env),s=Be;let qe=(w=s.$)==null?void 0:w.type,Pe=(I=s.$)==null?void 0:I.value;if(!qe)throw m({token:s.token,errorMessage:"Expected to be a function."});l=[{type:qe,value:Pe}],a=[me,...a]}}else throw m({token:o.token,errorMessage:`Expected type for function call, got ${A(oe)}`})}else{let W=o.token.value;if(W==="_"){let oe=n.expectedType;if(!oe||H(oe.type))return Vk({expr:e,env:t,context:n});l=[{type:In(oe.type),value:xe(oe.type)}],o.$={env:t,type:l[0].type,value:l[0].value,pathCollection:[]}}else if(mi(W)&&e.isInfix){let oe=a[0];if(!oe)throw m({token:o.token,errorMessage:`Expected first argument for operator, got:
11618
- ${A(o)}`});let de=(L=U({expr:oe,env:t,context:{...n,expectedType:void 0}}).$)==null?void 0:L.type;if(!de)throw m({token:oe.token,errorMessage:"Expected to be evaluated."});let ye=W;s=o,l=hm({env:t,context:n,methodName:ye,receiverType:de,isInfixOperatorCall:!0}).map(Be=>({type:Be.type,value:Be.value,needsPointerConversion:Be.needsPointerConversion}))}else if(W==="Call"&&n.SelfType){let oe=xe(n.SelfType);l=[{type:oe.type,value:oe}]}else{let oe=U({expr:o,env:t,context:{...n}});if(o=oe,!oe.$)throw m({token:o.token,errorMessage:"Failed to evaluate the callee:"});if(rt(oe.$.type)){let me=oe.$.type,de=me.fields.findIndex(he=>he.label==="Call");if(de<0)throw m({token:o.token,errorMessage:'Calling a module value which does not have "Call" element is not allowed.'});let ye=me.fields[de];if(ye.assignedValue){let he=ye.assignedValue;kr(he)?l=he.fields.map(Be=>({type:Be.type,value:Be})):l=[{type:he.type,value:he}]}else throw m({token:o.token,errorMessage:`Calling a module value whose "Call" element doesn't have assigned value is not allowed.`})}else l=[{type:oe.$.type,value:oe.$.value}]}}if(a.some(oe=>Q(oe)&&oe.token.value==="_")&&l.length===1&&Se(l[0].value)&&_e(l[0].type)&&l[0].type.return.isCompileTimeOnly){let oe=l[0].value,me=l[0].type,de=me.parameters;if(a.length!==de.length)throw m({token:o.token,errorMessage:`Partial application: expected ${de.length} argument(s), got ${a.length}`});let ye=vt(t),he=`__pa_fn_${xt(t.modulePath)}`;{let{env:Ne}=je({env:ye,variable:{name:he,type:me,isCompileTimeOnly:!0,value:[oe],token:o.token,initializedAtToken:o.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});ye=Ne}let Be=[],qe=[];for(let Ne=0;Ne<a.length;Ne++){let tt=a[Ne],Ae=de[Ne];if(Q(tt)&&tt.token.value==="_"){let He=`__pa_${Ne}_${xt(t.modulePath)}`;Be.push({...Ae,label:He}),qe.push({tag:"Atom",token:{type:"identifier",value:He,position:tt.token.position,modulePath:t.modulePath,inputString:t.inputString}})}else{let He=`__pa_cap_${Ne}_${xt(t.modulePath)}`,Qe=U({expr:tt,env:ye,context:{...n}});if(!Qe.$)throw m({token:tt.token,errorMessage:"Failed to evaluate partial application argument"});ye=Qe.$.env;let{env:Je}=je({env:ye,variable:{name:He,type:Qe.$.type,isCompileTimeOnly:!0,value:Qe.$.value?[Qe.$.value]:void 0,token:tt.token,initializedAtToken:tt.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});ye=Je,qe.push({tag:"Atom",token:{type:"identifier",value:He,position:tt.token.position,modulePath:t.modulePath,inputString:t.inputString}})}}let Pe={tag:"FnCall",func:{tag:"Atom",token:{type:"identifier",value:he,position:o.token.position,modulePath:t.modulePath,inputString:t.inputString}},args:qe,token:o.token},ie={id:`pa_frame_${xt(t.modulePath)}`,variables:Be.map(Ne=>({id:`pa_var_${xt(t.modulePath)}`,name:Ne.label,type:Ne.type,isCompileTimeOnly:!0,value:void 0,token:Ue,initializedAtToken:Ue,consumedAtToken:void 0,isOwningTheRcValue:!1,frameLevel:ye.frames.length})),isBeginBlockFrame:!1,whereClauseConstraints:new Map},ae=Mo({parameters:Be,forallParameters:[],variadicParameter:void 0,return_:{...me.return},env:ye,parametersFrame:ie}),we={tag:"Function",type:ae,body:Pe,frameLevel:ye.frames.length-1,funcName:`partial_${oe.funcName??"anon"}`,funcId:`partial_${xt(t.modulePath)}`,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]};return e.$={env:t,type:ae,value:we,pathCollection:[]},e}let u=l.length===1&&_e(l[0].type)&&l[0].type.return.isCompileTimeOnly&&!l[0].type.return.isUnquote&&!Lt(l[0].type.return.type)&&l[0].type.forallParameters.length===0,_=l.length===1&&(_e(l[0].type)||(H(l[0].type)||ht(l[0].type))&&!!Er(l[0].type))?l.map(W=>({...W,result:{kind:"function",result:void 0}})):l.map(W=>{let oe=W.args??a;if(_e(W.type))try{let me=$a({functionValue:ml(W.value),functionType:W.type,expr:Et(e),functionCalleeExpr:o,argExprs:oe.map(de=>Et(de)),callerEnv:ym(t),context:{...n,isInFunctionCallCheckingPhase:!0},isMethodCall:!!s,skipSpecialization:!0,skipCtfeExecution:!0});return{...W,result:{kind:"function",result:me}}}catch(me){if(me instanceof Ir&&me.kind==="overflow")throw _n([{token:e.token,errorMessage:`Failed to call the function:
11617
+ Got: ${O(h)}`});s[v]=(c=y.$)==null?void 0:c.value,l[v]=y,a.add(_)}if(!o)for(let f=0;f<e.length;f++){let _=e[f];if(!a.has(_)){if(!_.defaultValue&&!_.assignedValue)throw m({token:t.token,errorMessage:`Type member "${_.label}" is not provided and has no default value or assigned value.`});s[f]=_.defaultValue??_.assignedValue,l[f]=_.exprs.defaultValueExpr??_.exprs.assignedValueExpr}}return{values:s,pathCollection:[],callerEnv:r,runtimeArgExprsInOrder:l}}function Mx(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 X(l)&&X(c)?Ce({type:l.value,env:s.env},{type:c.value,env:t},!0):Un({value:l,env:s.env},{value:c,env:t})}));if(o&&X(o.value)&&!(H(o.value.value)&&o.value.value.recursiveTypeRef))return o.value.value;if(n!=null&&n.SelfType&&dn(n.SelfType)||n!=null&&n.SelfType&&Oe(n.SelfType))return n.SelfType;let a=r.calledComptimeFunctionCaches.find(s=>!(!X(s.value)||H(s.value.value)&&s.value.value.recursiveTypeRef));if(a&&X(a.value))return a.value.value}function wi({expr:e,env:t,context:n,givenFunc:r,forMacroExpansion:i}){var g,T,E,$,k,C,w,I,L,x,V,M,q,P,R,te,j,Y,le,Z,ce,Te,Se,ge,be,De,ze,We,pe,fe,$e,Le,Me,Ze,$t,It,jt,st,Ct,rn,Bt,gt,ut,Nt,Yt,wt,Ft,ee;let o=e.func,a=e.args,s,l=[];if(r)l=[r];else if(S(o)){let W=b(o,"."),oe=U({expr:o,env:t,context:W?{...n}:{...n,expectedType:void 0}});if(o=oe,(g=o.$)!=null&&g.env&&(t=o.$.env),(T=oe.$)!=null&&T.type)l=[{type:oe.$.type,value:oe.$.value}];else if(S(oe)&&b(oe,".",2)){let me=oe.args[0];s=oe.args[1];let de=(E=me.$)==null?void 0:E.type;if(!de)throw m({token:me.token,errorMessage:"Expected to be evaluated."});let ye=($=me.$)==null?void 0:$.value,he=X(ye);if(Q(s)){let Be=s.token.value;if(he){let qe=ye.value;l=a$({env:t,context:n,methodName:Be,type:qe}).map(ie=>({type:ie.type,value:ie.value,args:a}))}else l=hm({env:t,context:n,methodName:Be,receiverType:de,isInfixOperatorCall:!1}).map(Pe=>{let ie;if(Pe.needsPointerConversion){let ae={tag:"Atom",token:me.token,$:void 0};ae.token={...me.token,value:"&",type:"identifier"},ie=[{tag:"FnCall",func:ae,args:[me],token:me.token,$:void 0},...a]}else ie=[me,...a];return{type:Pe.type,value:Pe.value,needsPointerConversion:Pe.needsPointerConversion,args:ie}})}else{let Be=U({expr:s,env:t,context:{...n}});(k=Be.$)!=null&&k.env&&(t=(C=Be.$)==null?void 0:C.env),s=Be;let qe=(w=s.$)==null?void 0:w.type,Pe=(I=s.$)==null?void 0:I.value;if(!qe)throw m({token:s.token,errorMessage:"Expected to be a function."});l=[{type:qe,value:Pe}],a=[me,...a]}}else throw m({token:o.token,errorMessage:`Expected type for function call, got ${A(oe)}`})}else{let W=o.token.value;if(W==="_"){let oe=n.expectedType;if(!oe||H(oe.type))return Vk({expr:e,env:t,context:n});l=[{type:In(oe.type),value:xe(oe.type)}],o.$={env:t,type:l[0].type,value:l[0].value,pathCollection:[]}}else if(mi(W)&&e.isInfix){let oe=a[0];if(!oe)throw m({token:o.token,errorMessage:`Expected first argument for operator, got:
11618
+ ${A(o)}`});let de=(L=U({expr:oe,env:t,context:{...n,expectedType:void 0}}).$)==null?void 0:L.type;if(!de)throw m({token:oe.token,errorMessage:"Expected to be evaluated."});let ye=W;s=o,l=hm({env:t,context:n,methodName:ye,receiverType:de,isInfixOperatorCall:!0}).map(Be=>({type:Be.type,value:Be.value,needsPointerConversion:Be.needsPointerConversion}))}else if(W==="Call"&&n.SelfType){let oe=xe(n.SelfType);l=[{type:oe.type,value:oe}]}else{let oe=U({expr:o,env:t,context:{...n}});if(o=oe,!oe.$)throw m({token:o.token,errorMessage:"Failed to evaluate the callee:"});if(rt(oe.$.type)){let me=oe.$.type,de=me.fields.findIndex(he=>he.label==="Call");if(de<0)throw m({token:o.token,errorMessage:'Calling a module value which does not have "Call" element is not allowed.'});let ye=me.fields[de];if(ye.assignedValue){let he=ye.assignedValue;kr(he)?l=he.fields.map(Be=>({type:Be.type,value:Be})):l=[{type:he.type,value:he}]}else throw m({token:o.token,errorMessage:`Calling a module value whose "Call" element doesn't have assigned value is not allowed.`})}else l=[{type:oe.$.type,value:oe.$.value}]}}if(a.some(oe=>Q(oe)&&oe.token.value==="_")&&l.length===1&&Ie(l[0].value)&&_e(l[0].type)&&l[0].type.return.isCompileTimeOnly){let oe=l[0].value,me=l[0].type,de=me.parameters;if(a.length!==de.length)throw m({token:o.token,errorMessage:`Partial application: expected ${de.length} argument(s), got ${a.length}`});let ye=vt(t),he=`__pa_fn_${xt(t.modulePath)}`;{let{env:Ne}=je({env:ye,variable:{name:he,type:me,isCompileTimeOnly:!0,value:[oe],token:o.token,initializedAtToken:o.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});ye=Ne}let Be=[],qe=[];for(let Ne=0;Ne<a.length;Ne++){let tt=a[Ne],Ae=de[Ne];if(Q(tt)&&tt.token.value==="_"){let He=`__pa_${Ne}_${xt(t.modulePath)}`;Be.push({...Ae,label:He}),qe.push({tag:"Atom",token:{type:"identifier",value:He,position:tt.token.position,modulePath:t.modulePath,inputString:t.inputString}})}else{let He=`__pa_cap_${Ne}_${xt(t.modulePath)}`,Qe=U({expr:tt,env:ye,context:{...n}});if(!Qe.$)throw m({token:tt.token,errorMessage:"Failed to evaluate partial application argument"});ye=Qe.$.env;let{env:Je}=je({env:ye,variable:{name:He,type:Qe.$.type,isCompileTimeOnly:!0,value:Qe.$.value?[Qe.$.value]:void 0,token:tt.token,initializedAtToken:tt.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});ye=Je,qe.push({tag:"Atom",token:{type:"identifier",value:He,position:tt.token.position,modulePath:t.modulePath,inputString:t.inputString}})}}let Pe={tag:"FnCall",func:{tag:"Atom",token:{type:"identifier",value:he,position:o.token.position,modulePath:t.modulePath,inputString:t.inputString}},args:qe,token:o.token},ie={id:`pa_frame_${xt(t.modulePath)}`,variables:Be.map(Ne=>({id:`pa_var_${xt(t.modulePath)}`,name:Ne.label,type:Ne.type,isCompileTimeOnly:!0,value:void 0,token:Ue,initializedAtToken:Ue,consumedAtToken:void 0,isOwningTheRcValue:!1,frameLevel:ye.frames.length})),isBeginBlockFrame:!1,whereClauseConstraints:new Map},ae=Mo({parameters:Be,forallParameters:[],variadicParameter:void 0,return_:{...me.return},env:ye,parametersFrame:ie}),we={tag:"Function",type:ae,body:Pe,frameLevel:ye.frames.length-1,funcName:`partial_${oe.funcName??"anon"}`,funcId:`partial_${xt(t.modulePath)}`,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]};return e.$={env:t,type:ae,value:we,pathCollection:[]},e}let u=l.length===1&&_e(l[0].type)&&l[0].type.return.isCompileTimeOnly&&!l[0].type.return.isUnquote&&!Lt(l[0].type.return.type)&&l[0].type.forallParameters.length===0,_=l.length===1&&(_e(l[0].type)||(H(l[0].type)||ht(l[0].type))&&!!Er(l[0].type))?l.map(W=>({...W,result:{kind:"function",result:void 0}})):l.map(W=>{let oe=W.args??a;if(_e(W.type))try{let me=$a({functionValue:ml(W.value),functionType:W.type,expr:Et(e),functionCalleeExpr:o,argExprs:oe.map(de=>Et(de)),callerEnv:ym(t),context:{...n,isInFunctionCallCheckingPhase:!0},isMethodCall:!!s,skipSpecialization:!0,skipCtfeExecution:!0});return{...W,result:{kind:"function",result:me}}}catch(me){if(me instanceof Ir&&me.kind==="overflow")throw _n([{token:e.token,errorMessage:`Failed to call the function:
11619
11619
  `},...me.tokenAndErrorList],me.isAssertionError);return{...W,result:{kind:"error",error:me}}}else if((H(W.type)||ht(W.type))&&Er(W.type)){let me=Er(W.type);try{let de=$a({functionValue:ml(W.value),functionType:me.isFn.callType,expr:Et(e),functionCalleeExpr:o,argExprs:oe.map(ye=>Et(ye)),callerEnv:ym(t),context:{...n,isInFunctionCallCheckingPhase:!0},isMethodCall:!!s,skipSpecialization:!0,skipCtfeExecution:!0});return{...W,result:{kind:"function",result:de}}}catch(de){if(de instanceof Ir&&de.kind==="overflow")throw _n([{token:e.token,errorMessage:`Failed to call the function:
11620
11620
  `},...de.tokenAndErrorList],de.isAssertionError);return{...W,result:{kind:"error",error:de}}}}else{let me=W.value;if(X(me)&&H(me.value)&&me.value.recursiveTypeRef){let de=Mx(me.value,t,n);de&&(me=xe(de),W.value=me,W.type=me.type)}if(X(me)&&Oe(me.value))try{let de=F_({typeFields:me.value.fields,functionCalleeExpr:o,argExprs:oe,callerEnv:t,context:{...n}});return{...W,result:{kind:"type",result:de}}}catch(de){return{...W,result:{kind:"error",error:de}}}else if(X(me)&&Ye(me.value)){let de=me.value,ye=de.variants.find(he=>he.name===de.selectedVariantName);if(ye)try{let he=F_({typeFields:ye.fields||[],functionCalleeExpr:o,argExprs:oe,callerEnv:t,context:{...n}});return{...W,result:{kind:"type",result:he}}}catch(he){return{...W,result:{kind:"error",error:he}}}else return{...W,result:{kind:"error",error:m({token:e.token,errorMessage:"Enum variant not selected for enum type"})}}}else if(X(me)&&Ht(me.value))try{let de=F_({typeFields:me.value.fields,functionCalleeExpr:o,argExprs:oe,callerEnv:t,context:{...n},isUnionType:!0});return{...W,result:{kind:"type",result:de}}}catch(de){return{...W,result:{kind:"error",error:de}}}else if(X(me)&&rt(me.value)){let de=me.value;try{let ye=ew({moduleExpr:o,moduleType:de,argExprs:oe,callerEnv:t,context:{...n}});return{...W,result:{kind:"module-type",result:ye}}}catch(ye){return{...W,result:{kind:"error",error:ye}}}}else if(X(me)&&_t(me.value)){let de=me.value;if(oe.some(he=>S(he)&&b(he,":=",2)))try{let he=nw({traitExpr:o,traitType:de,argExprs:oe,callerEnv:t,context:{...n}});return{...W,result:{kind:"trait-specialization",result:he}}}catch(he){return{...W,result:{kind:"error",error:he}}}try{let he=rw({traitExpr:o,traitType:de,argExprs:oe,callerEnv:t,context:{...n}});return{...W,result:{kind:"trait-type",result:he}}}catch(he){return{...W,result:{kind:"error",error:he}}}}else if(X(me)&&_e(me.value)){let de=me.value;try{return Ok({expr:e,functionType:de,callerEnv:t,context:{...n}}),{...W,result:{kind:"function-type"}}}catch(ye){return{...W,result:{kind:"error",error:ye}}}}else if(X(me)&&ft(me.value)){let de=me.value;try{return Mk({expr:e,arrayType:de,argExprs:oe,callerEnv:t,context:{...n}}),{...W,result:{kind:"array-type"}}}catch(ye){return{...W,result:{kind:"error",error:ye}}}}else if(X(me)&&vn(me.value)){let de=me.value;try{return Uk({expr:e,comptimeListType:de,argExprs:oe,callerEnv:t,context:{...n}}),{...W,result:{kind:"array-type"}}}catch(ye){return{...W,result:{kind:"error",error:ye}}}}else if(X(me)&&(H(me.value)||ht(me.value))){let de=me.value,ye=Er(de);if(ye)try{return Pk({expr:e,fnModuleType:ye,wrapperType:de,callerEnv:t,context:{...n}}),{...W,result:{kind:"closure-type"}}}catch(he){return{...W,result:{kind:"error",error:he}}}else if(H(de)&&de.kindFunctionType)try{let he=de.kindFunctionType,Be=[];if(oe.length!==he.parameters.length)throw m({token:o.token,errorMessage:`Type constructor "${de.name}" expects ${he.parameters.length} argument(s), got ${oe.length}`});for(let ie=0;ie<oe.length;ie++){let ae=oe[ie],we=U({expr:ae,env:t,context:{...n}});if(!we.$)throw m({token:ae.token,errorMessage:"Failed to evaluate HKT argument"});if(t=we.$.env,!X(we.$.value))throw m({token:ae.token,errorMessage:`Expected type argument for type constructor "${de.name}", got:
11621
11621
  ${A(ae)}`});Be.push(we.$.value.value)}let qe=AE(de,Be,he.return.type,t),Pe=xe(qe);return e.$={env:t,type:In(qe),value:Pe,pathCollection:[]},{...W,result:{kind:"type",result:{values:[Pe],pathCollection:[],runtimeArgExprsInOrder:[],callerEnv:t}}}}catch(he){return{...W,result:{kind:"error",error:he}}}else if(H(de)&&de.recursiveTypeRef)try{let he=[];for(let Be of oe){let qe=U({expr:Be,env:t,context:{...n}});if(!qe.$)throw m({token:Be.token,errorMessage:"Failed to evaluate argument"});t=qe.$.env,he.push(qe)}return{...W,result:{kind:"type",result:{values:he.map(Be=>Be.$.value),pathCollection:[],runtimeArgExprsInOrder:he,callerEnv:t}}}}catch(he){return{...W,result:{kind:"error",error:he}}}else return{...W,result:{kind:"error",error:m({token:o.token,errorMessage:`Invalid function call on type:
@@ -11637,7 +11637,7 @@ Found ${p.length} matching calls:
11637
11637
  ${p.map(W=>`${O(W.type)}`).join(`
11638
11638
  `)}
11639
11639
  `});let y=p[0];if(n.isInFunctionCallCheckingPhase&&u){let W=y.type,{returnType:oe}=rs({functionType:W,calleeEnv:W.env,context:{...n,isEvaluatingFunctionType:!0},functionCalleeExpr:o});return t=Zt(t),e.$={env:t,type:oe,value:Ee(oe,{variableName:"checking_phase_placeholder_"+xt(t.modulePath),env:t,context:n}),pathCollection:[]},e}if(i)if(_e(y.type)&&y.type.return.isUnquote){let{returnValue:W,callerEnv:oe,pathCollection:me,deferredDropExpressions:de}=$a({functionValue:ml(y.value),functionType:y.type,expr:e,functionCalleeExpr:o,argExprs:y.args??a,callerEnv:t,context:n,isMethodCall:!!s});return t=Zt(oe),e.$={env:t,type:ir(),value:W,originType:ir(),pathCollection:me,deferredDropExpressions:de},e}else throw m({token:o.token,errorMessage:"Expected macro function call for macro_expand."});if(_e(y.type)){let W=y.type;{let{returnType:oe,returnValue:me,callerEnv:de,pathCollection:ye,specializedFunctionValue:he,runtimeArgExprsInOrder:Be,deferredDropExpressions:qe}=$a({functionValue:ml(y.value),functionType:y.type,expr:e,functionCalleeExpr:o,argExprs:y.args??a,callerEnv:t,context:n,isMethodCall:!!s});if(t=Zt(de),W.return.isUnquote)if(rr(me)){let we=U({expr:me.value,env:t,context:{...n}});return e.$={env:((x=we.$)==null?void 0:x.env)||t,type:((V=we.$)==null?void 0:V.type)||oe,value:(M=we.$)==null?void 0:M.value,originType:((q=we.$)==null?void 0:q.originType)||((P=we.$)==null?void 0:P.type)||oe,pathCollection:((R=we.$)==null?void 0:R.pathCollection)||[],macroExpansion:we,variableName:(te=we.$)==null?void 0:te.variableName},e}else throw m({token:e.token,errorMessage:`Expected macro function to return an Expr value, got:
11640
- ${bt(me)}`});let Pe=(j=e.$)==null?void 0:j.variableName,ie=oe;if(H(oe))if(y.value&&Se(y.value)){let we=y.value.body;if((Y=we.$)!=null&&Y.type){let Ne=we.$.type;H(Ne)&&Ne.resolvedConcreteType&&(Ne=Ne.resolvedConcreteType),ie={...oe,resolvedConcreteType:Ne}}}else _e(y.type)&&((le=y.type.return)!=null&&le.type)&&!H(y.type.return.type)&&(ie={...oe,resolvedConcreteType:y.type.return.type});if(e.$={env:t,type:ie,value:me,originType:ie,pathCollection:ye,runtimeArgExprsInOrder:Be,deferredDropExpressions:qe,variableName:Pe},W.ioBuiltin==="io_async"&&Be[0]){let we=Be[0],Ne=(Z=we.$)==null?void 0:Z.closureFunctionValue;if((Te=(ce=Ne==null?void 0:Ne.body)==null?void 0:ce.$)!=null&&Te.awaitAnalysis){e.$.awaitAnalysis=Ne.body.$.awaitAnalysis,e.$.captureType=(Ie=we.$)==null?void 0:Ie.captureType,e.$.deferredDupExpressions=(ge=we.$)==null?void 0:ge.deferredDupExpressions,(be=we.$)!=null&&be.deferredDupExpressions&&(we.$.deferredDupExpressions=void 0);let Ae=(De=we.$)==null?void 0:De.captureType;if(Ae&&e.$.awaitAnalysis){let He=new Set(Ae.fields.map(Qe=>Qe.label));e.$.awaitAnalysis={...e.$.awaitAnalysis,capturedVariables:e.$.awaitAnalysis.capturedVariables.map(Qe=>He.has(Qe.name)?{...Qe,kind:"outer"}:Qe)}}Ne.isIoAsyncStateMachineClosure=!0}else(ze=we.$)!=null&&ze.deferredDupExpressions&&(we.$.deferredDupExpressions=void 0);let tt=(We=we.$)==null?void 0:We.variableName;if(tt&&e.$.env){let Ae=ve(e.$.env,tt),He=Ae[Ae.length-1];He&&(e.$.env=zt(e.$.env,He,{...He,consumedAtToken:e.token}))}}Gt(e,!0);let ae=S(o);o.$={env:t,type:y.type,value:he||y.value,pathCollection:[],runtimeArgExprsInOrder:(pe=o.$)==null?void 0:pe.runtimeArgExprsInOrder,deferredDropExpressions:(fe=o.$)==null?void 0:fe.deferredDropExpressions,variableName:ae?($e=o.$)==null?void 0:$e.variableName:void 0},s&&(s.$={env:t,type:y.type,value:he||y.value,pathCollection:[]})}return e}else if((H(y.type)||ht(y.type))&&Er(y.type)){let W=Er(y.type),{returnType:oe,returnValue:me,callerEnv:de,pathCollection:ye,specializedFunctionValue:he,runtimeArgExprsInOrder:Be,deferredDropExpressions:qe}=$a({functionValue:ml(y.value),functionType:W.isFn.callType,expr:e,functionCalleeExpr:o,argExprs:y.args??a,callerEnv:t,context:n,isMethodCall:!!s});if(t=Zt(de),W.isFn.callType.return.isUnquote)if(rr(me)){let ie=U({expr:me.value,env:t,context:{...n}});return e.$={env:((Le=ie.$)==null?void 0:Le.env)||t,type:((Me=ie.$)==null?void 0:Me.type)||oe,value:(Ze=ie.$)==null?void 0:Ze.value,originType:(($t=ie.$)==null?void 0:$t.originType)||((It=ie.$)==null?void 0:It.type)||oe,pathCollection:((jt=ie.$)==null?void 0:jt.pathCollection)||[],macroExpansion:ie},e}else throw m({token:e.token,errorMessage:`Expected macro closure to return an Expr value, got:
11640
+ ${bt(me)}`});let Pe=(j=e.$)==null?void 0:j.variableName,ie=oe;if(H(oe))if(y.value&&Ie(y.value)){let we=y.value.body;if((Y=we.$)!=null&&Y.type){let Ne=we.$.type;H(Ne)&&Ne.resolvedConcreteType&&(Ne=Ne.resolvedConcreteType),ie={...oe,resolvedConcreteType:Ne}}}else _e(y.type)&&((le=y.type.return)!=null&&le.type)&&!H(y.type.return.type)&&(ie={...oe,resolvedConcreteType:y.type.return.type});if(e.$={env:t,type:ie,value:me,originType:ie,pathCollection:ye,runtimeArgExprsInOrder:Be,deferredDropExpressions:qe,variableName:Pe},W.ioBuiltin==="io_async"&&Be[0]){let we=Be[0],Ne=(Z=we.$)==null?void 0:Z.closureFunctionValue;if((Te=(ce=Ne==null?void 0:Ne.body)==null?void 0:ce.$)!=null&&Te.awaitAnalysis){e.$.awaitAnalysis=Ne.body.$.awaitAnalysis,e.$.captureType=(Se=we.$)==null?void 0:Se.captureType,e.$.deferredDupExpressions=(ge=we.$)==null?void 0:ge.deferredDupExpressions,(be=we.$)!=null&&be.deferredDupExpressions&&(we.$.deferredDupExpressions=void 0);let Ae=(De=we.$)==null?void 0:De.captureType;if(Ae&&e.$.awaitAnalysis){let He=new Set(Ae.fields.map(Qe=>Qe.label));e.$.awaitAnalysis={...e.$.awaitAnalysis,capturedVariables:e.$.awaitAnalysis.capturedVariables.map(Qe=>He.has(Qe.name)?{...Qe,kind:"outer"}:Qe)}}Ne.isIoAsyncStateMachineClosure=!0}else(ze=we.$)!=null&&ze.deferredDupExpressions&&(we.$.deferredDupExpressions=void 0);let tt=(We=we.$)==null?void 0:We.variableName;if(tt&&e.$.env){let Ae=ve(e.$.env,tt),He=Ae[Ae.length-1];He&&(e.$.env=zt(e.$.env,He,{...He,consumedAtToken:e.token}))}}Gt(e,!0);let ae=S(o);o.$={env:t,type:y.type,value:he||y.value,pathCollection:[],runtimeArgExprsInOrder:(pe=o.$)==null?void 0:pe.runtimeArgExprsInOrder,deferredDropExpressions:(fe=o.$)==null?void 0:fe.deferredDropExpressions,variableName:ae?($e=o.$)==null?void 0:$e.variableName:void 0},s&&(s.$={env:t,type:y.type,value:he||y.value,pathCollection:[]})}return e}else if((H(y.type)||ht(y.type))&&Er(y.type)){let W=Er(y.type),{returnType:oe,returnValue:me,callerEnv:de,pathCollection:ye,specializedFunctionValue:he,runtimeArgExprsInOrder:Be,deferredDropExpressions:qe}=$a({functionValue:ml(y.value),functionType:W.isFn.callType,expr:e,functionCalleeExpr:o,argExprs:y.args??a,callerEnv:t,context:n,isMethodCall:!!s});if(t=Zt(de),W.isFn.callType.return.isUnquote)if(rr(me)){let ie=U({expr:me.value,env:t,context:{...n}});return e.$={env:((Le=ie.$)==null?void 0:Le.env)||t,type:((Me=ie.$)==null?void 0:Me.type)||oe,value:(Ze=ie.$)==null?void 0:Ze.value,originType:(($t=ie.$)==null?void 0:$t.originType)||((It=ie.$)==null?void 0:It.type)||oe,pathCollection:((jt=ie.$)==null?void 0:jt.pathCollection)||[],macroExpansion:ie},e}else throw m({token:e.token,errorMessage:`Expected macro closure to return an Expr value, got:
11641
11641
  ${bt(me)}`});e.$={env:t,type:oe,value:me,originType:oe,pathCollection:ye,runtimeArgExprsInOrder:Be,deferredDropExpressions:qe},Gt(e,!0);let Pe=S(o);return o.$={env:t,type:y.type,value:he||y.value,pathCollection:[],runtimeArgExprsInOrder:(st=o.$)==null?void 0:st.runtimeArgExprsInOrder,deferredDropExpressions:(Ct=o.$)==null?void 0:Ct.deferredDropExpressions,variableName:Pe?(rn=o.$)==null?void 0:rn.variableName:void 0},s&&(s.$={env:t,type:y.type,value:he||y.value,pathCollection:[]}),e}else{let W=y.value;if(X(W)&&Oe(W.value)){let oe=W.value;e.$={env:t,type:oe,originType:oe,pathCollection:[]};let{values:me,pathCollection:de,callerEnv:ye,runtimeArgExprsInOrder:he}=$u(y);if(t=ye,!me)throw m({token:o.token,errorMessage:"Error evaluating struct call."});let Be=me.some(qe=>!qe||Ge(qe)&&qe.isRuntimeOnly)?void 0:Mi(oe,me);return e.$.value=dn(oe)?void 0:Be,e.$.pathCollection=de,e.$.env=t,e.$.runtimeArgExprsInOrder=he,Gt(e,!0),o.$={env:t,type:W.type,value:W,pathCollection:[]},e}else if(X(W)&&Ye(W.value)){let oe=W.value;e.$={env:t,type:oe,originType:oe,pathCollection:[]};let me=oe.variants.find(qe=>qe.name===oe.selectedVariantName);if(!me)throw m({token:e.token,errorMessage:"Enum variant not selected for enum type"});let{values:de,pathCollection:ye,callerEnv:he,runtimeArgExprsInOrder:Be}=$u(y);if(t=he,de.every(qe=>!!qe&&!(Ge(qe)&&qe.isRuntimeOnly))){let qe=Ra(oe,me.name,de);e.$.value=qe}return e.$.pathCollection=ye,e.$.env=t,e.$.runtimeArgExprsInOrder=Be,Gt(e,!0),o.$={env:t,type:W.type,value:W,pathCollection:[]},e}else if(X(W)&&Ht(W.value)){let oe=W.value;e.$={env:t,type:oe,originType:oe,pathCollection:[]};let{pathCollection:me,callerEnv:de,runtimeArgExprsInOrder:ye}=$u(y);return t=de,e.$.value=void 0,e.$.pathCollection=me,e.$.env=t,e.$.runtimeArgExprsInOrder=ye,Gt(e,!0),o.$={env:t,type:W.type,value:W,pathCollection:[]},e}else if(X(W)&&rt(W.value)){let{moduleValue:oe,callerEnv:me}=Ik(y);return t=me,e.$={env:t,type:oe.type,value:oe,originType:oe.type,pathCollection:[]},o.$={env:t,type:W.type,value:W,pathCollection:[]},e}else if(X(W)&&_t(W.value)){if(y.result.kind==="trait-specialization"){let de=y.result.result;t=de.callerEnv;let ye=xe(de.specializedTraitType);return e.$={env:t,type:ye.type,value:ye,pathCollection:[]},o.$={env:t,type:W.type,value:W,pathCollection:[]},e}let{traitValue:oe,callerEnv:me}=Sk(y);return t=me,e.$={env:t,type:oe.type,value:oe,originType:oe.type,pathCollection:[]},o.$={env:t,type:W.type,value:W,pathCollection:[]},e}else{if(X(W)&&_e(W.value))return e;if(X(W)&&ft(W.value))return e;if(X(W)&&vn(W.value))return e;if(X(W)&&(H(W.value)||ht(W.value))){if(y.result.kind==="type"&&H(W.value)&&W.value.recursiveTypeRef){let oe=W.value;e.$={env:t,type:oe,originType:oe,pathCollection:[]};let{pathCollection:me,callerEnv:de,runtimeArgExprsInOrder:ye}=$u(y);return t=de,e.$.value=void 0,e.$.pathCollection=me,e.$.env=t,e.$.runtimeArgExprsInOrder=ye,Gt(e,!0),o.$={env:t,type:W.type,value:W,pathCollection:[]},e}return e}else{if(X(W)&&Tu(W.value))return e;if(X(W)&&et(W.value))return e;if(X(W)&&Vn(W.value))return e;if(y.result.kind==="index"){let{value:oe,type:me,ptrType:de,indexMethodType:ye,indexMethodValue:he,callerEnv:Be,index:qe,comptimeRef:Pe}=Ak(y),ie=((Bt=o.$)==null?void 0:Bt.pathCollection)??[];return a.length===1&&typeof qe=="number"&&(ie.length>0?ie=ie.map(ae=>[...ae,qe.toString()]):(gt=o.$)!=null&&gt.variableName&&(ie=[[o.$.variableName,qe.toString()]])),e.$={env:Be,type:me,value:oe,originType:((ut=o.$)==null?void 0:ut.originType)??y.type,pathCollection:ie,sourceVariable:(Nt=o.$)==null?void 0:Nt.sourceVariable,indexTraitPtrType:de,indexMethodType:ye,indexMethodValue:he,comptimeRef:Pe,isAccessingProperty:!0},o.$={env:t,type:y.type,value:y.value,pathCollection:((Yt=o.$)==null?void 0:Yt.pathCollection)??[],isAccessingProperty:!0,runtimeArgExprsInOrder:(wt=o.$)==null?void 0:wt.runtimeArgExprsInOrder,deferredDropExpressions:(Ft=o.$)==null?void 0:Ft.deferredDropExpressions,variableName:(ee=o.$)==null?void 0:ee.variableName},Gt(e,!1),e}}}}throw m({token:e.token,errorMessage:`Function call is not implemented yet:
11642
11642
  ${A(e)}`})}function Rx(e){var i;if(!((i=e.$)!=null&&i.type)||!Tt(e.$.type))throw m({token:e.token,errorMessage:`Expected tuple type for drop generation:
11643
11643
  ${A(e)}`});if(!e.$.variableName)throw m({token:e.token,errorMessage:`Expected variable name for drop generation:
@@ -11722,9 +11722,9 @@ ${A(r)}`});let i=r.$.value;if(!i||!X(i))throw m({token:r.token,errorMessage:`Exp
11722
11722
  ${A(r)}`});t=r.$.env;let o=i.value,a=U({expr:e.args[1],env:t,context:{...n}});if(!a.$)throw m({token:a.token,errorMessage:`Failed to evaluate the trait argument for "${e.func.token.value}":
11723
11723
  ${A(a)}`});let s;if(X(a.$.value)){let u=a.$.value;if(!_t(u.value))throw m({token:a.token,errorMessage:`Expected trait type for second argument of "${e.func.token.value}", got a non-trait type`});s=u.value}else if(_t(a.$.type))s=a.$.type;else{if(Lt(a.$.type))return e.$={env:a.$.env,type:tn(),value:Ee(tn(),{env:a.$.env,context:n}),pathCollection:[],isAccessingProperty:!1},e;throw m({token:a.token,errorMessage:`Expected trait type for second argument of "${e.func.token.value}", got:
11724
11724
  ${A(a)}`})}t=a.$.env;let l=pn(zn({targetType:o,traitType:s,env:t}));return e.$={env:t,type:l.type,value:l,pathCollection:[],isAccessingProperty:!1},e}function Yx({expr:e,env:t,context:n,builtinName:r}){let i=U({expr:e.args[0],env:t,context:{...n}});if(!i.$||!X(i.$.value))throw m({token:e.args[0].token,errorMessage:`${r}: expected a Type argument, got: ${A(e.args[0])}`});return{type:i.$.value.value,env:i.$.env}}function Kx(e){switch(e){case"unit":return"Unit";case"bool":return"Bool";case"usize":return"Usize";case"isize":return"Isize";case"u8":return"U8";case"i8":return"I8";case"u16":return"U16";case"i16":return"I16";case"u32":return"U32";case"i32":return"I32";case"u64":return"U64";case"i64":return"I64";case"f32":return"F32";case"f64":return"F64";case"comptime_int":return"ComptimeInt";case"comptime_float":return"ComptimeFloat";case"comptime_string":return"ComptimeString";case"char":return"Char";case"short":return"Short";case"ushort":return"UShort";case"int":return"Int";case"uint":return"UInt";case"long":return"Long";case"ulong":return"ULong";case"longlong":return"LongLong";case"ulonglong":return"ULongLong";case"longdouble":return"LongDouble";case"void":return"Void";case"Type":return"Type";case"Array":return"Array";case"Tuple":return"Tuple";case"Struct":return"Struct";case"Enum":return"Enum";case"Union":return"Union";case"Function":return"Function";case"SomeType":return"Some";case"Slice":return"Slice";case"Module":return"Module";case"Trait":return"Trait";case"Ptr":return"Ptr";case"Iso":return"Iso";case"Dyn":return"Dyn";case"Expr":return"Expr";case"ComptimeList":return"ComptimeList";case"EffectsRow":return"EffectsRow";case"TypeApplication":return"TypeApplication";default:throw new Error(`Unknown TypeTag: ${e}`)}}function Rw({expr:e,env:t,context:n}){let{type:r,env:i}=Yx({expr:e,env:t,context:n,builtinName:"__yo_type_get_info"});if(H(r)){let u=Qt("TypeInfo.Unit"),c=U({expr:u,env:i,context:{...n,forceCompileTimeBindings:!0}});if(c.$){let f=Ee(c.$.type,{env:i,context:n});e.$={env:i,type:f.type,value:f,pathCollection:[]}}return e}let o,a=i;switch(r.tag){case"unit":case"bool":case"usize":case"isize":case"u8":case"i8":case"u16":case"i16":case"u32":case"i32":case"u64":case"i64":case"f32":case"f64":case"comptime_int":case"comptime_float":case"comptime_string":case"char":case"short":case"ushort":case"int":case"uint":case"long":case"ulong":case"longlong":case"ulonglong":case"longdouble":case"void":case"Expr":case"EffectsRow":case"TypeApplication":{o=`TypeInfo.${Kx(r.tag)}`;break}case"Array":{let u=r,c=hi(a,u.childType,n);a=c.env;let f=u.length,_;Mt(f)?_=String(f.value):_="0",o=`TypeInfo.Array(${c.name}, ${_})`;break}case"Slice":{let c=hi(a,r.childType,n);a=c.env,o=`TypeInfo.Slice(${c.name})`;break}case"Ptr":{let c=hi(a,r.childType,n);a=c.env,o=`TypeInfo.Ptr(${c.name})`;break}case"Iso":{let c=hi(a,r.childType,n);a=c.env,o=`TypeInfo.Iso(${c.name})`;break}case"ComptimeList":{let c=hi(a,r.childType,n);a=c.env,o=`TypeInfo.ComptimeList(${c.name})`;break}case"Type":{o=`TypeInfo.Type(${r.level})`;break}case"Struct":{let u=r,c=wu(a,u.fields,n);a=c.env;let f;u.isNewtype?f="StructKind.NewType":u.isAtomicRc?f="StructKind.AtomicObject":u.isReferenceSemantics?f="StructKind.Object":f="StructKind.Struct",o=`TypeInfo.Struct(${c.name}, ${f})`;break}case"Enum":{let c=Qx(a,r,n);a=c.env,o=`TypeInfo.Enum(${c.name})`;break}case"Union":{let c=wu(a,r.fields,n);a=c.env,o=`TypeInfo.Union(${c.name})`;break}case"Tuple":{let c=wu(a,r.fields,n);a=c.env,o=`TypeInfo.Tuple(${c.name})`;break}case"Function":{let c=Ow(a,r,n);a=c.env,o=`TypeInfo.Function(${c.name})`;break}case"Module":{let c=tN(a,r.fields,n);a=c.env,o=`TypeInfo.Module(${c.name})`;break}case"Trait":{let u=r,c=nN(a,u,n);a=c.env;let f=rN(a,u,n);a=f.env,o=`TypeInfo.Trait(${c.name}, ${f.name})`;break}case"Dyn":{let u=r,c=ku(a,u.requiredTraits.map(_=>_.traitType),n,"req");a=c.env;let f=ku(a,u.negativeTraits.map(_=>_.traitType),n,"neg");a=f.env,o=`TypeInfo.Dyn(${c.name}, ${f.name})`;break}case"SomeType":{let u=r,c=JSON.stringify(u.name),f=ku(a,u.requiredTraits.map(d=>d.traitType),n,"req");a=f.env;let _=ku(a,u.negativeTraits.map(d=>d.traitType),n,"neg");a=_.env;let p;u.resolvedConcreteType?p=hi(a,u.resolvedConcreteType,n):p={name:"unit",env:a},a=p.env,o=`TypeInfo.SomeType(${c}, ${f.name}, ${_.name}, ${p.name})`;break}default:throw m({token:e.token,errorMessage:`__yo_type_get_info: unsupported type tag: ${r.tag}`})}let s=Qt(o),l=U({expr:s,env:a,context:{...n,forceCompileTimeBindings:!0}});if(!l.$||!l.$.value)throw m({token:e.token,errorMessage:`__yo_type_get_info: failed to create TypeInfo for type tag: ${r.tag}`});return e.$={env:i,type:l.$.type,value:l.$.value,pathCollection:[]},e}function hi(e,t,n){let r=`__ti_t_${kn(e.modulePath,"tit")}`,i=xe(t);return e=wo({env:e,name:r,type:i.type,value:i}),{name:r,env:e}}function wu(e,t,n){let r=[];for(let i of t){let o=Xx(e,i,n);e=o.env,r.push(o.value)}return is(e,r,"TypeFieldInfo","fl",n)}function Xx(e,t,n){let r=`__ti_fi_${kn(e.modulePath,"tifi")}`,i=hi(e,t.type,n);e=i.env;let a=`TypeFieldInfo(${JSON.stringify(t.label)}, ${i.name})`,s=Qt(a),l=U({expr:s,env:e,context:{...n,forceCompileTimeBindings:!0}});if(!l.$||!l.$.value)throw new Error(`Failed to create TypeFieldInfo for field "${t.label}"`);let u=l.$.value;return e=wo({env:e,name:r,type:l.$.type,value:u}),{name:r,env:e,value:u}}function Qx(e,t,n){let r=[];for(let i=0;i<t.variants.length;i++){let o=t.variants[i],a=Gw(e,o.name,o.fields??[],t,i,n);e=a.env,r.push(a.value)}return is(e,r,"VariantInfo","vl",n)}function Ow(e,t,n){let r=`__ti_fni_${kn(e.modulePath,"tifni")}`,i=Jx(e,t.parameters,t.variadicParameter,n);e=i.env;let o=hi(e,t.return.type,n);e=o.env;let a=Zx(e,t.forallParameters,n);e=a.env;let s=eN(e,t.implicitParameters,n);e=s.env;let l=t.isClosure?"true":"false",u=`FunctionInfo(${i.name}, ${o.name}, ${a.name}, ${s.name}, ${l})`,c=Qt(u),f=U({expr:c,env:e,context:{...n,forceCompileTimeBindings:!0}});if(!f.$||!f.$.value)throw new Error("Failed to create FunctionInfo");return e=wo({env:e,name:r,type:f.$.type,value:f.$.value}),{name:r,env:e}}function Jx(e,t,n,r){let i=[],o=n?[...t,n]:t;for(let a of o){let s=hi(e,a.type,r);e=s.env;let l=JSON.stringify(a.label),u=a.isCompileTimeOnly?"true":"false",c=a.isQuote?"true":"false",f=a===n?"true":"false",_=`ParamInfo(${l}, ${s.name}, ${u}, ${c}, ${f})`,p=Qt(_),d=U({expr:p,env:e,context:{...r,forceCompileTimeBindings:!0}});if(!d.$||!d.$.value)throw new Error(`Failed to create ParamInfo for param "${a.label}"`);e=d.$.env,i.push(d.$.value)}return is(e,i,"ParamInfo","pl",r)}function Zx(e,t,n){let r=[];for(let i of t){let o=hi(e,i.type,n);e=o.env;let s=`ForallParamInfo(${JSON.stringify(i.label)}, ${o.name})`,l=Qt(s),u=U({expr:l,env:e,context:{...n,forceCompileTimeBindings:!0}});if(!u.$||!u.$.value)throw new Error(`Failed to create ForallParamInfo for param "${i.label}"`);e=u.$.env,r.push(u.$.value)}return is(e,r,"ForallParamInfo","fpl",n)}function eN(e,t,n){let r=[];for(let i of t){let o=hi(e,i.type,n);e=o.env;let s=`ImplicitParamInfo(${JSON.stringify(i.label)}, ${o.name})`,l=Qt(s),u=U({expr:l,env:e,context:{...n,forceCompileTimeBindings:!0}});if(!u.$||!u.$.value)throw new Error(`Failed to create ImplicitParamInfo for param "${i.label}"`);e=u.$.env,r.push(u.$.value)}return is(e,r,"ImplicitParamInfo","ipl",n)}function tN(e,t,n){let r=t.map(i=>({type:i.type,label:i.label}));return wu(e,r,n)}function nN(e,t,n){let r=[];for(let i of t.fields){let o=hi(e,i.type,n);e=o.env;let a=JSON.stringify(i.label),s=i.unassignedSomeType?"true":"false",l=`TraitFieldInfo(${a}, ${o.name}, ${s})`,u=Qt(l),c=U({expr:u,env:e,context:{...n,forceCompileTimeBindings:!0}});if(!c.$||!c.$.value)throw new Error(`Failed to create TraitFieldInfo for field "${i.label}"`);e=c.$.env,r.push(c.$.value)}return is(e,r,"TraitFieldInfo","tfl",n)}function rN(e,t,n){let r=`__ti_tk_${kn(e.modulePath,"titk")}`,i;if(t.isFuture){let s=hi(e,t.isFuture.outputType,n);e=s.env;let l=t.isFuture.effects.map(c=>c.type),u=ku(e,l,n,"eff");e=u.env,i=`TraitKind.Future(${s.name}, ${u.name})`}else if(t.isFn){let s=Ow(e,t.isFn.callType,n);e=s.env,i=`TraitKind.Fn(${s.name})`}else i="TraitKind.Normal";let o=Qt(i),a=U({expr:o,env:e,context:{...n,forceCompileTimeBindings:!0}});if(!a.$||!a.$.value)throw new Error("Failed to create TraitKind");return e=wo({env:e,name:r,type:a.$.type,value:a.$.value}),{name:r,env:e}}function ku(e,t,n,r){let i=[];for(let o of t){let a=hi(e,o,n);e=a.env;let s=`TraitInfo(${a.name})`,l=Qt(s),u=U({expr:l,env:e,context:{...n,forceCompileTimeBindings:!0}});if(!u.$||!u.$.value)throw new Error("Failed to create TraitInfo");e=u.$.env,i.push(u.$.value)}return is(e,i,"TraitInfo","trl_"+r,n)}function Pw({expr:e,env:t,context:n}){let r=U({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw m({token:e.args[0].token,errorMessage:"comptime_eval: failed to evaluate argument"});if(!pt(r.$.value))return e.$={env:r.$.env,type:ke.type,value:ke,pathCollection:[]},e;let i=r.$.value.value;t=r.$.env;let o=YT(i);for(let a of o){let s=U({expr:a,env:t,context:{...n,forceCompileTimeBindings:!1}});if(!s.$)throw m({token:e.args[0].token,errorMessage:`comptime_eval: failed to evaluate code:
11725
- ${i}`});t=s.$.env}return e.$={env:t,type:ke.type,value:ke,pathCollection:[]},e}function Uw({expr:e,env:t,context:n}){var s;it(e,F.__yo_comptime_string_to_expr,1);let r=U({expr:e.args[0],env:t,context:{...n}});if(!r.$||!pt(r.$.value)){if((s=r.$)!=null&&s.value&&pt(r.$.value)===!1){let l=Ee(ir(),{env:r.$.env,context:n});return e.$={env:r.$.env,type:l.type,value:l,pathCollection:[]},e}throw m({token:e.args[0].token,errorMessage:"__yo_comptime_string_to_expr: expected a comptime_string argument"})}let i=r.$.value.value,o=Qt(i),a=vr(o);return e.$={env:r.$.env,type:a.type,value:a,pathCollection:[]},e}function wo({env:e,name:t,type:n,value:r}){return je({env:e,variable:{name:t,type:n,value:[r],isCompileTimeOnly:!0,isOwningTheRcValue:!1,initializedAtToken:Ue,consumedAtToken:void 0,token:Ue}}).env}function is(e,t,n,r,i){let o;if(t.length>0)o=t[0].type;else{let l=Qt(n),u=U({expr:l,env:e,context:{...i,forceCompileTimeBindings:!0}});if(!u.$||!u.$.value||!X(u.$.value))throw new Error(`Failed to resolve type "${n}" for empty ComptimeList`);o=u.$.value.value}let a=`__ti_${r}_${kn(e.modulePath,"ti"+r)}`,s=wr(o,t);return e=wo({env:e,name:a,type:s.type,value:s}),{name:a,env:e}}function iN(e,t,n,r){let i=`__derive_ft_${kn(e.modulePath,"dft")}`;e=wo({env:e,name:i,type:xe(n).type,value:xe(n)});let a=`FieldInfo(${JSON.stringify(t)}, ${i})`,s=Qt(a),l=U({expr:s,env:e,context:{...r,forceCompileTimeBindings:!0}});if(!l.$||!l.$.value)throw new Error(`Failed to create FieldInfo for field "${t}"`);return{value:l.$.value,env:l.$.env}}function zw({env:e,context:t,mapperVarName:n,argValue:r,argType:i,token:o}){let a=`__derive_arg_${kn(e.modulePath,"da")}`;e=wo({env:e,name:a,type:i,value:r});let s=`${n}(${a})`,l=Qt(s),u=U({expr:l,env:e,context:{...t,forceCompileTimeBindings:!0}});if(!u.$||!rr(u.$.value))throw m({token:o,errorMessage:`derive mapper function must return comptime(Expr), got: ${u.$?A(u):"nothing"}`});return{exprValue:u.$.value.value,env:u.$.env}}function oN(e,t){if(e.length===0)throw new Error("combineExprsWithOperator: empty exprs list");if(e.length===1)return e[0];let n=e[0];for(let r=1;r<e.length;r++)n={tag:"FnCall",func:{tag:"Atom",token:t.token},args:[n,e[r]],isInfix:!0,token:t.token};return n}function Bw({expr:e,env:t,context:n}){it(e,F.__yo_type_join_fields,3);let r=U({expr:e.args[0],env:t,context:{...n}});if(!r.$||!X(r.$.value))throw m({token:e.args[0].token,errorMessage:"__yo_type_join_fields: first argument must be a Type"});t=r.$.env;let i=r.$.value.value;if(H(i)){let d=Ee(ir(),{env:t,context:n});return e.$={env:t,type:d.type,value:d,pathCollection:[]},e}if(!Oe(i))throw m({token:e.args[0].token,errorMessage:`__yo_type_join_fields: expected a struct type, got: ${O(i)}`});let o=U({expr:e.args[1],env:t,context:{...n}});if(!o.$||!Se(o.$.value))throw m({token:e.args[1].token,errorMessage:"__yo_type_join_fields: second argument must be a function"});t=o.$.env;let a=o.$.value,s=`__derive_mapper_${kn(t.modulePath,"dm")}`,l=U({expr:e.args[2],env:t,context:{...n}});if(!l.$||!rr(l.$.value))throw m({token:e.args[2].token,errorMessage:"__yo_type_join_fields: third argument must be a quoted expression (e.g., quote(&&))"});t=l.$.env;let u=l.$.value.value;t=vt(t),t=wo({env:t,name:s,type:o.$.type,value:a});let c=[],f=i;for(let d=0;d<f.fields.length;d++){let v=f.fields[d],{value:y,env:h}=iN(t,v.label,v.type,n);t=h;let{exprValue:g,env:T}=zw({env:t,context:{...n,expectedType:void 0},mapperVarName:s,argValue:y,argType:y.type,token:e.args[1].token});t=T,c.push(g)}if(t=Zt(t,!0),c.length===0)throw m({token:e.token,errorMessage:"__yo_type_join_fields: struct has no fields"});let _=oN(c,u),p=vr(_);return e.$={env:t,type:p.type,value:p,pathCollection:[]},e}function qw({expr:e,env:t,context:n}){it(e,F.__yo_type_map_variants,2);let r=U({expr:e.args[0],env:t,context:{...n}});if(!r.$||!X(r.$.value))throw m({token:e.args[0].token,errorMessage:"__yo_type_map_variants: first argument must be a Type"});t=r.$.env;let i=r.$.value.value;if(H(i)){let f=Sw([]),_=Ee(f.type,{env:t,context:n});return e.$={env:t,type:_.type,value:_,pathCollection:[]},e}if(!Ye(i))throw m({token:e.args[0].token,errorMessage:`__yo_type_map_variants: expected an enum type, got: ${O(i)}`});let o=U({expr:e.args[1],env:t,context:{...n}});if(!o.$||!Se(o.$.value))throw m({token:e.args[1].token,errorMessage:"__yo_type_map_variants: second argument must be a function"});t=o.$.env;let a=o.$.value,s=`__derive_vmap_${kn(t.modulePath,"dvm")}`,l=i;t=vt(t),t=wo({env:t,name:s,type:o.$.type,value:a});let u=[];for(let f=0;f<l.variants.length;f++){let _=l.variants[f],{value:p,env:d}=Gw(t,_.name,_.fields??[],i,f,n);t=d;let{exprValue:v,env:y}=zw({env:t,context:{...n,expectedType:void 0},mapperVarName:s,argValue:p,argType:p.type,token:e.args[1].token});t=y,u.push(vr(v))}t=Zt(t,!0);let c=Sw(u);return e.$={env:t,type:c.type,value:c,pathCollection:[]},e}function Gw(e,t,n,r,i,o){let a=`__derive_et_${kn(e.modulePath,"det")}`;e=wo({env:e,name:a,type:xe(r).type,value:xe(r)});let s=wu(e,n,o);e=s.env;let u=`VariantInfo(${JSON.stringify(t)}, ${s.name}, ${a}, usize(${i}))`,c=Qt(u),f=U({expr:c,env:e,context:{...o,forceCompileTimeBindings:!0}});if(!f.$||!f.$.value)throw new Error(`Failed to create VariantInfo for variant "${t}"`);return{value:f.$.value,env:f.$.env}}function Sw(e){return wr(ir(),e)}function jw({expr:e,env:t,context:n}){var p;if(n.isValidatingFunctionDefinition||!n.isExecuting)return e.$={env:t,type:ke.type,value:ke,pathCollection:[]},e;if(e.args.length<2)throw m({token:e.token,errorMessage:`derive requires at least 2 arguments: derive(Type, Trait1, ...). Got ${e.args.length}.`});let r=e.args,i=0,o,a;if(r[i]&&S(r[i])&&b(r[i],B.forall)){o=r[i],i++,t=vt(t);for(let d of o.args){let v,y;if(S(d)&&b(d,":",2)){let $=d.args[0];if(!Q($))throw m({token:$.token,errorMessage:`Expected identifier for forall parameter name, got: ${A($)}`});v=$.token.value,y=d.args[1]}else if(Q(d))v=d.token.value;else throw m({token:d.token,errorMessage:`Expected parameter name for forall parameter, got: ${A(d)}`});let h;if(y){let $=U({expr:y,env:t,context:{...n}});(p=$.$)!=null&&p.env&&(t=$.$.env),$.$&&X($.$.value)&&(h=$.$.value.value)}let g=h||en(),T=Ee(g,{variableName:v,env:t,context:n}),{env:E}=je({env:t,variable:{name:v,type:g,isCompileTimeOnly:!0,value:[T],token:d.token,initializedAtToken:d.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=E}}if(r[i]&&S(r[i])&&b(r[i],B.where)){if(!o)throw m({token:r[i].token,errorMessage:"derive where(...) requires forall(...)."});a=r[i],i++}if(!r[i])throw m({token:e.token,errorMessage:"derive requires a target type."});let s=r[i],l=U({expr:r[i],env:t,context:{...n}});if(!l.$||!X(l.$.value))throw m({token:r[i].token,errorMessage:`derive: expected a type, got:
11726
- ${A(r[i])}`});t=l.$.env;let u=l.$.value.value;if(i++,r[i]&&S(r[i])&&b(r[i],B.where)){if(!o)throw m({token:r[i].token,errorMessage:"derive where(...) requires forall(...)."});if(a)throw m({token:r[i].token,errorMessage:"derive supports only a single where(...) clause."});a=r[i],i++}if(!Oe(u)&&!Ye(u))throw m({token:r[0].token,errorMessage:`derive only works on struct and enum types. Got: ${O(u)}`});let c=r.slice(i);if(c.length===0)throw m({token:e.token,errorMessage:"derive requires at least one trait argument after the target type."});let f=t;o&&(t=Zt(t));let _=t;for(let d of c)t=aN({traitArgExpr:d,targetType:u,env:_,envForTraitEval:o?f:_,context:n,forallArg:o,whereArg:a,targetTypeExpr:s});return e.$={env:t,type:ke.type,value:ke,pathCollection:[]},e}function aN({traitArgExpr:e,targetType:t,env:n,envForTraitEval:r,context:i,forallArg:o,whereArg:a,targetTypeExpr:s}){var u,c;let l=U({expr:e,env:r,context:{...i}});if(!l.$)throw m({token:e.token,errorMessage:`derive: failed to evaluate trait argument: ${A(e)}`});if(_t(l.$.type)){let f=l.$.type,_=f.deriveRule??((u=f.functionValue)==null?void 0:u.deriveRule);if(_){let p=Ww(e);return ny({deriveRule:_,targetType:t,env:n,context:i,token:e.token,traitParams:p,forallArg:o,whereArg:a,targetTypeExpr:s})}throw m({token:e.token,errorMessage:`derive: trait '${O(f)}' does not have a derive rule. Use derive_rule() to register one, or provide a derive function.`})}if(X(l.$.value)&&_t(l.$.value.value)){let f=l.$.value.value,_=f.deriveRule??((c=f.functionValue)==null?void 0:c.deriveRule);if(_){let p=Ww(e);return ny({deriveRule:_,targetType:t,env:n,context:i,token:e.token,traitParams:p,forallArg:o,whereArg:a,targetTypeExpr:s})}throw m({token:e.token,errorMessage:`derive: trait '${O(f)}' does not have a derive rule. Use derive_rule() to register one, or provide a derive function.`})}if(Se(l.$.value)){let f=l.$.value;return f.deriveRule?ny({deriveRule:f.deriveRule,targetType:t,env:n,context:i,token:e.token,traitParams:[],forallArg:o,whereArg:a,targetTypeExpr:s}):sN({funcValue:f,targetType:t,env:n,context:i,token:e.token})}throw m({token:e.token,errorMessage:`derive: expected a trait or derive function, got: ${A(e)}`})}function sN({funcValue:e,targetType:t,env:n,context:r,token:i}){let o=t.typeName??O(t),a=e.funcName;if(!a)throw m({token:i,errorMessage:"derive: user-defined derive function must be a named function."});let s=`${a}(${o})`,l=Qt(s),u=U({expr:l,env:n,context:{...r,forceCompileTimeBindings:!1}});if(!u.$)throw m({token:i,errorMessage:`derive: user-defined derive function failed:
11727
- ${s}`});return u.$.env}function Ww(e){return S(e)?e.args??[]:[]}function ny({deriveRule:e,targetType:t,env:n,context:r,token:i,traitParams:o,forallArg:a,whereArg:s,targetTypeExpr:l}){n=vt(n);let u=`__derive_T_${kn(n.modulePath,"dT")}`,c=xe(t);n=ro(n,u,c.type,c);let f=`__derive_rule_${kn(n.modulePath,"dr")}`;n=ro(n,f,e.type,e);let _=vr(l),p=`__derive_te_${kn(n.modulePath,"dte")}`;n=ro(n,p,_.type,_);let d=`__derive_fp_${kn(n.modulePath,"dfp")}`;{let x=`__derive_fp_tmp_${kn(n.modulePath,"dfpt")}`,V;if(a){let P=vr(a),R=`__derive_fpe_${kn(n.modulePath,"dfpe")}`;n=ro(n,R,P.type,P),V=`((${x} : Option(Expr)) = .Some(${R}))`}else V=`((${x} : Option(Expr)) = .None)`;let M=Qt(V),q=U({expr:M,env:n,context:{...r,forceCompileTimeBindings:!0}});if(q.$){n=q.$.env;let P=ve(n,x),R=P[P.length-1];R&&R.value&&R.value[0]&&(n=ro(n,d,R.type,R.value[0]))}}let v=`__derive_wp_${kn(n.modulePath,"dwp")}`;{let x=`__derive_wp_tmp_${kn(n.modulePath,"dwpt")}`,V;if(s){let P=vr(s),R=`__derive_wpe_${kn(n.modulePath,"dwpe")}`;n=ro(n,R,P.type,P),V=`((${x} : Option(Expr)) = .Some(${R}))`}else V=`((${x} : Option(Expr)) = .None)`;let M=Qt(V),q=U({expr:M,env:n,context:{...r,forceCompileTimeBindings:!0}});if(q.$){n=q.$.env;let P=ve(n,x),R=P[P.length-1];R&&R.value&&R.value[0]&&(n=ro(n,v,R.type,R.value[0]))}}let y=`__derive_ctx_${kn(n.modulePath,"dctx")}`,h=`DeriveContext(${p}, ${d}, ${v})`,g=Qt(h),T=U({expr:g,env:n,context:{...r,forceCompileTimeBindings:!0}});if(!T.$||!T.$.value)throw m({token:i,errorMessage:"derive: failed to create DeriveContext"});n=T.$.env,n=ro(n,y,T.$.type,T.$.value);let E=[];for(let x=0;x<o.length;x++){let V=vr(o[x]),M=`__derive_tp_${kn(n.modulePath,"dtp")}`;n=ro(n,M,V.type,V),E.push(M)}let $=`__derive_tps_${kn(n.modulePath,"dtps")}`;if(E.length>0){let x=`comptime_list(${E.join(", ")})`,V=Qt(x),M=U({expr:V,env:n,context:{...r,forceCompileTimeBindings:!0}});if(!M.$||!M.$.value)throw m({token:i,errorMessage:"derive: failed to create trait params list"});n=M.$.env,n=ro(n,$,M.$.type,M.$.value)}else{let x=ir(),V=wr(x,[]);n=ro(n,$,V.type,V)}let k=`${f}(${u}, ${y}, ${$})`,C=Qt(k),w=U({expr:C,env:n,context:{...r,forceCompileTimeBindings:!0}});if(!w.$||!w.$.value)throw m({token:i,errorMessage:"derive: derive rule function failed"});if(n=w.$.env,!rr(w.$.value))throw m({token:i,errorMessage:"derive: derive rule must return comptime(Expr), got something else"});let I=w.$.value.value;n=Zt(n,!0);let L=U({expr:I,env:n,context:{...r,forceCompileTimeBindings:!1}});if(!L.$)throw m({token:i,errorMessage:"derive: failed to evaluate derive rule output"});return L.$.env}function ro(e,t,n,r){return je({env:e,variable:{name:t,type:n,value:[r],isCompileTimeOnly:!0,isOwningTheRcValue:!1,initializedAtToken:Ue,consumedAtToken:void 0,token:Ue}}).env}function Hw({expr:e,env:t,context:n}){it(e,F.derive_rule,2);let r=U({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw m({token:e.args[0].token,errorMessage:`derive_rule: failed to evaluate trait argument: ${A(e.args[0])}`});t=r.$.env;let i=U({expr:e.args[1],env:t,context:{...n}});if(!i.$)throw m({token:e.args[1].token,errorMessage:`derive_rule: failed to evaluate derive function: ${A(e.args[1])}`});if(t=i.$.env,!Se(i.$.value))throw m({token:e.args[1].token,errorMessage:`derive_rule: second argument must be a function, got: ${A(e.args[1])}`});let o=i.$.value;if(Se(r.$.value))r.$.value.deriveRule=o;else if(_t(r.$.type))r.$.type.deriveRule=o;else if(X(r.$.value)&&_t(r.$.value.value))r.$.value.value.deriveRule=o;else throw m({token:e.args[0].token,errorMessage:`derive_rule: first argument must be a trait constructor or trait type, got: ${A(e.args[0])}`});return e.$={env:t,type:ke.type,value:ke,pathCollection:[]},e}function Yw({expr:e,env:t,context:n}){it(e,F.typeid,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:"Failed to evaluate expression for typeid."});if(t=i.$.env,!i.$.value||!X(i.$.value))throw m({token:r.token,errorMessage:`typeid expects a type argument, got ${i.$.type?O(i.$.type):"unknown"}. Use is() or downcast() for runtime type checks on Dyn values.`});let o=Ee(Mn(),{env:t,context:n});return e.$={env:t,type:Mn(),value:o,pathCollection:[]},e}function Kw({expr:e,env:t}){it(e,F.va_start);for(let n=0;n<e.args.length;n++){let r=e.args[n];if(!Q(r)||!Wt(r))throw m({token:r.token,errorMessage:`Invalid argument for va_start. Expected identifier, got:
11725
+ ${i}`});t=s.$.env}return e.$={env:t,type:ke.type,value:ke,pathCollection:[]},e}function Uw({expr:e,env:t,context:n}){var s;it(e,F.__yo_comptime_string_to_expr,1);let r=U({expr:e.args[0],env:t,context:{...n}});if(!r.$||!pt(r.$.value)){if((s=r.$)!=null&&s.value&&pt(r.$.value)===!1){let l=Ee(ir(),{env:r.$.env,context:n});return e.$={env:r.$.env,type:l.type,value:l,pathCollection:[]},e}throw m({token:e.args[0].token,errorMessage:"__yo_comptime_string_to_expr: expected a comptime_string argument"})}let i=r.$.value.value,o=Qt(i),a=vr(o);return e.$={env:r.$.env,type:a.type,value:a,pathCollection:[]},e}function wo({env:e,name:t,type:n,value:r}){return je({env:e,variable:{name:t,type:n,value:[r],isCompileTimeOnly:!0,isOwningTheRcValue:!1,initializedAtToken:Ue,consumedAtToken:void 0,token:Ue}}).env}function is(e,t,n,r,i){let o;if(t.length>0)o=t[0].type;else{let l=Qt(n),u=U({expr:l,env:e,context:{...i,forceCompileTimeBindings:!0}});if(!u.$||!u.$.value||!X(u.$.value))throw new Error(`Failed to resolve type "${n}" for empty ComptimeList`);o=u.$.value.value}let a=`__ti_${r}_${kn(e.modulePath,"ti"+r)}`,s=wr(o,t);return e=wo({env:e,name:a,type:s.type,value:s}),{name:a,env:e}}function iN(e,t,n,r){let i=`__derive_ft_${kn(e.modulePath,"dft")}`;e=wo({env:e,name:i,type:xe(n).type,value:xe(n)});let a=`FieldInfo(${JSON.stringify(t)}, ${i})`,s=Qt(a),l=U({expr:s,env:e,context:{...r,forceCompileTimeBindings:!0}});if(!l.$||!l.$.value)throw new Error(`Failed to create FieldInfo for field "${t}"`);return{value:l.$.value,env:l.$.env}}function zw({env:e,context:t,mapperVarName:n,argValue:r,argType:i,token:o}){let a=`__derive_arg_${kn(e.modulePath,"da")}`;e=wo({env:e,name:a,type:i,value:r});let s=`${n}(${a})`,l=Qt(s),u=U({expr:l,env:e,context:{...t,forceCompileTimeBindings:!0}});if(!u.$||!rr(u.$.value))throw m({token:o,errorMessage:`derive mapper function must return comptime(Expr), got: ${u.$?A(u):"nothing"}`});return{exprValue:u.$.value.value,env:u.$.env}}function oN(e,t){if(e.length===0)throw new Error("combineExprsWithOperator: empty exprs list");if(e.length===1)return e[0];let n=e[0];for(let r=1;r<e.length;r++)n={tag:"FnCall",func:{tag:"Atom",token:t.token},args:[n,e[r]],isInfix:!0,token:t.token};return n}function Bw({expr:e,env:t,context:n}){it(e,F.__yo_type_join_fields,3);let r=U({expr:e.args[0],env:t,context:{...n}});if(!r.$||!X(r.$.value))throw m({token:e.args[0].token,errorMessage:"__yo_type_join_fields: first argument must be a Type"});t=r.$.env;let i=r.$.value.value;if(H(i)){let d=Ee(ir(),{env:t,context:n});return e.$={env:t,type:d.type,value:d,pathCollection:[]},e}if(!Oe(i))throw m({token:e.args[0].token,errorMessage:`__yo_type_join_fields: expected a struct type, got: ${O(i)}`});let o=U({expr:e.args[1],env:t,context:{...n}});if(!o.$||!Ie(o.$.value))throw m({token:e.args[1].token,errorMessage:"__yo_type_join_fields: second argument must be a function"});t=o.$.env;let a=o.$.value,s=`__derive_mapper_${kn(t.modulePath,"dm")}`,l=U({expr:e.args[2],env:t,context:{...n}});if(!l.$||!rr(l.$.value))throw m({token:e.args[2].token,errorMessage:"__yo_type_join_fields: third argument must be a quoted expression (e.g., quote(&&))"});t=l.$.env;let u=l.$.value.value;t=vt(t),t=wo({env:t,name:s,type:o.$.type,value:a});let c=[],f=i;for(let d=0;d<f.fields.length;d++){let v=f.fields[d],{value:y,env:h}=iN(t,v.label,v.type,n);t=h;let{exprValue:g,env:T}=zw({env:t,context:{...n,expectedType:void 0},mapperVarName:s,argValue:y,argType:y.type,token:e.args[1].token});t=T,c.push(g)}if(t=Zt(t,!0),c.length===0)throw m({token:e.token,errorMessage:"__yo_type_join_fields: struct has no fields"});let _=oN(c,u),p=vr(_);return e.$={env:t,type:p.type,value:p,pathCollection:[]},e}function qw({expr:e,env:t,context:n}){it(e,F.__yo_type_map_variants,2);let r=U({expr:e.args[0],env:t,context:{...n}});if(!r.$||!X(r.$.value))throw m({token:e.args[0].token,errorMessage:"__yo_type_map_variants: first argument must be a Type"});t=r.$.env;let i=r.$.value.value;if(H(i)){let f=Sw([]),_=Ee(f.type,{env:t,context:n});return e.$={env:t,type:_.type,value:_,pathCollection:[]},e}if(!Ye(i))throw m({token:e.args[0].token,errorMessage:`__yo_type_map_variants: expected an enum type, got: ${O(i)}`});let o=U({expr:e.args[1],env:t,context:{...n}});if(!o.$||!Ie(o.$.value))throw m({token:e.args[1].token,errorMessage:"__yo_type_map_variants: second argument must be a function"});t=o.$.env;let a=o.$.value,s=`__derive_vmap_${kn(t.modulePath,"dvm")}`,l=i;t=vt(t),t=wo({env:t,name:s,type:o.$.type,value:a});let u=[];for(let f=0;f<l.variants.length;f++){let _=l.variants[f],{value:p,env:d}=Gw(t,_.name,_.fields??[],i,f,n);t=d;let{exprValue:v,env:y}=zw({env:t,context:{...n,expectedType:void 0},mapperVarName:s,argValue:p,argType:p.type,token:e.args[1].token});t=y,u.push(vr(v))}t=Zt(t,!0);let c=Sw(u);return e.$={env:t,type:c.type,value:c,pathCollection:[]},e}function Gw(e,t,n,r,i,o){let a=`__derive_et_${kn(e.modulePath,"det")}`;e=wo({env:e,name:a,type:xe(r).type,value:xe(r)});let s=wu(e,n,o);e=s.env;let u=`VariantInfo(${JSON.stringify(t)}, ${s.name}, ${a}, usize(${i}))`,c=Qt(u),f=U({expr:c,env:e,context:{...o,forceCompileTimeBindings:!0}});if(!f.$||!f.$.value)throw new Error(`Failed to create VariantInfo for variant "${t}"`);return{value:f.$.value,env:f.$.env}}function Sw(e){return wr(ir(),e)}function jw({expr:e,env:t,context:n}){var p;if(n.isValidatingFunctionDefinition||!n.isExecuting)return e.$={env:t,type:ke.type,value:ke,pathCollection:[]},e;if(e.args.length<2)throw m({token:e.token,errorMessage:`derive requires at least 2 arguments: derive(Type, Trait1, ...). Got ${e.args.length}.`});let r=e.args,i=0,o,a;if(r[i]&&S(r[i])&&b(r[i],B.forall)){o=r[i],i++,t=vt(t);for(let d of o.args){let v,y;if(S(d)&&b(d,":",2)){let $=d.args[0];if(!Q($))throw m({token:$.token,errorMessage:`Expected identifier for forall parameter name, got: ${A($)}`});v=$.token.value,y=d.args[1]}else if(Q(d))v=d.token.value;else throw m({token:d.token,errorMessage:`Expected parameter name for forall parameter, got: ${A(d)}`});let h;if(y){let $=U({expr:y,env:t,context:{...n}});(p=$.$)!=null&&p.env&&(t=$.$.env),$.$&&X($.$.value)&&(h=$.$.value.value)}let g=h||en(),T=Ee(g,{variableName:v,env:t,context:n}),{env:E}=je({env:t,variable:{name:v,type:g,isCompileTimeOnly:!0,value:[T],token:d.token,initializedAtToken:d.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=E}}if(r[i]&&S(r[i])&&b(r[i],B.where)){if(!o)throw m({token:r[i].token,errorMessage:"derive where(...) requires forall(...)."});a=r[i],i++}if(!r[i])throw m({token:e.token,errorMessage:"derive requires a target type."});let s=r[i],l=U({expr:r[i],env:t,context:{...n}});if(!l.$||!X(l.$.value))throw m({token:r[i].token,errorMessage:`derive: expected a type, got:
11726
+ ${A(r[i])}`});t=l.$.env;let u=l.$.value.value;if(i++,r[i]&&S(r[i])&&b(r[i],B.where)){if(!o)throw m({token:r[i].token,errorMessage:"derive where(...) requires forall(...)."});if(a)throw m({token:r[i].token,errorMessage:"derive supports only a single where(...) clause."});a=r[i],i++}if(!Oe(u)&&!Ye(u))throw m({token:r[0].token,errorMessage:`derive only works on struct and enum types. Got: ${O(u)}`});let c=r.slice(i);if(c.length===0)throw m({token:e.token,errorMessage:"derive requires at least one trait argument after the target type."});let f=t;o&&(t=Zt(t));let _=t;for(let d of c)t=aN({traitArgExpr:d,targetType:u,env:_,envForTraitEval:o?f:_,context:n,forallArg:o,whereArg:a,targetTypeExpr:s});return e.$={env:t,type:ke.type,value:ke,pathCollection:[]},e}function aN({traitArgExpr:e,targetType:t,env:n,envForTraitEval:r,context:i,forallArg:o,whereArg:a,targetTypeExpr:s}){var u,c;let l=U({expr:e,env:r,context:{...i}});if(!l.$)throw m({token:e.token,errorMessage:`derive: failed to evaluate trait argument: ${A(e)}`});if(_t(l.$.type)){let f=l.$.type,_=f.deriveRule??((u=f.functionValue)==null?void 0:u.deriveRule);if(_){let p=Ww(e);return ny({deriveRule:_,targetType:t,env:n,context:i,token:e.token,traitParams:p,forallArg:o,whereArg:a,targetTypeExpr:s})}throw m({token:e.token,errorMessage:`derive: trait '${O(f)}' does not have a derive rule. Use derive_rule() to register one, or provide a derive function.`})}if(X(l.$.value)&&_t(l.$.value.value)){let f=l.$.value.value,_=f.deriveRule??((c=f.functionValue)==null?void 0:c.deriveRule);if(_){let p=Ww(e);return ny({deriveRule:_,targetType:t,env:n,context:i,token:e.token,traitParams:p,forallArg:o,whereArg:a,targetTypeExpr:s})}throw m({token:e.token,errorMessage:`derive: trait '${O(f)}' does not have a derive rule. Use derive_rule() to register one, or provide a derive function.`})}if(Ie(l.$.value)){let f=l.$.value;return f.deriveRule?ny({deriveRule:f.deriveRule,targetType:t,env:n,context:i,token:e.token,traitParams:[],forallArg:o,whereArg:a,targetTypeExpr:s}):sN({funcValue:f,targetType:t,env:n,context:i,token:e.token})}throw m({token:e.token,errorMessage:`derive: expected a trait or derive function, got: ${A(e)}`})}function sN({funcValue:e,targetType:t,env:n,context:r,token:i}){let o=t.typeName??O(t),a=e.funcName;if(!a)throw m({token:i,errorMessage:"derive: user-defined derive function must be a named function."});let s=`${a}(${o})`,l=Qt(s),u=U({expr:l,env:n,context:{...r,forceCompileTimeBindings:!1}});if(!u.$)throw m({token:i,errorMessage:`derive: user-defined derive function failed:
11727
+ ${s}`});return u.$.env}function Ww(e){return S(e)?e.args??[]:[]}function ny({deriveRule:e,targetType:t,env:n,context:r,token:i,traitParams:o,forallArg:a,whereArg:s,targetTypeExpr:l}){n=vt(n);let u=`__derive_T_${kn(n.modulePath,"dT")}`,c=xe(t);n=ro(n,u,c.type,c);let f=`__derive_rule_${kn(n.modulePath,"dr")}`;n=ro(n,f,e.type,e);let _=vr(l),p=`__derive_te_${kn(n.modulePath,"dte")}`;n=ro(n,p,_.type,_);let d=`__derive_fp_${kn(n.modulePath,"dfp")}`;{let x=`__derive_fp_tmp_${kn(n.modulePath,"dfpt")}`,V;if(a){let P=vr(a),R=`__derive_fpe_${kn(n.modulePath,"dfpe")}`;n=ro(n,R,P.type,P),V=`((${x} : Option(Expr)) = .Some(${R}))`}else V=`((${x} : Option(Expr)) = .None)`;let M=Qt(V),q=U({expr:M,env:n,context:{...r,forceCompileTimeBindings:!0}});if(q.$){n=q.$.env;let P=ve(n,x),R=P[P.length-1];R&&R.value&&R.value[0]&&(n=ro(n,d,R.type,R.value[0]))}}let v=`__derive_wp_${kn(n.modulePath,"dwp")}`;{let x=`__derive_wp_tmp_${kn(n.modulePath,"dwpt")}`,V;if(s){let P=vr(s),R=`__derive_wpe_${kn(n.modulePath,"dwpe")}`;n=ro(n,R,P.type,P),V=`((${x} : Option(Expr)) = .Some(${R}))`}else V=`((${x} : Option(Expr)) = .None)`;let M=Qt(V),q=U({expr:M,env:n,context:{...r,forceCompileTimeBindings:!0}});if(q.$){n=q.$.env;let P=ve(n,x),R=P[P.length-1];R&&R.value&&R.value[0]&&(n=ro(n,v,R.type,R.value[0]))}}let y=`__derive_ctx_${kn(n.modulePath,"dctx")}`,h=`DeriveContext(${p}, ${d}, ${v})`,g=Qt(h),T=U({expr:g,env:n,context:{...r,forceCompileTimeBindings:!0}});if(!T.$||!T.$.value)throw m({token:i,errorMessage:"derive: failed to create DeriveContext"});n=T.$.env,n=ro(n,y,T.$.type,T.$.value);let E=[];for(let x=0;x<o.length;x++){let V=vr(o[x]),M=`__derive_tp_${kn(n.modulePath,"dtp")}`;n=ro(n,M,V.type,V),E.push(M)}let $=`__derive_tps_${kn(n.modulePath,"dtps")}`;if(E.length>0){let x=`comptime_list(${E.join(", ")})`,V=Qt(x),M=U({expr:V,env:n,context:{...r,forceCompileTimeBindings:!0}});if(!M.$||!M.$.value)throw m({token:i,errorMessage:"derive: failed to create trait params list"});n=M.$.env,n=ro(n,$,M.$.type,M.$.value)}else{let x=ir(),V=wr(x,[]);n=ro(n,$,V.type,V)}let k=`${f}(${u}, ${y}, ${$})`,C=Qt(k),w=U({expr:C,env:n,context:{...r,forceCompileTimeBindings:!0}});if(!w.$||!w.$.value)throw m({token:i,errorMessage:"derive: derive rule function failed"});if(n=w.$.env,!rr(w.$.value))throw m({token:i,errorMessage:"derive: derive rule must return comptime(Expr), got something else"});let I=w.$.value.value;n=Zt(n,!0);let L=U({expr:I,env:n,context:{...r,forceCompileTimeBindings:!1}});if(!L.$)throw m({token:i,errorMessage:"derive: failed to evaluate derive rule output"});return L.$.env}function ro(e,t,n,r){return je({env:e,variable:{name:t,type:n,value:[r],isCompileTimeOnly:!0,isOwningTheRcValue:!1,initializedAtToken:Ue,consumedAtToken:void 0,token:Ue}}).env}function Hw({expr:e,env:t,context:n}){it(e,F.derive_rule,2);let r=U({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw m({token:e.args[0].token,errorMessage:`derive_rule: failed to evaluate trait argument: ${A(e.args[0])}`});t=r.$.env;let i=U({expr:e.args[1],env:t,context:{...n}});if(!i.$)throw m({token:e.args[1].token,errorMessage:`derive_rule: failed to evaluate derive function: ${A(e.args[1])}`});if(t=i.$.env,!Ie(i.$.value))throw m({token:e.args[1].token,errorMessage:`derive_rule: second argument must be a function, got: ${A(e.args[1])}`});let o=i.$.value;if(Ie(r.$.value))r.$.value.deriveRule=o;else if(_t(r.$.type))r.$.type.deriveRule=o;else if(X(r.$.value)&&_t(r.$.value.value))r.$.value.value.deriveRule=o;else throw m({token:e.args[0].token,errorMessage:`derive_rule: first argument must be a trait constructor or trait type, got: ${A(e.args[0])}`});return e.$={env:t,type:ke.type,value:ke,pathCollection:[]},e}function Yw({expr:e,env:t,context:n}){it(e,F.typeid,1);let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:"Failed to evaluate expression for typeid."});if(t=i.$.env,!i.$.value||!X(i.$.value))throw m({token:r.token,errorMessage:`typeid expects a type argument, got ${i.$.type?O(i.$.type):"unknown"}. Use is() or downcast() for runtime type checks on Dyn values.`});let o=Ee(Mn(),{env:t,context:n});return e.$={env:t,type:Mn(),value:o,pathCollection:[]},e}function Kw({expr:e,env:t}){it(e,F.va_start);for(let n=0;n<e.args.length;n++){let r=e.args[n];if(!Q(r)||!Wt(r))throw m({token:r.token,errorMessage:`Invalid argument for va_start. Expected identifier, got:
11728
11728
  ${A(r)}`});if(n===0){let i=r.token.value,o=ve(t,i);if(o.length===0)throw m({token:r.token,errorMessage:`Variable '${i}' not found in the environment.`});let a=o[o.length-1];t=zt(t,a,{...a,initializedAtToken:r.token})}if(n===1){let i=r.token.value;if(ve(t,i).length===0)throw m({token:r.token,errorMessage:`Variable '${i}' not found in the environment.`})}}return e.$={type:ke.type,value:ke,env:t,pathCollection:[]},e}function Xw({expr:e,env:t,context:n}){var a;it(e,F.__yo_var_print_info,1);let r=e.args[0],i=U({expr:r,env:t,context:n});i.$&&(t=i.$.env);let o=(a=i.$)==null?void 0:a.variableName;if(o){let s=ve(t,o);if(s.length>0){let l=s.at(-1);console.log(o$(l))}}return e.$={env:t,type:ke.type,value:ke,pathCollection:[]},e}function Qw({expr:e,env:t,context:n}){var s;it(e,F.__yo_var_is_owning_the_rc_value,1);let r=e.args[0],i=U({expr:r,env:t,context:n});i.$&&(t=i.$.env);let o=(s=i.$)==null?void 0:s.variableName,a=!1;if(o){let l=ve(t,o);l.length>0&&(a=l.at(-1).isOwningTheRcValue)}return e.$={env:t,type:tn(),value:pn(a),pathCollection:[]},e}function Jw({expr:e,env:t,context:n}){var s;it(e,F.__yo_var_has_other_aliases,1);let r=e.args[0],i=U({expr:r,env:t,context:n});i.$&&(t=i.$.env);let o=(s=i.$)==null?void 0:s.variableName,a=!1;if(o){let l=ve(t,o);if(l.length>0){let u=l.at(-1);if(u.isOwningTheSameRcValueAs)a=!0;else{let f=u.id;for(let _=t.frames.length-1;_>=0;_--){let p=t.frames[_];for(let d=0;d<p.variables.length;d++){let v=p.variables[d];if(v.isOwningTheSameRcValueAs&&v.isOwningTheSameRcValueAs.id===f){a=!0;break}}}}}}return e.$={env:t,type:tn(),value:pn(a),pathCollection:[]},e}function Zw({expr:e,env:t,context:n}){let r=e.args[0],i=n.expectedType;i&&et(i.type)&&(i={...i,type:i.type.childType});let o=U({expr:r,env:t,context:{...n,expectedType:i}});if(!o.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for pointer:
11729
11729
  ${A(r)}`});if(t=o.$.env,X(o.$.value)){let s=o.$.value.value,l=An(s),u=xe(l);return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else throw m({token:r.token,errorMessage:`Cannot create a pointer to a value. Use "&" to create a pointer to a value:
11730
11730
  ${A(r)}`})}function eF({expr:e,env:t,context:n}){if(!b(e,B.Array,2))throw m({token:e.token,errorMessage:`Expected "Array(comptime(Type), comptime(usize))" with 2 arguments, like "Array(i32, 10)"
@@ -11792,21 +11792,21 @@ Trait field "${o??"unnamed"}" has type: ${O(p)}
11792
11792
 
11793
11793
  To avoid circular dependency issues, please explicitly provide the value for this field.`});s&&(s.$={env:n,type:p,value:_??Ee(p,{variableName:o,env:n,context:r}),pathCollection:[]}),e!==l&&(e.$={env:n,value:ke,type:ke.type,pathCollection:[]});let y;if(i&&!_&&Lt(p)&&p.level===0){if(o){let w=ve(n,o),I=w[w.length-1];I!=null&&I.value&&X(I.value[0])&&H(I.value[0].value)&&(y=I.value[0].value)}y||(y=Zr(p,o??`__associated_type_${xt(n.modulePath)}`,{env:n,context:r}))}return{field:{label:o??`__field_${xt(n.modulePath)}`,type:p,exprs:{expr:e,labelExpr:s,typeExpr:l,defaultValueExpr:u,assignedValueExpr:f},defaultValue:c,assignedValue:_,unassignedSomeType:y,docComment:s?(C=r.docCommentLookup)==null?void 0:C.get(Rr(s.token)):void 0},env:n}}function pF({expr:e,env:t,context:n}){var _,p,d,v;if(!b(e,B.trait))throw m({token:e.token,errorMessage:`Expected "trait", got:
11794
11794
  ${A(e)}`});let r=Ot(t),i=[];r.fields=i,n.currentModulePath&&(r.definedInModulePath=n.currentModulePath),t=vt(t);let o=e.args,a=Zr(en(),"Self",{env:t,context:n});a.trait=r,yi(t,"Runtime")&&(t=Tr("Runtime",a,t,n));let l;if(o.length>0){let y=o[o.length-1];if(S(y)&&b(y,B.where)&&(l=y.args,l.length===0))throw m({token:y.token,errorMessage:"The where clause must have at least one constraint."})}let u=[],c={...n,SelfTraitType:r};if(l&&l.length>0){let y=fF({constraintExprs:l,env:t,context:c,selfType:a,traitType:r,collectPendingTraits:!0});t=y.env,u=y.pendingTraits}for(let y=0;y<o.length;y++){let h=o[y];if(S(h)&&b(h,B.where)){if(y!==o.length-1)throw m({token:h.token,errorMessage:"The where clause must be the last argument in a trait definition."});continue}{let{field:g,env:T}=_N({expr:h,env:t,traitFieldIndex:y,context:{...c,SelfType:a,SelfTraitType:r},isForEvaluatingTraitType:!0});if(i.find($=>$.label===g.label))throw m({token:S(h)?((_=h.args[0])==null?void 0:_.token)??h.token:h.token,errorMessage:`Duplicate label 3 "${g.label}" in trait`});if(i.push(g),t=T,g.unassignedSomeType){let $=ve(t,g.label),k=$[$.length-1],C=k!=null&&k.value&&X(k.value[0])&&H(k.value[0].value)?k.value[0].value:void 0;if((C==null?void 0:C.id)!==g.unassignedSomeType.id){let w=xe(g.unassignedSomeType),I=((p=g.exprs.labelExpr)==null?void 0:p.token)??g.exprs.expr.token??h.token,{env:L}=je({env:t,variable:{name:g.label,type:w.type,isCompileTimeOnly:!0,value:[w],token:I,initializedAtToken:I,consumedAtToken:void 0,isOwningTheRcValue:!1,isOwningTheSameRcValueAs:void 0,isReassignable:!1},allowVariableShadowing:!0});t=L}}}}if(u.length>0){let y=[];for(let h of u){let g=fN({lhsExpr:h.lhsExpr,traitExpr:h.traitExpr,originalConstraintExpr:h.originalConstraintExpr,env:t,context:c,selfType:a,traitType:r});t=g.env,g.success||y.push(h)}if(y.length>0){let h=y[0];fF({constraintExprs:[h.originalConstraintExpr],env:t,context:c,selfType:a,traitType:r,collectPendingTraits:!1})}}for(let y of i){if(!_e(y.type))continue;let h=y.type;if(h.return.isCompileTimeOnly&&Xe(h.return.type)){let g=Ya(h.return.type,t);if(g){let T=((d=h.return.typeExpr)==null?void 0:d.token)??e.token;throw m({token:T,errorMessage:`Return type "${O(h.return.type)}" in trait field "${y.label}" is used with "comptime" but type parameter "${O(g)}" does not implement the Comptime trait. Add "${g.name} <: Comptime" to the where clause.`})}}for(let g of h.parameters)if(g.isCompileTimeOnly&&Xe(g.type)){let T=Ya(g.type,t);if(T){let E=((v=g.exprs.typeExpr)==null?void 0:v.token)??e.token;throw m({token:E,errorMessage:`Parameter type "${O(g.type)}" in trait field "${y.label}" is used with "comptime" but type parameter "${O(T)}" does not implement the Comptime trait. Add "${T.name} <: Comptime" to the where clause.`})}}}t=Zt(t,!0);let f=xe(r);return e.$={env:t,value:f,type:f.type,pathCollection:[]},e.func.$=e.$,e}function pN({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}=Ca({expr:l,env:t,tupleFieldIndex:s,context:{...n},forType:r});if(u.label&&i.find(_=>_.label===u.label))throw m({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:js(i),env:t}}function dF({expr:e,env:t,context:n}){if(e.args.length===0){let o=xe(Ci());return e.$={env:t,value:o,type:o.type,pathCollection:[]},e}let{type:r,env:i}=pN({args:e.args,env:t,context:{...n},forType:"tuple"});return t=i,r.fields.forEach(o=>{if(o.exprs.defaultValueExpr)throw m({token:o.exprs.defaultValueExpr.token,errorMessage:"Tuple type cannot have default value."})}),t=dE({env:t,context:n,tupleType:r,errorToken:e.token}),e.$={env:t,value:xe(r),type:In(r),pathCollection:[]},e}function mF({expr:e,env:t,context:n}){var s,l;if(!b(e,B.union))throw m({token:e.token,errorMessage:`Expected "union", got:
11795
- ${A(e)}`});let r=LE(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:f,env:_}=Ca({expr:c,env:t,tupleFieldIndex:u,context:{...n,SelfType:r},forType:"union"});if(i.find(d=>d.label===f.label))throw m({token:S(c)?((s=c.args[0])==null?void 0:s.token)??c.token:c.token,errorMessage:`Duplicate label "${f.label}" in union field.`});if(f.defaultValue)throw m({token:((l=f.exprs.defaultValueExpr)==null?void 0:l.token)??f.exprs.expr.token,errorMessage:"Union type cannot have default value for its fields."});if(qa(f.type,t)||!Do(f.type,t))throw m({token:f.exprs.expr.token,errorMessage:"Union type fields must be runtime types."});if(mt(f.type))throw m({token:f.exprs.expr.token,errorMessage:"Union type cannot have field with garbage-collected type."});i.push(f),t=_}t=cE({unionType:r,env:t,context:n}),t=fE({unionType:r,env:t,context:n}),t=_E({unionType:r,env:t,context:n});let a=xe(r);return e.$={env:t,value:a,type:a.type,pathCollection:[]},e.func.$=e.$,e}function L_({expr:e,env:t,context:n}){var le,Z,ce,Te,Ie,ge,be,De,ze,We,pe;let r=(le=n.expectedType)==null?void 0:le.type;if(!r)throw m({token:e.token,errorMessage:`Expected a function type, got:
11795
+ ${A(e)}`});let r=LE(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:f,env:_}=Ca({expr:c,env:t,tupleFieldIndex:u,context:{...n,SelfType:r},forType:"union"});if(i.find(d=>d.label===f.label))throw m({token:S(c)?((s=c.args[0])==null?void 0:s.token)??c.token:c.token,errorMessage:`Duplicate label "${f.label}" in union field.`});if(f.defaultValue)throw m({token:((l=f.exprs.defaultValueExpr)==null?void 0:l.token)??f.exprs.expr.token,errorMessage:"Union type cannot have default value for its fields."});if(qa(f.type,t)||!Do(f.type,t))throw m({token:f.exprs.expr.token,errorMessage:"Union type fields must be runtime types."});if(mt(f.type))throw m({token:f.exprs.expr.token,errorMessage:"Union type cannot have field with garbage-collected type."});i.push(f),t=_}t=cE({unionType:r,env:t,context:n}),t=fE({unionType:r,env:t,context:n}),t=_E({unionType:r,env:t,context:n});let a=xe(r);return e.$={env:t,value:a,type:a.type,pathCollection:[]},e.func.$=e.$,e}function L_({expr:e,env:t,context:n}){var le,Z,ce,Te,Se,ge,be,De,ze,We,pe;let r=(le=n.expectedType)==null?void 0:le.type;if(!r)throw m({token:e.token,errorMessage:`Expected a function type, got:
11796
11796
  ${A(e)}`});let i,o=!1,a,s;if(_e(r))i=r;else if(H(r)){let fe=Er(r);if(fe)a=fe,i=fe.isFn.callType,o=!0,s=r;else throw m({token:e.token,errorMessage:`Expected a function type or Impl(Fn(...)), got:
11797
11797
  ${O(r)}`})}else throw m({token:e.token,errorMessage:`Expected a function type or Impl(Fn(...)), got:
11798
11798
  ${O(r)}${ht(r)?`
11799
11799
  Use 'dyn((x) => expr)' for dynamic dispatch`:""}`});let l=o?"=>":"->",u=o?"closure":"function";if(!b(e,l,2))throw m({token:e.token,errorMessage:`Expected ${l} for anonymous ${u}, got:
11800
11800
  ${A(e)}`});let c=e.args[0],f=e.args[1],_=[];S(c)&&b(c,B.tuple)?_=c.args:_=[c];let p=[],d=[],v=[];for(let fe=0;fe<_.length;fe++){let $e=_[fe];if(S($e)&&b($e,B.forall)){if(fe!==0)throw m({token:$e.token,errorMessage:"forall(...) must be the first parameter expression"});p=$e.args}else S($e)&&b($e,B.using)?d=$e.args:v.push($e)}if(v.length!==i.parameters.length)throw m({token:e.token,errorMessage:`Expected ${i.parameters.length} regular parameters, got ${v.length}`});let y=t;t=vt(s$(t));for(let fe=0;fe<p.length;fe++){let $e=p[fe],Le=i.forallParameters[fe];if(!Q($e))throw m({token:$e.token,errorMessage:`Expected parameter name for forall parameter, got ${A($e)}`});let Me=$e.token.value;if(Me!==Le.label)throw m({token:$e.token,errorMessage:`Forall parameter name must match expected name.
11801
11801
  Expected: "${Le.label}"
11802
- Got: "${Me}"`})}for(let fe=0;fe<i.forallParameters.length;fe++){let $e=p[fe],Le=i.forallParameters[fe],{env:Me}=je({env:t,variable:{name:Le.label,type:Le.type,isCompileTimeOnly:Le.isCompileTimeOnly,value:[Ee(Le.type,{variableName:Le.label,env:t,context:n})],token:($e==null?void 0:$e.token)??Ue,initializedAtToken:($e==null?void 0:$e.token)??Ue,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});t=Me,$e&&($e.$={env:t,type:Le.type,value:Ee(Le.type,{variableName:Le.label,env:t,context:n}),pathCollection:[]})}let h=i.implicitParameters.some(fe=>fe.isEffectRowSpread),g,T;if(h&&d.length>0){g=[];for(let fe of d)if(S(fe)&&b(fe,":",2)){let $e=fe.args[0],Le=fe.args[1];if(!Q($e))throw m({token:$e.token,errorMessage:`Expected identifier for effect name, got ${A($e)}`});let Me=$e.token.value,Ze=U({expr:Et(Le),env:y,context:{...n,isEvaluatingFunctionType:!0}});if(!((Z=Ze.$)!=null&&Z.value)||!X(Ze.$.value))throw m({token:Le.token,errorMessage:`Expected a type for effect parameter "${Me}", got ${A(Le)}`});let $t=Ze.$.value.value;g.push({label:Me,type:$t,isCompileTimeOnly:!0,isImplicit:!0,isOwningTheRcValue:!1,isQuote:!1,exprs:{expr:fe,labelExpr:$e,typeExpr:Le,defaultValueExpr:void 0}})}else if(Q(fe)){let $e=fe.token.value,Me=ve(y,$e).at(-1);if(!Me)throw m({token:fe.token,errorMessage:`Variable "${$e}" not found. Cannot infer type for using() parameter.`});g.push({label:$e,type:Me.type,isCompileTimeOnly:!0,isImplicit:!0,isOwningTheRcValue:!1,isQuote:!1,exprs:{expr:fe,labelExpr:fe,typeExpr:fe,defaultValueExpr:void 0}})}else throw m({token:fe.token,errorMessage:`Expected "name : Type" or identifier in using(), got ${A(fe)}`});T=Ro(g);for(let fe of i.implicitParameters)fe.isEffectRowSpread&&H(fe.type)&&fe.type.isEffectsRow&&(fe.type.resolvedConcreteType=T)}else if(d.length>0){let fe=[];for(let Le of d)if(S(Le)&&b(Le,":",2)){let Me=Le.args[0],Ze=Le.args[1];if(!Q(Me))throw m({token:Me.token,errorMessage:`Expected identifier for effect name, got ${A(Me)}`});let $t=U({expr:Et(Ze),env:y,context:{...n,isEvaluatingFunctionType:!0}});if(!((ce=$t.$)!=null&&ce.value)||!X($t.$.value))throw m({token:Ze.token,errorMessage:`Expected a type for effect parameter "${Me.token.value}", got ${A(Ze)}`});fe.push({name:Me.token.value,type:$t.$.value.value,nameExpr:Me})}else if(Q(Le))fe.push({name:Le.token.value,type:void 0,nameExpr:Le});else throw m({token:Le.token,errorMessage:`Expected "name : Type" or identifier in using(), got ${A(Le)}`});if(fe.some(Le=>Le.type!==void 0)){if(fe.length!==i.implicitParameters.length)throw m({token:e.token,errorMessage:`Effect row mismatch: closure declares ${fe.length} effects, but call site resolved ${i.implicitParameters.length} effects.`});let Le=new Set,Me=[];for(let Ze=0;Ze<fe.length;Ze++){let $t=fe[Ze];if(!$t.type){Me.push({...i.implicitParameters[Ze],label:$t.name,exprs:{...i.implicitParameters[Ze].exprs,expr:$t.nameExpr,labelExpr:$t.nameExpr}}),Le.add(Ze);continue}let It=!1;for(let jt=0;jt<i.implicitParameters.length;jt++){if(Le.has(jt))continue;let st=i.implicitParameters[jt];if(Ce({type:$t.type,env:y},{type:st.type,env:y})){Me.push({...st,label:$t.name,exprs:{...st.exprs,expr:$t.nameExpr,labelExpr:$t.nameExpr}}),Le.add(jt),It=!0;break}}if(!It)throw m({token:$t.nameExpr.token,errorMessage:`Effect row type mismatch for "${$t.name}": closure declares ${O($t.type)}, but no matching resolved effect found.`})}g=Me,T=Ro(g)}else{if(d.length!==i.implicitParameters.length)throw m({token:e.token,errorMessage:`Expected ${i.implicitParameters.length} implicit parameters in using(...), got ${d.length}`});g=i.implicitParameters}}else g=i.implicitParameters;let E=[];for(let fe=0;fe<g.length;fe++){let $e=g[fe],Le=T?(Te=$e.exprs)==null?void 0:Te.labelExpr:d[fe],Me=$e.label;Le&&Q(Le)&&(Me=Le.token.value);let Ze;if(_e($e.type)){let Ct=(Ie=i.implicitParameters[fe])==null?void 0:Ie.label,rn=[$e.label];Ct&&Ct!==$e.label&&rn.push(Ct);for(let Bt of rn){let gt=ve(y,Bt),ut=gt[gt.length-1];if(ut!=null&&ut.value&&ut.value.length>0){let Nt=ut.value[0];if(Nt&&Se(Nt)){Ze=Nt;break}}}if(!Ze){let gt=Pr(y,ut=>{var Nt;return ut.isImplicit===!0&&ut.isCompileTimeOnly===!0&&Se((Nt=ut.value)==null?void 0:Nt[0])&&Ce({type:$e.type,env:y},{type:ut.type,env:y})}).at(-1);(ge=gt==null?void 0:gt.value)!=null&&ge[0]&&Se(gt.value[0])&&(Ze=gt.value[0])}}let $t=Ze||Ee($e.type,{variableName:Me,env:t,context:n}),It=n.isInsideIoAsyncCall&&o&&_e($e.type)&&!Ze;if(It&&E.push({name:Me,type:$e.type,token:(Le==null?void 0:Le.token)??Ue}),!It&&n.isInsideIoAsyncCall&&o&&rt($e.type)&&!Ze){let Ct=$e.type;for(let rn of Ct.fields)_e(rn.type)&&E.push({name:rn.label,type:rn.type,token:(Le==null?void 0:Le.token)??Ue})}let{env:st}=je({env:t,variable:{name:Me,type:$e.type,isCompileTimeOnly:!It,isImplicit:!0,value:It?void 0:[$t],token:(Le==null?void 0:Le.token)??Ue,initializedAtToken:(Le==null?void 0:Le.token)??Ue,consumedAtToken:void 0,isOwningTheRcValue:!1,isEffectParam:It||void 0},allowVariableShadowing:!0});t=st,Le&&(Le.$={env:t,type:$e.type,value:It?void 0:$t,pathCollection:[]})}for(let fe=0;fe<v.length;fe++){let $e=v[fe],Le=i.parameters[fe];if(Le.isCompileTimeOnly){if(!Q($e))throw m({token:$e.token,errorMessage:`Expected parameter name for compile-time parameter, got ${A($e)}`});let It=$e.token.value;if(It!=="_"&&It!==Le.label)throw m({token:$e.token,errorMessage:`Compile-time parameter name must match expected name.
11802
+ Got: "${Me}"`})}for(let fe=0;fe<i.forallParameters.length;fe++){let $e=p[fe],Le=i.forallParameters[fe],{env:Me}=je({env:t,variable:{name:Le.label,type:Le.type,isCompileTimeOnly:Le.isCompileTimeOnly,value:[Ee(Le.type,{variableName:Le.label,env:t,context:n})],token:($e==null?void 0:$e.token)??Ue,initializedAtToken:($e==null?void 0:$e.token)??Ue,consumedAtToken:void 0,isOwningTheRcValue:!1},allowVariableShadowing:!0});t=Me,$e&&($e.$={env:t,type:Le.type,value:Ee(Le.type,{variableName:Le.label,env:t,context:n}),pathCollection:[]})}let h=i.implicitParameters.some(fe=>fe.isEffectRowSpread),g,T;if(h&&d.length>0){g=[];for(let fe of d)if(S(fe)&&b(fe,":",2)){let $e=fe.args[0],Le=fe.args[1];if(!Q($e))throw m({token:$e.token,errorMessage:`Expected identifier for effect name, got ${A($e)}`});let Me=$e.token.value,Ze=U({expr:Et(Le),env:y,context:{...n,isEvaluatingFunctionType:!0}});if(!((Z=Ze.$)!=null&&Z.value)||!X(Ze.$.value))throw m({token:Le.token,errorMessage:`Expected a type for effect parameter "${Me}", got ${A(Le)}`});let $t=Ze.$.value.value;g.push({label:Me,type:$t,isCompileTimeOnly:!0,isImplicit:!0,isOwningTheRcValue:!1,isQuote:!1,exprs:{expr:fe,labelExpr:$e,typeExpr:Le,defaultValueExpr:void 0}})}else if(Q(fe)){let $e=fe.token.value,Me=ve(y,$e).at(-1);if(!Me)throw m({token:fe.token,errorMessage:`Variable "${$e}" not found. Cannot infer type for using() parameter.`});g.push({label:$e,type:Me.type,isCompileTimeOnly:!0,isImplicit:!0,isOwningTheRcValue:!1,isQuote:!1,exprs:{expr:fe,labelExpr:fe,typeExpr:fe,defaultValueExpr:void 0}})}else throw m({token:fe.token,errorMessage:`Expected "name : Type" or identifier in using(), got ${A(fe)}`});T=Ro(g);for(let fe of i.implicitParameters)fe.isEffectRowSpread&&H(fe.type)&&fe.type.isEffectsRow&&(fe.type.resolvedConcreteType=T)}else if(d.length>0){let fe=[];for(let Le of d)if(S(Le)&&b(Le,":",2)){let Me=Le.args[0],Ze=Le.args[1];if(!Q(Me))throw m({token:Me.token,errorMessage:`Expected identifier for effect name, got ${A(Me)}`});let $t=U({expr:Et(Ze),env:y,context:{...n,isEvaluatingFunctionType:!0}});if(!((ce=$t.$)!=null&&ce.value)||!X($t.$.value))throw m({token:Ze.token,errorMessage:`Expected a type for effect parameter "${Me.token.value}", got ${A(Ze)}`});fe.push({name:Me.token.value,type:$t.$.value.value,nameExpr:Me})}else if(Q(Le))fe.push({name:Le.token.value,type:void 0,nameExpr:Le});else throw m({token:Le.token,errorMessage:`Expected "name : Type" or identifier in using(), got ${A(Le)}`});if(fe.some(Le=>Le.type!==void 0)){if(fe.length!==i.implicitParameters.length)throw m({token:e.token,errorMessage:`Effect row mismatch: closure declares ${fe.length} effects, but call site resolved ${i.implicitParameters.length} effects.`});let Le=new Set,Me=[];for(let Ze=0;Ze<fe.length;Ze++){let $t=fe[Ze];if(!$t.type){Me.push({...i.implicitParameters[Ze],label:$t.name,exprs:{...i.implicitParameters[Ze].exprs,expr:$t.nameExpr,labelExpr:$t.nameExpr}}),Le.add(Ze);continue}let It=!1;for(let jt=0;jt<i.implicitParameters.length;jt++){if(Le.has(jt))continue;let st=i.implicitParameters[jt];if(Ce({type:$t.type,env:y},{type:st.type,env:y})){Me.push({...st,label:$t.name,exprs:{...st.exprs,expr:$t.nameExpr,labelExpr:$t.nameExpr}}),Le.add(jt),It=!0;break}}if(!It)throw m({token:$t.nameExpr.token,errorMessage:`Effect row type mismatch for "${$t.name}": closure declares ${O($t.type)}, but no matching resolved effect found.`})}g=Me,T=Ro(g)}else{if(d.length!==i.implicitParameters.length)throw m({token:e.token,errorMessage:`Expected ${i.implicitParameters.length} implicit parameters in using(...), got ${d.length}`});g=i.implicitParameters}}else g=i.implicitParameters;let E=[];for(let fe=0;fe<g.length;fe++){let $e=g[fe],Le=T?(Te=$e.exprs)==null?void 0:Te.labelExpr:d[fe],Me=$e.label;Le&&Q(Le)&&(Me=Le.token.value);let Ze;if(_e($e.type)){let Ct=(Se=i.implicitParameters[fe])==null?void 0:Se.label,rn=[$e.label];Ct&&Ct!==$e.label&&rn.push(Ct);for(let Bt of rn){let gt=ve(y,Bt),ut=gt[gt.length-1];if(ut!=null&&ut.value&&ut.value.length>0){let Nt=ut.value[0];if(Nt&&Ie(Nt)){Ze=Nt;break}}}if(!Ze){let gt=Pr(y,ut=>{var Nt;return ut.isImplicit===!0&&ut.isCompileTimeOnly===!0&&Ie((Nt=ut.value)==null?void 0:Nt[0])&&Ce({type:$e.type,env:y},{type:ut.type,env:y})}).at(-1);(ge=gt==null?void 0:gt.value)!=null&&ge[0]&&Ie(gt.value[0])&&(Ze=gt.value[0])}}let $t=Ze||Ee($e.type,{variableName:Me,env:t,context:n}),It=n.isInsideIoAsyncCall&&o&&_e($e.type)&&!Ze;if(It&&E.push({name:Me,type:$e.type,token:(Le==null?void 0:Le.token)??Ue}),!It&&n.isInsideIoAsyncCall&&o&&rt($e.type)&&!Ze){let Ct=$e.type;for(let rn of Ct.fields)_e(rn.type)&&E.push({name:rn.label,type:rn.type,token:(Le==null?void 0:Le.token)??Ue})}let{env:st}=je({env:t,variable:{name:Me,type:$e.type,isCompileTimeOnly:!It,isImplicit:!0,value:It?void 0:[$t],token:(Le==null?void 0:Le.token)??Ue,initializedAtToken:(Le==null?void 0:Le.token)??Ue,consumedAtToken:void 0,isOwningTheRcValue:!1,isEffectParam:It||void 0},allowVariableShadowing:!0});t=st,Le&&(Le.$={env:t,type:$e.type,value:It?void 0:$t,pathCollection:[]})}for(let fe=0;fe<v.length;fe++){let $e=v[fe],Le=i.parameters[fe];if(Le.isCompileTimeOnly){if(!Q($e))throw m({token:$e.token,errorMessage:`Expected parameter name for compile-time parameter, got ${A($e)}`});let It=$e.token.value;if(It!=="_"&&It!==Le.label)throw m({token:$e.token,errorMessage:`Compile-time parameter name must match expected name.
11803
11803
  Expected: "${Le.label}"
11804
11804
  Got: "${It}"`})}let Me=$e.token.value,Ze=Le.label,{env:$t}=je({env:t,variable:{name:Me,type:Le.type,isCompileTimeOnly:Le.isCompileTimeOnly,value:Le.isCompileTimeOnly?[Ee(Le.type,{variableName:Le.label,env:t,context:n})]:void 0,token:$e.token,initializedAtToken:$e.token,consumedAtToken:void 0,isOwningTheRcValue:Le.isOwningTheRcValue,parameterAlias:Me!==Ze?Ze:void 0}});t=$t,$e.$={env:t,type:Le.type,value:Le.isCompileTimeOnly?Ee(Le.type,{variableName:Le.label,env:t,context:n}):void 0,pathCollection:[]}}let $=t.frames[t.frames.length-1],k={...i,forallParameters:i.forallParameters,implicitParameters:T?g:g.map((fe,$e)=>{let Le=d[$e];if(Le&&Q(Le)){let Me=Le.token.value;if(Me!==fe.label)return{...fe,label:Me}}return fe}),parameters:i.parameters.map((fe,$e)=>{if(fe.isCompileTimeOnly)return fe;{let Le=v[$e];return{...fe,label:Q(Le)?Le.token.value:fe.label,exprs:{...fe.exprs,expr:Le,labelExpr:Le,typeExpr:fe.exprs.typeExpr,defaultValueExpr:void 0}}}}),return:{...i.return,typeExpr:i.return.typeExpr},parametersFrame:$,env:r_(i.env)};if((be=k.whereClauseExprs)!=null&&be.length){let fe=k.whereClauseExprs.map(Le=>Et(Le));t=Go({constraintExprs:fe,env:t,context:{...n,isEvaluatingFunctionType:!0}}).env}let C={tag:"Function",type:k,body:f,frameLevel:t.frames.length-1,funcId:`fn_${xt(t.modulePath)}`,definitionSiteEnclosingFunctionType:((De=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:De.kind)==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0,calledComptimeFunctionCaches:[],specializedFunctionCaches:[]},w=!!a,I=p.length>0||i.parameters.some(fe=>Xe(fe.type))||i.SelfType&&Xe(i.SelfType),L,x;if(I)Xm({functionBodyExpr:f,functionType:i,functionValue:C,env:t,context:n}),f.$={env:t,type:i.return.type,value:i.return.isCompileTimeOnly?Ee(i.return.type,{variableName:"function_body",env:t,context:n}):void 0,pathCollection:[]},L={...n,isExecuting:!1,capturedVariables:new Map},x=f;else{let{evaluationContext:fe}=dl({...n,isExecuting:!1,isValidatingFunctionDefinition:!1},i,C,t);if(L=fe,n.isInsideIoAsyncCall&&o&&(L={...L,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"async-block",evaluationEnv:t}}),x=En({expr:f,env:t,context:L,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),!x.$)throw m({token:f.token,errorMessage:"Failed to evaluate the function body."});t=x.$.env}let V=L.capturedVariables;if(eo(x)&&(C.isControlFunction=!0),x.$&&(i.implicitParameters.some(fe=>rt(fe.type))||n.isInsideIoAsyncCall)){let fe=PE(x);fe.hasAwaits&&(x.$.awaitAnalysis=fe)}let M=(ze=x.$)==null?void 0:ze.type;if(H(i.return.type)&&!i.return.type.resolvedConcreteType&&M){let fe=M;if(H(fe)&&fe.resolvedConcreteType&&(fe=fe.resolvedConcreteType),!H(fe)){let $e=hn({type:fe,expectedType:void 0,expr:x,env:t});i.return.type.resolvedConcreteType=$e}}if(!H(i.return.type)&&Xe(i.return.type)&&M&&!H(M)&&!Xe(M)&&(Kt({type:i.return.type,env:t},{type:M,env:t},[],{setResolvedConcreteType:!0}),i.return.type=M,k.return.type=M),!C.isControlFunction&&M&&!Ce({type:i.return.type,env:t},{type:M,env:t}))throw m({token:f.token,errorMessage:`Incompatible return type:
11805
11805
  - Expected: ${O(i.return.type)}
11806
11806
  - Got : ${O(M)}`});(We=x.$)!=null&&We.env&&(t=(pe=x.$)==null?void 0:pe.env),t=Zt(t,!0),t=y;let q;if(w&&V&&V.size>0&&(q=E_({capturedVariables:V,env:t})),w&&E.length>0){q||(q=new Map);for(let fe of E)q.set(fe.name,{frameLevel:0,usageType:"read",token:fe.token,value:void 0,type:fe.type,isEffectParam:!0})}let P,R,te,j,Y=C;if((n.isAnalyzingCtfeCapability||n.forceCompileTimeBindings)&&!o){let fe=cl(C,t,n);fe&&(Y=fe)}if(o&&a&&s){j=T_({expectedCaptureType:void 0,capturedVariablesWithValues:q,env:t,closureToken:e.token,context:{...n}}).captureType;let $e=SE(k,t),{capturedVariableDupExpressions:Le,env:Me}=$_({capturedVariablesWithValues:q,env:t,context:n});te=Le,t=Me,C.funcId=`closure_${xt(t.modulePath)}`;let Ze=L.ownConsumedCaptures?Array.from(L.ownConsumedCaptures):void 0;C.closureInfo={closureType:$e,captureType:j,effectParamNames:E.length>0?E.map($t=>$t.name):void 0,consumedCaptures:Ze!=null&&Ze.length?Ze:void 0},H(s)&&j&&v_({wrapperType:s,captureType:j,env:t,errorToken:e.token}),s.resolvedConcreteType=j,P={...s,resolvedConcreteType:j},R=void 0}else P=Y.type,R=Y;return e.$={env:t,type:P,value:R,pathCollection:w&&V?pl(V):[],deferredDupExpressions:o&&te?te:void 0,captureType:o?j:void 0,closureFunctionValue:o?Y:void 0,isAnonymousFunctionDefinition:!0},w&&Gt(e,!0),e}function yF({expr:e,env:t,context:n}){let r=e.args;if(r.length===0)throw m({token:e.token,errorMessage:`Expected at least one element in array, got ${r.length}`});let i=r.length,o,a;n.expectedType&&ft(n.expectedType.type)&&(a=n.expectedType.type.childType);let s=[],l=[];for(let f=0;f<r.length;f++){let _=r[f],p=U({expr:_,env:t,context:{...n,expectedType:a?{type:a,env:t}:void 0}});if(cr(p,n),!p.$)throw m({token:_.token,errorMessage:`Failed to evaluate array element: ${A(_)}`});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:hn({type:o,expectedType:void 0,expr:void 0,env:t}),env:t},{type:p.$.type,env:t}))o=p.$.type;else throw m({token:_.token,errorMessage:`Array element type mismatch:
11807
11807
  Expected type: ${O(o)}
11808
11808
  Given type: ${O(p.$.type)}`});l.push(p)}let u=ho(o,mr("Usize",i)),c=s.every(f=>!!f)?aa(u,s):void 0;return e.$={env:t,type:u,value:c,pathCollection:[],runtimeArgExprsInOrder:l},Gt(e,!0),e}function gF(e,t){if(e.token.type==="bool"){let n=e.token.value==="true",r=pn(n);return e.$={env:t,value:r,type:r.type,pathCollection:[]},e}else throw m({token:e.token,errorMessage:`Expected bool literal, got ${e.tag}`})}function hF(e,t){if(e.token.type==="char"){let n=dN(e.token.value),r=Vi(BigInt(n));return e.$={env:t,value:r,type:r.type,pathCollection:[]},e}else throw m({token:e.token,errorMessage:`Expected char literal, got ${e.tag}`})}function dN(e){let t=e.slice(1,-1);if(t.length===1)return t.charCodeAt(0);if(t.length===2&&t[0]==="\\"){let n=t[1];switch(n){case"n":return 10;case"t":return 9;case"r":return 13;case"\\":return 92;case"'":return 39;case'"':return 34;case"0":return 0;case"a":return 7;case"b":return 8;case"f":return 12;case"v":return 11;default:throw new Error(`Unknown escape sequence: \\${n}`)}}else throw new Error(`Invalid char literal: ${e}`)}function vF({expr:e,env:t,context:n}){let r=[],i=e.args;if(i.length===0)throw m({token:e.token,errorMessage:`Expected at least one element in comptime_list, got ${i.length}`});let o;n.expectedType&&vn(n.expectedType.type)&&(o=n.expectedType.type.childType);for(let s=0;s<i.length;s++){let l=i[s],u=U({expr:l,env:t,context:{...n}});if(!u.$||!u.$.value)throw m({token:l.token,errorMessage:`Failed to evaluate expr_list element. Expected compile-time known value:
11809
- ${A(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 m({token:l.token,errorMessage:`Mismatched element types in comptime_list. Expected element of type ${O(o)}, got ${O(u.$.type)}`})}let a=wr(o,r);return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}function TF(e,t,n){let i=ve(t,"Box").find(p=>p.value&&Se(p.value[0])&&_e(p.type));if(!i||!i.value||!Se(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=xe(e),u=vt(a.env),{env:c}=je({env:u,variable:{name:s.label,token:Ue,type:l.type,isCompileTimeOnly:!0,initializedAtToken:Ue,consumedAtToken:void 0,value:[l],isOwningTheRcValue:!1}}),{value:f,callerEnv:_}=qo({functionCalleeExpr:void 0,functionType:a,functionValue:o,argValues:{forallArgs:[],args:[{value:l,parameterType:s.type,argType:en()}],variadicArgs:[]},callerEnv:t,calleeEnv:c,context:n});if(!X(f)||!dn(f.value))throw new Error("Box type constructor did not return a type value");return{boxType:f.value,env:_}}function mN(e,t,n){var r;try{let i=U({expr:e,env:t,context:n});if(!i.$)return!1;let o=i.$.value;if(Se(o))return!!ve(t,"box").find(l=>l.value&&Se(l.value[0])&&l.value[0]===o);if(X(o)){let s=o.value;return!!((r=s==null?void 0:s.typeName)!=null&&r.startsWith("Box("))}else return!1}catch{return!1}}function EF({expr:e,env:t,context:n}){it(e,B.dyn,1);let r=e.args[0],i=n.expectedType,o;if(n.expectedType&&ht(n.expectedType.type)){let y=n.expectedType.type;if(o=Zr(en(),"",{requiredTraits:y.requiredTraits.map(h=>h.traitType),negativeTraits:y.negativeTraits.map(h=>h.traitType),env:t,context:n}),S(r)&&mN(r.func,t,{...n})&&b(r.args[0],"=>")){let{boxType:h,env:g}=TF(o,t,n);t=g,i={type:h,env:t}}else i={type:o,env:n.expectedType.env}}else i=void 0;let a=U({expr:r,env:t,context:{...n,expectedType:i}});if(!a.$)throw m({token:r.token,errorMessage:`Failed to evaluate the value expression for 'dyn':
11809
+ ${A(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 m({token:l.token,errorMessage:`Mismatched element types in comptime_list. Expected element of type ${O(o)}, got ${O(u.$.type)}`})}let a=wr(o,r);return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}function TF(e,t,n){let i=ve(t,"Box").find(p=>p.value&&Ie(p.value[0])&&_e(p.type));if(!i||!i.value||!Ie(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=xe(e),u=vt(a.env),{env:c}=je({env:u,variable:{name:s.label,token:Ue,type:l.type,isCompileTimeOnly:!0,initializedAtToken:Ue,consumedAtToken:void 0,value:[l],isOwningTheRcValue:!1}}),{value:f,callerEnv:_}=qo({functionCalleeExpr:void 0,functionType:a,functionValue:o,argValues:{forallArgs:[],args:[{value:l,parameterType:s.type,argType:en()}],variadicArgs:[]},callerEnv:t,calleeEnv:c,context:n});if(!X(f)||!dn(f.value))throw new Error("Box type constructor did not return a type value");return{boxType:f.value,env:_}}function mN(e,t,n){var r;try{let i=U({expr:e,env:t,context:n});if(!i.$)return!1;let o=i.$.value;if(Ie(o))return!!ve(t,"box").find(l=>l.value&&Ie(l.value[0])&&l.value[0]===o);if(X(o)){let s=o.value;return!!((r=s==null?void 0:s.typeName)!=null&&r.startsWith("Box("))}else return!1}catch{return!1}}function EF({expr:e,env:t,context:n}){it(e,B.dyn,1);let r=e.args[0],i=n.expectedType,o;if(n.expectedType&&ht(n.expectedType.type)){let y=n.expectedType.type;if(o=Zr(en(),"",{requiredTraits:y.requiredTraits.map(h=>h.traitType),negativeTraits:y.negativeTraits.map(h=>h.traitType),env:t,context:n}),S(r)&&mN(r.func,t,{...n})&&b(r.args[0],"=>")){let{boxType:h,env:g}=TF(o,t,n);t=g,i={type:h,env:t}}else i={type:o,env:n.expectedType.env}}else i=void 0;let a=U({expr:r,env:t,context:{...n,expectedType:i}});if(!a.$)throw m({token:r.token,errorMessage:`Failed to evaluate the value expression for 'dyn':
11810
11810
  ${A(r)}`});let s=a.$.type,l=s,u=a;if(!dn(l)&&!(H(l)&&yt(l))){let{boxType:y,env:h}=TF(l,t,{...n});t=h;let g={tag:"Atom",token:{...r.token,value:"box",type:"identifier"},$:void 0},T={tag:"FnCall",func:g,args:[a],token:r.token,$:void 0},E=U({expr:T,env:t,context:{...n,expectedType:{type:y,env:t}}});if(!E.$)throw m({token:r.token,errorMessage:`Failed to auto-box value for 'dyn':
11811
11811
  ${A(r)}`});t=E.$.env,l=E.$.type,u=E,e.args[0]=E}else t=a.$.env;cr(u,n),t=u.$.env;let c=[],f=[],_=new Set,p;if(n.expectedType&&ht(n.expectedType.type))p=n.expectedType.type;else if(hr(l)){let y=l.fields[0].type;if(y.trait){let h=[];for(let g of y.trait.fields)g.assignedValue&&on(g.assignedValue)&&h.push(g.assignedValue.type);p=eu({requiredTraits:h,negativeTraits:[],env:t}),t=Ql({dynType:p,env:t,context:n})}else throw m({token:e.token,errorMessage:`'${B.dyn}' with Box(T) requires T to have a trait. Got boxed type: ${O(y)}`})}else if(l.trait){let y=[];for(let h of l.trait.fields)h.assignedValue&&on(h.assignedValue)&&y.push(h.assignedValue.type);p=eu({requiredTraits:y,negativeTraits:[],env:t}),t=Ql({dynType:p,env:t,context:n})}else throw m({token:e.token,errorMessage:`'${B.dyn}' requires either an expected Dyn type context, a SomeType (Impl) value, or a type with a trait. Got value type: ${O(l)}`});let d=[];if(hr(l)){let y=l.fields[0].type;(H(y)||ht(y))&&d.push(...y.negativeTraits.map(h=>h.traitType)??[])}for(let{traitType:y}of p.requiredTraits)for(let h of d)if(Ce({type:y,env:t},{type:h,env:t}))throw m({token:e.token,errorMessage:`Required trait ${O(y)} is in the negative traits list and cannot be used.`});for(let{traitType:y}of p.requiredTraits)if(!_.has(y))if(hr(l)&&(H(l.fields[0].type)||ht(l.fields[0].type))){let h=l.fields[0].type,g=!1,T=H(h)&&h.resolvedConcreteType?h.resolvedConcreteType:s!==l?s:void 0;if(T!=null&&T.trait){for(let E of T.trait.fields)if(E.assignedValue&&on(E.assignedValue)&&Ce({type:y,env:t},{type:E.assignedValue.type,env:t})){f.push(E.assignedValue),c.push(E.assignedValue.type),_.add(y),g=!0;break}}if(!g){let E=h.requiredTraits.map($=>$.traitType);for(let $ of E)if(Ce({type:y,env:t},{type:$,env:t})){let k=[];for(let w=0;w<y.fields.length;w++){let I=y.fields[w],L=$.fields.findIndex(x=>x.label===I.label);L===-1?k.push(void 0):k.push($.fields[L].assignedValue)}let C=Ss(y,k);f.push(C),c.push(C.type),_.add(y),g=!0;break}if(!g)throw m({token:e.token,errorMessage:`Required trait ${O(y)} not found in SomeType's requiredTraits.`})}}else{let h=hr(l)?l.fields[0].type:l;if(h.trait){let g=!1;for(let T of h.trait.fields)if(T.assignedValue&&on(T.assignedValue)&&Ce({type:y,env:t},{type:T.assignedValue.type,env:t})){f.push(T.assignedValue),c.push(T.assignedValue.type),_.add(y),g=!0;break}if(!g)throw m({token:e.token,errorMessage:`Required trait ${O(y)} is not implemented by type ${O(l)}.`})}else throw m({token:e.token,errorMessage:`Cannot find trait ${O(y)} for value type ${O(l)}.`})}let v=[];for(let{traitType:y}of p.requiredTraits){let h=c.findIndex(g=>Ce({type:y,env:t},{type:g,env:t}));if(h===-1)throw m({token:e.token,errorMessage:`No trait value found for expected trait type ${O(y)}.`});v.push(f[h])}return e.$={env:t,value:void 0,type:p,pathCollection:a.$.pathCollection,dynCallTraitValues:v},Gt(e,!0),e}function $F(e,t,n){if(e.token.type==="float"){let r=parseFloat(e.token.value),i="ComptimeFloat";if(n.expectedType){let a=n.expectedType.type;Yl(a)?i="F32":Kl(a)&&(i="F64")}let o=mr(i,r);return e.$={env:t,value:o,type:o.type,pathCollection:[]},e}else throw m({token:e.token,errorMessage:`Expected float literal, got ${e.tag}`})}function bF(e,t,n){if(e.token.type==="integer"){let r=e.token.value.replace(/_/g,""),i=10;r.match(/^0x/i)?(i=16,r=r.slice(2)):r.match(/^0b/i)?(i=2,r=r.slice(2)):r.match(/^0o/i)&&(i=8,r=r.slice(2));let o="ComptimeInt";if(n.expectedType){let u=n.expectedType.type;Pl(u)?o="Usize":Ul(u)?o="Isize":Yi(u)?o="U8":zl(u)?o="I8":Bl(u)?o="U16":ql(u)?o="I16":Gl(u)?o="U32":Wl(u)?o="I32":jl(u)?o="U64":Hl(u)&&(o="I64")}let a=o==="U64"||o==="I64"||o==="Usize"||o==="Isize",s;a||o==="ComptimeInt"?i===16?s=BigInt("0x"+r):i===8?s=BigInt("0o"+r):i===2?s=BigInt("0b"+r):s=BigInt(r):s=parseInt(r,i);let l=mr(o,s);return e.$={env:t,value:l,type:l.type,pathCollection:[]},e}else throw m({token:e.token,errorMessage:`Expected integer literal, got ${e.tag}`})}function CF(e,t){if(e.token.type==="string"){let n=Gn(JSON.parse(e.token.value));return e.$={env:t,value:n,type:n.type,pathCollection:[]},e}else throw m({token:e.token,errorMessage:`Expected string literal, got ${e.tag}`})}function yN({expr:e,tupleFieldIndex:t,env:n,context:r,elementIndex:i,runtimeArgExprsInOrder:o}){var p;let a=e,s=e,l;if(S(a)&&b(a,":",2)){let d=a.args[0];throw m({token:d.token,errorMessage:"Labelled field is not allowed in tuple value."})}let u=(p=r.expectedType)==null?void 0:p.type,c;if(u){if(!Tt(u))throw m({token:e.token,errorMessage:`(2) Failed to evaluate the tuple fields. Expected type to be:
11812
11812
  ${O(u)}`});let d=u.fields[t];if(!d)throw m({token:e.token,errorMessage:`Failed to get the tuple field at index ${t}`});c=d.type}let f=U({expr:s,env:n,context:{...r,expectedType:c?{type:c,env:n}:void 0}});if(cr(f,r),!f.$)throw m({token:s.token,errorMessage:`Failed to evaluate the tuple field: ${A(s)}`});n=f.$.env;let _=f.$.value;if(_&&X(f.$.value))throw m({token:s.token,errorMessage:`Cannot store a type value in tuple, please use module instead:
@@ -11820,18 +11820,18 @@ Generic functions must be compile-time known to enable monomorphization. Conside
11820
11820
  comptime(${c}) : ${O(s)}`});if(!l&&!n.isEvaluatingFunctionBodyOrAsyncBlock&&n.isInsideImplBlock)throw m({token:r.token,errorMessage:`Mutable runtime variable "${c}" is not allowed inside an impl block.
11821
11821
  Use \`::\` for compile-time definitions inside impl.`});let f=!l&&!n.isEvaluatingFunctionBodyOrAsyncBlock,_=(y=n.docCommentLookup)==null?void 0:y.get(Rr(r.token)),{env:p}=je({env:t,variable:{name:c,type:s,isCompileTimeOnly:l,value:l?[Ee(s,{variableName:c,env:t,context:n})]:void 0,token:r.token,initializedAtToken:void 0,consumedAtToken:void 0,isReassignable:!0,isOwningTheRcValue:mt(s),isImplicit:u,isModuleLevel:f,docComment:_}});return t=p,r.$={env:t,type:s,pathCollection:[[c]]},e.$={env:t,type:ke.type,value:ke,pathCollection:[]},{expr:e,variableExpr:r,variableName:c}}function S_({expr:e,env:t,context:n,throwErrorOnUndefined:r}){var o,a,s,l;let i=e.token.value;if(i==="Type"){let u=xe(en());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="Module"){let u=xe(Br(1));return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="Trait"){let u=xe(Br(1));return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="unit"){let u=xe(Ci());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="comptime_int"){let u=xe(po());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="comptime_float"){let u=xe(xs());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="comptime_string"){let u=xe(Wn());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="bool"){let u=xe(tn());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="usize"){let u=xe(Mn());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="isize"){let u=xe(Ns());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="u8"){let u=xe(Ds());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="i8"){let u=xe(Vs());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="u16"){let u=xe(Ms());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="i16"){let u=xe(Rs());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="u32"){let u=xe(Os());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="i32"){let u=xe(la());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="u64"){let u=xe(Ps());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="i64"){let u=xe(Us());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="f32"){let u=xe(zs());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="f64"){let u=xe(ua());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="char"){let u=xe(yE());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="short"){let u=xe(gE());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="ushort"){let u=xe(hE());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="int"){let u=xe(vE());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="uint"){let u=xe(TE());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="long"){let u=xe(EE());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="ulong"){let u=xe($E());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="longlong"){let u=xe(bE());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="ulonglong"){let u=xe(CE());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="longdouble"){let u=xe(kE());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="void"){let u=xe(wE());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="Expr"){let u=xe(ir());return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="Self"&&n.SelfType){let u=xe(n.SelfType);return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="SelfTrait"&&n.SelfTraitType){let u=xe(n.SelfTraitType);return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else if(i==="SelfModule"&&n.SelfModuleType){let u=xe(n.SelfModuleType);return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else{let u=ve(t,i);if(u.length){let c=u[u.length-1];if(!c.initializedAtToken&&r&&!_e(c.type)&&!X((o=c.value)==null?void 0:o[0]))throw m({token:e.token,errorMessage:`Variable "${i}" is not initialized`});let f=c.type.isExtern==="c"&&Ge((a=c.value)==null?void 0:a[0])&&!(_e(c.type)||Lt(c.type))||(s=c.value)==null?void 0:s[0];if(e.$={env:t,type:c.type,value:f,originType:c.type,variableName:c.name,pathCollection:[[c.name]],sourceVariable:c},n.isEvaluatingFunctionBodyOrAsyncBlock&&n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&n.capturedVariables&&n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv){let _=n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv.frames.length;c.frameLevel<_&&_l(c.name,c.frameLevel,"own",e.token,n)}if(((l=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:l.kind)==="async-block"){let _=n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv.frames.length;c.frameLevel<_&&_l(c.name,c.frameLevel,"own",e.token,n)}return e}else throw m({token:e.token,errorMessage:`Variable "${i}" not found.`})}}function iy(e,t){let n=l$(t),r=`Right-hand side contains "${n}" from function.`;throw S(e)&&b(e,B.cond)?r=`Cannot assign "cond" expression to variable when all cases contain "${n}" statements. Consider using the "cond" result directly without assignment, or ensure at least one case doesn't return.`:S(e)&&b(e,B.match)?r=`Cannot assign "match" expression to variable when all cases contain "${n}" statements. Consider using the "match" result directly without assignment, or ensure at least one case doesn't return.`:S(e)&&b(e,B.begin)&&(r=`Cannot assign "begin" expression to variable when it contains "${n}" statement.`),m({token:e.token,errorMessage:r})}function hN(e,t){var n;if(ft(e)&&Ge(e.length)){let r=e.length;if(r.variableName){let i=ve(t,r.variableName);if(i.length>0){let o=i[i.length-1];if((n=o.value)!=null&&n[0]&&!Ge(o.value[0]))return ho(e.childType,o.value[0])}}}return e}function wF({expr:e,env:t,context:n}){var o,a,s,l,u,c,f,_,p,d,v,y,h,g,T,E,$,k,C;if(!b(e,"=",2))throw m({token:e.token,errorMessage:'Expected "=" for assignment.'});let r=e.args[0],i=e.args[1];if(Q(r)||S(r)&&b(r,":",2)){let w;if(Q(r)){let Z=S_({expr:r,env:t,context:{...n},throwErrorOnUndefined:!1});if(!Z.$)throw m({token:r.token,errorMessage:`Failed to evaluate left-hand side of assignment: ${A(r)}`});t=Z.$.env,r=Z,w=r.token.value}else{let{expr:Z,variableExpr:ce,variableName:Te}=I_({expr:r,env:t,context:{...n}});(o=Z.$)!=null&&o.env&&(t=(a=Z.$)==null?void 0:a.env),r=ce,w=Te}if(w==="_")throw m({token:r.token,errorMessage:'Cannot reassign "_". Use ":=" to discard a value, or use a named variable for reassignment.'});let I=ve(t,w);if(!I.length)throw m({token:r.token,errorMessage:`Variable ${w} not found in the environment`});let L=I[I.length-1];if(!L.isReassignable)throw m({token:r.token,errorMessage:`Cannot reassign "${w}".
11822
11822
  You can mutate fields (e.g., ${w}.field = value) but cannot reassign itself.`});if(i=U({expr:i,env:t,context:{...n,expectedType:{type:L.type,env:t},isInsideGivenHandler:L.isImplicit?!0:n.isInsideGivenHandler}}),!i.$)throw m({token:i.token,errorMessage:`Failed to evaluate right-hand side of assignment: ${A(i)}`});t=i.$.env;let x=(()=>{let Z=ve(t,w);return Z.length>0?Z[Z.length-1].consumedAtToken!==void 0:!1})();Xa(i,t),pa(i),cr(i,n),t=i.$.env,an((s=i.$)==null?void 0:s.controlFlow)&&iy(i,i.$.controlFlow);let V=(l=i.$)==null?void 0:l.type;if(!V)try{let{expr:Z,type:ce,env:Te}=Wo({expr:i,type:L.type,env:t,context:{...n}});i=Z,V=ce,t=Te}catch(Z){throw m({token:i.token,errorMessage:`(evaluateAssignment) Failed to synthesize type for expression: ${A(i)}
11823
- ${Z}`})}if(L.isCompileTimeOnly||(V=hn({type:V,expectedType:L.type,expr:i,env:t})),!Ce({type:L.type,env:t},{type:V,env:t}))if(qs(L.type))try{let{expr:Z,type:ce,env:Te}=Wo({expr:i,type:L.type,env:t,context:{...n}});if(Ce({type:L.type,env:Te},{type:ce,env:Te})){i=Z,V=ce,t=Te;let Ie=hN(L.type,t);t=zt(t,L,{...L,type:Ie})}else throw m({token:r.token,errorMessage:`Incompatible types:
11823
+ ${Z}`})}if(L.isCompileTimeOnly||(V=hn({type:V,expectedType:L.type,expr:i,env:t})),!Ce({type:L.type,env:t},{type:V,env:t}))if(qs(L.type))try{let{expr:Z,type:ce,env:Te}=Wo({expr:i,type:L.type,env:t,context:{...n}});if(Ce({type:L.type,env:Te},{type:ce,env:Te})){i=Z,V=ce,t=Te;let Se=hN(L.type,t);t=zt(t,L,{...L,type:Se})}else throw m({token:r.token,errorMessage:`Incompatible types:
11824
11824
  - Expected: ${O(L.type)}
11825
11825
  - Given : ${O(V)}`})}catch{throw m({token:r.token,errorMessage:`Incompatible types:
11826
11826
  - Expected: ${O(L.type)}
11827
11827
  - Given : ${O(V)}`})}else throw m({token:r.token,errorMessage:`Incompatible types:
11828
11828
  - Expected: ${O(L.type)}
11829
- - Given : ${O(V)}`});let M=ve(t,w),q=M[M.length-1],P=(u=i.$)==null?void 0:u.value;X(P)&&!P.value.typeName?(P.value!==n.SelfType&&(P.value.typeName=w),Lt(q.type)&&!q.type.baseType&&(q.type.baseType=P.value)):Se(P)&&!P.funcName?(P.funcName=w,P.funcId+=`_${r.token.value}`):(Rt(P)||on(P))&&!P.type.typeName&&P.type!==n.SelfType&&(P.type.typeName=w);let R=q.type;Ye(R)&&Ye(V)&&R.selectedVariantName!==V.selectedVariantName&&(R={...R,selectedVariantName:V.selectedVariantName}),H(R)&&H(V)&&V.resolvedConcreteType&&(R={...R,resolvedConcreteType:V.resolvedConcreteType});let te=!1,j=L.isOwningTheSameRcValueAs;if(L.initializedAtToken){if(H(R)&&R.resolvedConcreteType!==void 0)throw _n([{token:r.token,errorMessage:`Cannot reassign variable "${w}" of type Impl(...).
11829
+ - Given : ${O(V)}`});let M=ve(t,w),q=M[M.length-1],P=(u=i.$)==null?void 0:u.value;X(P)&&!P.value.typeName?(P.value!==n.SelfType&&(P.value.typeName=w),Lt(q.type)&&!q.type.baseType&&(q.type.baseType=P.value)):Ie(P)&&!P.funcName?(P.funcName=w,P.funcId+=`_${r.token.value}`):(Rt(P)||on(P))&&!P.type.typeName&&P.type!==n.SelfType&&(P.type.typeName=w);let R=q.type;Ye(R)&&Ye(V)&&R.selectedVariantName!==V.selectedVariantName&&(R={...R,selectedVariantName:V.selectedVariantName}),H(R)&&H(V)&&V.resolvedConcreteType&&(R={...R,resolvedConcreteType:V.resolvedConcreteType});let te=!1,j=L.isOwningTheSameRcValueAs;if(L.initializedAtToken){if(H(R)&&R.resolvedConcreteType!==void 0)throw _n([{token:r.token,errorMessage:`Cannot reassign variable "${w}" of type Impl(...).
11830
11830
  Impl(...) uses static dispatch and the concrete type is fixed at first assignment.
11831
- Consider using Dyn(...) for dynamic dispatch if you need to reassign to different implementations.`},{token:L.initializedAtToken??L.token,errorMessage:"First assigned here:"}]);if(((f=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:f.kind)==="function-body"&&n.capturedVariables&&n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv){let ge=n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv.frames.length;L.frameLevel<ge&&_l(L.name,L.frameLevel,"own",r.token,n)}let Z=L.isCompileTimeOnly&&P?Lr(P):void 0,ce=kn(t.modulePath,w),Te=nu(i,t,t.modulePath),Ie=Te;Te!=null&&Te.consumedAtToken&&(Ie=void 0),t=zt(t,L,{...L,id:ce,value:Z?[Z]:void 0,type:R,isOwningTheRcValue:mt(R),isOwningTheSameRcValueAs:Ie}),te=!0}else{if(n.isEvaluatingLoopBody&&L.frameLevel<n.isEvaluatingLoopBody.env.frames.length)throw _n([{token:r.token,errorMessage:"Cannot initialize a variable that is defined outside the while loop."},{token:L.token,errorMessage:"Defined here:"}]);if(((c=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:c.kind)==="function-body"&&L.frameLevel<n.isEvaluatingFunctionBodyOrAsyncBlock.type.env.frames.length)throw _n([{token:r.token,errorMessage:"Cannot initialize a variable that is defined outside the function body."},{token:L.token,errorMessage:"Defined here:"}]);let Z=L.isCompileTimeOnly&&P?Lr(P):void 0,ce=nu(i,t,t.modulePath),Te=ce;ce!=null&&ce.consumedAtToken&&(Te=void 0),t=zt(t,L,{...L,initializedAtToken:r.token,value:Z?[Z]:void 0,type:R,isOwningTheRcValue:mt(R),isOwningTheSameRcValueAs:Te})}let Y=ve(t,w),le=Y[Y.length-1];return r.$={env:t,type:le.type,value:le.isCompileTimeOnly?P:void 0,pathCollection:[[w]]},te?x?e.$={env:t,value:ke,type:ke.type,pathCollection:[],isCompileTimeOnlyAssignment:L.isCompileTimeOnly}:(e.$={env:t,value:(_=L.value)==null?void 0:_[0],type:L.type,pathCollection:[],isCompileTimeOnlyAssignment:L.isCompileTimeOnly},Gt(e,!0,(j==null?void 0:j.frameLevel)===t.frames.length-1?j:void 0)):e.$={env:t,value:ke,type:ke.type,pathCollection:[],isCompileTimeOnlyAssignment:L.isCompileTimeOnly},e}else{let w=U({expr:r,env:t,context:{...n,expectedType:void 0,isLhsOfAssignment:!0}});if(!w.$)throw m({token:r.token,errorMessage:`Failed to evaluate left-hand side of assignment: ${A(r)}`});if(((p=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:p.kind)==="function-body"&&w.$.pathCollection){for(let P of w.$.pathCollection)if(P.length>0){let R=P[0];if(typeof R=="string"){let te=ve(t,R);if(te.length>0){let j=te[te.length-1];_l(R,j.frameLevel,"write",r.token,n)}}}}let I=w.$.type;if(i=U({expr:i,env:t,context:{...n,expectedType:{type:I,env:t}}}),!i.$)throw m({token:i.token,errorMessage:`Failed to evaluate right-hand side of assignment: ${A(i)}`});t=i.$.env,Xa(i,t),pa(i),cr(i,n),t=i.$.env;let L=(d=i.$)==null?void 0:d.type;if(!L)try{let{expr:P,type:R,env:te}=Wo({expr:i,type:I,env:t,context:{...n}});i=P,L=R,t=te}catch(P){throw m({token:i.token,errorMessage:`(evaluateAssignment) Failed to synthesize type for expression: ${A(i)}
11831
+ Consider using Dyn(...) for dynamic dispatch if you need to reassign to different implementations.`},{token:L.initializedAtToken??L.token,errorMessage:"First assigned here:"}]);if(((f=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:f.kind)==="function-body"&&n.capturedVariables&&n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv){let ge=n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv.frames.length;L.frameLevel<ge&&_l(L.name,L.frameLevel,"own",r.token,n)}let Z=L.isCompileTimeOnly&&P?Lr(P):void 0,ce=kn(t.modulePath,w),Te=nu(i,t,t.modulePath),Se=Te;Te!=null&&Te.consumedAtToken&&(Se=void 0),t=zt(t,L,{...L,id:ce,value:Z?[Z]:void 0,type:R,isOwningTheRcValue:mt(R),isOwningTheSameRcValueAs:Se}),te=!0}else{if(n.isEvaluatingLoopBody&&L.frameLevel<n.isEvaluatingLoopBody.env.frames.length)throw _n([{token:r.token,errorMessage:"Cannot initialize a variable that is defined outside the while loop."},{token:L.token,errorMessage:"Defined here:"}]);if(((c=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:c.kind)==="function-body"&&L.frameLevel<n.isEvaluatingFunctionBodyOrAsyncBlock.type.env.frames.length)throw _n([{token:r.token,errorMessage:"Cannot initialize a variable that is defined outside the function body."},{token:L.token,errorMessage:"Defined here:"}]);let Z=L.isCompileTimeOnly&&P?Lr(P):void 0,ce=nu(i,t,t.modulePath),Te=ce;ce!=null&&ce.consumedAtToken&&(Te=void 0),t=zt(t,L,{...L,initializedAtToken:r.token,value:Z?[Z]:void 0,type:R,isOwningTheRcValue:mt(R),isOwningTheSameRcValueAs:Te})}let Y=ve(t,w),le=Y[Y.length-1];return r.$={env:t,type:le.type,value:le.isCompileTimeOnly?P:void 0,pathCollection:[[w]]},te?x?e.$={env:t,value:ke,type:ke.type,pathCollection:[],isCompileTimeOnlyAssignment:L.isCompileTimeOnly}:(e.$={env:t,value:(_=L.value)==null?void 0:_[0],type:L.type,pathCollection:[],isCompileTimeOnlyAssignment:L.isCompileTimeOnly},Gt(e,!0,(j==null?void 0:j.frameLevel)===t.frames.length-1?j:void 0)):e.$={env:t,value:ke,type:ke.type,pathCollection:[],isCompileTimeOnlyAssignment:L.isCompileTimeOnly},e}else{let w=U({expr:r,env:t,context:{...n,expectedType:void 0,isLhsOfAssignment:!0}});if(!w.$)throw m({token:r.token,errorMessage:`Failed to evaluate left-hand side of assignment: ${A(r)}`});if(((p=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:p.kind)==="function-body"&&w.$.pathCollection){for(let P of w.$.pathCollection)if(P.length>0){let R=P[0];if(typeof R=="string"){let te=ve(t,R);if(te.length>0){let j=te[te.length-1];_l(R,j.frameLevel,"write",r.token,n)}}}}let I=w.$.type;if(i=U({expr:i,env:t,context:{...n,expectedType:{type:I,env:t}}}),!i.$)throw m({token:i.token,errorMessage:`Failed to evaluate right-hand side of assignment: ${A(i)}`});t=i.$.env,Xa(i,t),pa(i),cr(i,n),t=i.$.env;let L=(d=i.$)==null?void 0:d.type;if(!L)try{let{expr:P,type:R,env:te}=Wo({expr:i,type:I,env:t,context:{...n}});i=P,L=R,t=te}catch(P){throw m({token:i.token,errorMessage:`(evaluateAssignment) Failed to synthesize type for expression: ${A(i)}
11832
11832
  ${P}`})}if(!yn(I)&&!On(I)&&!gn(I)&&(L=hn({type:L,expectedType:I,expr:i,env:t})),!Ce({type:I,env:t},{type:L,env:t}))throw m({token:r.token,errorMessage:`Incompatible types:
11833
11833
  - Expected: ${O(I)}
11834
- - Given : ${O(L)}`});let x=!1;if(w.$.pathCollection&&w.$.pathCollection.length>0){let P=w.$.pathCollection[0];if(P&&P.length>=2){let R=P[0],te=P[1],j=ve(t,R);if(j.length>0){let Y=j[j.length-1];if(Y.isCompileTimeOnly&&((v=Y.value)!=null&&v[0])){let le=Y.value[0];if((y=i.$)!=null&&y.value&&(x=!0),qn(le)||kr(le)){let Z=Y.type,ce=Z.fields.findIndex(Te=>Te.label===te);if(ce>=0&&((h=i.$)!=null&&h.value))if(Oe(Y.type)&&Y.type.isReferenceSemantics){let Te=[...le.fields];Te[ce]=i.$.value;let Ie=Mi(Y.type,Te),ge=Pr(t,be=>{var De;return be.isCompileTimeOnly&&((De=be.value)==null?void 0:De[0])===le});for(let be of ge)t=zt(t,be,{...be,value:[Ie]})}else{let Te=[...le.fields];Te[ce]=i.$.value;let Ie;qn(le)?Ie=Mi(Z,Te):Ie=Zc(Z,Te),t=zt(t,Y,{...Y,value:[Ie]})}}else if(qr(le)){let Z=parseInt(te,10);if(!isNaN(Z)&&Z>=0&&Z<le.elements.length&&((g=i.$)!=null&&g.value)){let ce=[...le.elements];ce[Z]=i.$.value;let Te=Y.type,Ie=aa(Te,ce);t=zt(t,Y,{...Y,value:[Ie]})}}else if(Sn(le)){let Z=Y.type,ce=Z.variants.find(Te=>Te.name===le.variantName);if(ce){let Te=(ce.fields??[]).findIndex(Ie=>Ie.label===te);if(Te>=0&&((T=i.$)!=null&&T.value)){let Ie=[...le.fields];Ie[Te]=i.$.value;let ge=Ra(Z,le.variantName,Ie);t=zt(t,Y,{...Y,value:[ge]})}}}}}}}let V=w.$.ptrTargetValue,M=w.$.ptrTargetIndex??0;if(V&&((E=i.$)!=null&&E.value)){let P=V[0];qr(P)?P.elements[M]=i.$.value:qn(P)?P.fields[M]=i.$.value:V[0]=i.$.value,x=!0}let q=w.$.comptimeRef;if(q&&(($=i.$)!=null&&$.value)){switch(q.kind){case"array":q.arrayValue.elements[q.index]=i.$.value;break;case"comptime_list":q.listValue.elements[q.index]=i.$.value;break;case"struct":q.structValue.fields[q.fieldIndex]=i.$.value;break;case"tuple":q.tupleValue.fields[q.fieldIndex]=i.$.value;break}x=!0}return!x&&((k=w.$)==null?void 0:k.value)!==void 0&&!(Ge(w.$.value)&&w.$.value.isRuntimeOnly)&&((C=i.$)==null?void 0:C.value)!==void 0&&(x=!0),e.$={env:t,value:w.$.value,type:w.$.type,pathCollection:[],isCompileTimeOnlyAssignment:x},x||Gt(e,!0),e}}function FF({expr:e,env:t,context:n}){var a;if(!b(e,B.c_include))throw m({token:e.token,errorMessage:`Expected c_include, got ${e.tag}`});let r,i=e.args;if(e.args[0]&&Q(e.args[0])){let s=e.args[0];i=e.args.slice(1);let l=U({expr:s,env:t,context:{...n}});if(!l.$||!l.$.value)throw m({token:s.token,errorMessage:`Failed to evaluate C header file argument: ${A(s)}`});t=l.$.env;let u=l.$.value;if(!pt(u))throw m({token:s.token,errorMessage:`Expected string for C header file argument, got ${A(s)}`});r=u.value}if(!r)throw m({token:e.token,errorMessage:`Expected C header file as first argument to c_include, such as:
11834
+ - Given : ${O(L)}`});let x=!1;if(w.$.pathCollection&&w.$.pathCollection.length>0){let P=w.$.pathCollection[0];if(P&&P.length>=2){let R=P[0],te=P[1],j=ve(t,R);if(j.length>0){let Y=j[j.length-1];if(Y.isCompileTimeOnly&&((v=Y.value)!=null&&v[0])){let le=Y.value[0];if((y=i.$)!=null&&y.value&&(x=!0),qn(le)||kr(le)){let Z=Y.type,ce=Z.fields.findIndex(Te=>Te.label===te);if(ce>=0&&((h=i.$)!=null&&h.value))if(Oe(Y.type)&&Y.type.isReferenceSemantics){let Te=[...le.fields];Te[ce]=i.$.value;let Se=Mi(Y.type,Te),ge=Pr(t,be=>{var De;return be.isCompileTimeOnly&&((De=be.value)==null?void 0:De[0])===le});for(let be of ge)t=zt(t,be,{...be,value:[Se]})}else{let Te=[...le.fields];Te[ce]=i.$.value;let Se;qn(le)?Se=Mi(Z,Te):Se=Zc(Z,Te),t=zt(t,Y,{...Y,value:[Se]})}}else if(qr(le)){let Z=parseInt(te,10);if(!isNaN(Z)&&Z>=0&&Z<le.elements.length&&((g=i.$)!=null&&g.value)){let ce=[...le.elements];ce[Z]=i.$.value;let Te=Y.type,Se=aa(Te,ce);t=zt(t,Y,{...Y,value:[Se]})}}else if(Sn(le)){let Z=Y.type,ce=Z.variants.find(Te=>Te.name===le.variantName);if(ce){let Te=(ce.fields??[]).findIndex(Se=>Se.label===te);if(Te>=0&&((T=i.$)!=null&&T.value)){let Se=[...le.fields];Se[Te]=i.$.value;let ge=Ra(Z,le.variantName,Se);t=zt(t,Y,{...Y,value:[ge]})}}}}}}}let V=w.$.ptrTargetValue,M=w.$.ptrTargetIndex??0;if(V&&((E=i.$)!=null&&E.value)){let P=V[0];qr(P)?P.elements[M]=i.$.value:qn(P)?P.fields[M]=i.$.value:V[0]=i.$.value,x=!0}let q=w.$.comptimeRef;if(q&&(($=i.$)!=null&&$.value)){switch(q.kind){case"array":q.arrayValue.elements[q.index]=i.$.value;break;case"comptime_list":q.listValue.elements[q.index]=i.$.value;break;case"struct":q.structValue.fields[q.fieldIndex]=i.$.value;break;case"tuple":q.tupleValue.fields[q.fieldIndex]=i.$.value;break}x=!0}return!x&&((k=w.$)==null?void 0:k.value)!==void 0&&!(Ge(w.$.value)&&w.$.value.isRuntimeOnly)&&((C=i.$)==null?void 0:C.value)!==void 0&&(x=!0),e.$={env:t,value:w.$.value,type:w.$.type,pathCollection:[],isCompileTimeOnlyAssignment:x},x||Gt(e,!0),e}}function FF({expr:e,env:t,context:n}){var a;if(!b(e,B.c_include))throw m({token:e.token,errorMessage:`Expected c_include, got ${e.tag}`});let r,i=e.args;if(e.args[0]&&Q(e.args[0])){let s=e.args[0];i=e.args.slice(1);let l=U({expr:s,env:t,context:{...n}});if(!l.$||!l.$.value)throw m({token:s.token,errorMessage:`Failed to evaluate C header file argument: ${A(s)}`});t=l.$.env;let u=l.$.value;if(!pt(u))throw m({token:s.token,errorMessage:`Expected string for C header file argument, got ${A(s)}`});r=u.value}if(!r)throw m({token:e.token,errorMessage:`Expected C header file as first argument to c_include, such as:
11835
11835
 
11836
11836
  c_include "<stdio.h>" ...;`});let o=[];for(let s=0;s<i.length;s++){let l=i[s],{field:u,env:c}=Fu({expr:l,env:t,moduleFieldIndex:s,context:{...n,SelfType:void 0},isForEvaluatingModuleType:!1});if(o.find(p=>p.label===u.label))throw m({token:S(l)?((a=l.args[0])==null?void 0:a.token)??l.token:l.token,errorMessage:`Duplicate label "${u.label}" in module`});if(Lt(u.type)||_e(u.type)?u.type={...u.type,isExtern:"c",cInclude:r,externName:u.label}:u.type={...u.type,isExtern:"c",cInclude:r},u.assignedValue&&X(u.assignedValue)&&(Oe(u.assignedValue.value)||Ye(u.assignedValue.value)||Ht(u.assignedValue.value))){let p=u.assignedValue.value;p.isExtern="c",p.cInclude=r,p.externName=u.label}o.push(u),t=c;let{env:_}=je({env:t,variable:{name:u.label,type:u.type,value:[u.assignedValue??Ee(u.type,{variableName:u.label,env:t,context:n})],isCompileTimeOnly:!0,token:u.exprs.expr.token,initializedAtToken:u.exprs.expr.token,consumedAtToken:void 0,isOwningTheRcValue:!1}});t=_}return e.$={env:t,value:ke,type:ke.type,pathCollection:[]},e.func.$={env:t,value:ke,type:ke.type,pathCollection:[]},e}function LF({expr:e,env:t,context:n}){var c,f,_,p,d,v,y;if(!b(e,B.cond))throw m({token:e.token,errorMessage:`Expected "cond", got ${e.tag}`});let r=e.args;if(r.length===0)throw m({token:e.token,errorMessage:`Expected at least one statement in "cond", got ${r.length}`});let i=[];for(let h=0;h<r.length;h++){let g=r[h];if(!S(g)||!b(g,"=>",2))throw m({token:g.token,errorMessage:`Expected => for cond statement, got ${g.tag}`});let T=g.args[0],E=g.args[1],$=t;i.push({condExpr:T,caseBodyExpr:E,caseEnv:$})}let o=[];for(let h=0;h<i.length;h++){let{condExpr:g,caseBodyExpr:T,caseEnv:E}=i[h],$=Q(g)?U({expr:g,env:E,context:{...n,expectedType:{type:tn(),env:E}}}):En({expr:g,env:E,context:{...n,expectedType:{type:tn(),env:E}},variablesToAdd:[]});if(!$.$)throw m({token:$.token,errorMessage:`Failed to evaluate condition expression: ${A($)}`});if(!Mr($.$.type))throw m({token:$.token,errorMessage:`Expected bool for cond statement, got ${A($)} of type ${O($.$.type)}`});let k=$.$.value,C=$.$.env;if(h===i.length-1&&!(Ut(k)&&k.value===!0))throw m({token:$.token,errorMessage:'Expect the last condition to be compile-time known "true".'});if(o.push({condExpr:$,caseBodyExpr:T,caseEnv:C,condValue:k}),Ut(k)&&k.value===!0)break}let a=-1;for(let h=0;h<o.length;h++){let{condValue:g}=o[h];if(Ut(g)&&g.value===!0&&o.slice(0,h).every(({condValue:T})=>Ut(T)&&T.value===!1)){a=h;break}}let s=[],l=[],u;if(a!==-1){let{caseBodyExpr:h,caseEnv:g,condExpr:T}=o[a];T.$&&(T.$.caseExecuted=!0);let E=En({expr:h,env:g,context:{...n},variablesToAdd:[]});if(an((c=E.$)==null?void 0:c.controlFlow))return e.$={env:E.$.env,type:(f=n.expectedType)!=null&&f.type&&!Xe(n.expectedType.type)?n.expectedType.type:E.$.type,value:E.$.value,pathCollection:E.$.pathCollection,controlFlow:E.$.controlFlow},e;{if(!((_=E.$)!=null&&_.type))throw m({token:E.token,errorMessage:`Expected type for cond statement, got ${A(E)}`});s.push(E),l.push(E.$.value),u={type:E.$.type,env:E.$.env},t=E.$.env;let $;return $=l[0],e.$={env:t,type:(p=n.expectedType)!=null&&p.type&&!Xe(n.expectedType.type)?n.expectedType.type:u.type,value:$,pathCollection:[],variableName:E.$.variableName},E.$.variableName||Gt(e,!0),e}}else{let h=!1,g=[],T=[];for(let{condExpr:$,condValue:k,caseBodyExpr:C,caseEnv:w}of o){if(Ut(k)&&k.value===!1)continue;$.$&&($.$.caseExecuted=!0);let I=En({expr:C,env:w,context:{...n,isExecuting:!1},variablesToAdd:[]});if(I.$){let L=Ka(I,I.$.env);I.$.env=L}if(an((d=I.$)==null?void 0:d.controlFlow)){g.push(I.$.controlFlow),nn(I.$.controlFlow,"return")&&T.push(I);continue}else h=!0;if(!((v=I.$)!=null&&v.type))throw m({token:I.token,errorMessage:`Expected type for cond statement, got ${A(I)}`});if(s.push(I),l.push(I.$.value),n.expectedType&&!Ce(n.expectedType,{type:I.$.type,env:I.$.env}))throw m({token:I.token,errorMessage:`Incompatible type with expected type:
11837
11837
  - Expected: ${O(n.expectedType.type)}
@@ -11860,10 +11860,10 @@ ${A(e)}
11860
11860
 
11861
11861
  Type:
11862
11862
  ${O(l.$.type)}`});if($&&go(l.$.type,t))throw m({token:e.token,errorMessage:`Expected ":=" instead of "::" for value type "${O(l.$.type)}" which can only be used at the runtime:
11863
- ${A(e)}`});let w=(T=a.$)==null?void 0:T.value;if(X(w)&&!w.value.typeName&&w.value!==n.SelfType?w.value.typeName=l.token.value:Se(w)&&!w.funcName?(w.funcName=l.token.value,w.funcId+=`_${l.token.value}`):(Rt(w)||on(w))&&!w.type.typeName&&w.type!==n.SelfType&&(w.type.typeName=l.token.value),s&&Se(w)&&(w.isModuleEffectMember=!0),!w&&$)throw m({token:l.token,errorMessage:`Expected compile-time value for "${l.token.value}".
11863
+ ${A(e)}`});let w=(T=a.$)==null?void 0:T.value;if(X(w)&&!w.value.typeName&&w.value!==n.SelfType?w.value.typeName=l.token.value:Ie(w)&&!w.funcName?(w.funcName=l.token.value,w.funcId+=`_${l.token.value}`):(Rt(w)||on(w))&&!w.type.typeName&&w.type!==n.SelfType&&(w.type.typeName=l.token.value),s&&Ie(w)&&(w.isModuleEffectMember=!0),!w&&$)throw m({token:l.token,errorMessage:`Expected compile-time value for "${l.token.value}".
11864
11864
  Got runtime value. Please consider using ":=" instead of "::":
11865
11865
  ${A(a)}`});l.$={...l.$,env:t,type:l.$.type,value:$?w?Lr(w):Ee(l.$.type,{variableName:l.token.value,env:t,context:n}):void 0,pathCollection:[]};let I=l.$.type;H(I)&&C&&H(C)&&C.resolvedConcreteType&&(I={...I,resolvedConcreteType:C.resolvedConcreteType},l.$.type=I);let L=nu(a,t,t.modulePath),x=L;L!=null&&L.consumedAtToken&&(x=void 0);let V=l.token.value==="_"?of(t.modulePath):l.token.value;if(!$&&!n.isEvaluatingFunctionBodyOrAsyncBlock&&n.isInsideImplBlock)throw m({token:l.token,errorMessage:`Mutable runtime variable "${V}" is not allowed inside an impl block.
11866
- Use \`::\` for compile-time definitions inside impl.`});let M=!$&&!n.isEvaluatingFunctionBodyOrAsyncBlock,q=(E=n.docCommentLookup)==null?void 0:E.get(Rr(l.token)),{env:P}=je({env:t,variable:{name:V,type:I,isCompileTimeOnly:$,value:l.$.value?[l.$.value]:void 0,token:l.token,initializedAtToken:l.token,consumedAtToken:void 0,isOwningTheRcValue:mt(I),isOwningTheSameRcValueAs:x,isReassignable:!s,isImplicit:s,isModuleLevel:M,docComment:q}});return t=P,l.token.value==="_"&&(l.$.variableName=V),l.$.env=t,s&&(o.$={env:t,value:ke,type:ke.type,pathCollection:[]}),e.$={env:t,value:ke,type:ke.type,pathCollection:[],isCompileTimeOnlyAssignment:$},e}else{let $=s||r,{env:k,runtimeDestructurings:C}=xF({lhs:l,rhs:a,env:t,isCompileTimeOnly:s||r,context:{...n}});return t=k,e.$={env:t,value:ke,type:ke.type,pathCollection:[],runtimeDestructurings:C,isCompileTimeOnlyAssignment:$},e}}function EN(e){return S(e)?b(e,"|",2):!1}function sy(e){if(!EN(e))return[e];let t=e,n=t.args[0],r=t.args[1];return[...sy(n),...sy(r)]}function DF(e,t,n){if(H(e))for(let r=0;r<t.length;r++){let i=t[r];if(i&&H(i)&&e.id===i.id){let o=n[r];if(o)return o}}return e}function ay(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&&!H(r)&&!Ce({type:r,env:e.env},{type:i,env:e.env}))return!1}return!0}function $N(e){return co(e)||fo(e)||Ki(e)||Mr(e)||yn(e)||On(e)||gn(e)}function VF({expr:e,env:t,context:n}){var k,C,w,I,L,x,V,M,q,P,R,te,j;if(!b(e,B.match))throw m({token:e.token,errorMessage:`Expected "match", got ${e.tag}`});let r=e.args;if(r.length<2)throw m({token:e.token,errorMessage:`Expected at least 2 arguments for "match", got ${r.length}`});let i=r[0],o=Q(i)?U({expr:i,env:t,context:{...n,expectedType:void 0}}):En({expr:i,env:t,context:{...n,expectedType:void 0},variablesToAdd:[]});if(!o.$||!o.$.variableName)throw m({token:i.token,errorMessage:`Failed to evaluate the match scrutinee expression: ${A(i)}`});t=o.$.env;let a=o.$.type,s=o.$.value,l,u;if(et(a)?(u=a.childType,l=a.tag):u=a,$N(u))return bN({expr:e,env:t,context:n,scrutineeExpr:o,scrutineeType:u,scrutineeValue:s});if(!Ye(u))throw m({token:i.token,errorMessage:`Expected enum type or primitive type (integer, bool) for match expression, got ${a?O(a):"unknown type"}`});let c=u,f=c.isGadt===!0&&((k=n.expectedType)==null?void 0:k.type)!==void 0&&c.typeConstructorArgs!==void 0&&c.typeConstructorArgs.length>0,_=r.slice(1),p=[],d,v=new Set,y=!1,h=!1,g=[],T=[],E=-1;for(let Y=0;Y<_.length;Y++){let le=_[Y],Z=t;if(!S(le)||!b(le,"=>",2))throw m({token:le.token,errorMessage:`Expected ":" for match pattern, got ${A(le)}`});let ce=le.args[0],Te=le.args[1];if(S(ce)&&b(ce,".",1)||Tn(ce,"_")){if(h)throw m({token:ce.token,errorMessage:'Wildcard pattern "_" can only be used once and must be the last match arm in a "match" expression.'});let Ie;if(S(ce)){if(Ie=ce.args[0],!Q(Ie))throw m({token:ce.token,errorMessage:`Expected identifier for enum variant, got ${A(Ie)}`})}else h=!0,Ie=ce;let ge=Ie.token.value,be=c.variants.find($e=>$e.name===ge);if(!be&&ge!=="_")throw m({token:ce.token,errorMessage:`Enum variant "${ge}" not found in ${O(c)}`});if(be&&be.fields&&be.fields.length>0)throw m({token:ce.token,errorMessage:`Enum variant "${ge}" has ${be.fields.length} field(s) and must be destructured. Use .${ge}(...) instead of .${ge}`});if(v.add(ge),be&&!ay(c,be)||ge!=="_"&&Sn(s)&&s.variantName!==ge)continue;let De={...c,selectedVariantName:ge==="_"?void 0:ge};Ie.$={env:Z,type:De,value:void 0,pathCollection:[]};let ze=De;l&&l==="Ptr"&&(ze=An(De));let We=Te;Z=vt(Z),ce.$={env:Z,type:ze,value:void 0,pathCollection:[],caseExecuted:!0};let pe=En({expr:We,env:Z,context:{...n,isExecuting:Sn(s)&&s.variantName===ge},variablesToAdd:[]});if(!((C=pe.$)!=null&&C.type))throw m({token:We.token,errorMessage:`Expected type for match result expression, got ${A(We)}`});let fe=Zt(pe.$.env,!0);if(Z=fe,pe.$={...pe.$,env:fe},Z=Ka(pe,Z),pe.$.env=Z,s===void 0&&pe.$&&(pe.$.value=void 0),an(pe.$.controlFlow))g.push(pe.$.controlFlow),nn(pe.$.controlFlow,"return")&&T.push(pe),s&&!Ge(s)&&Sn(s)?e.$={env:pe.$.env,type:(w=n.expectedType)!=null&&w.type&&!Xe(n.expectedType.type)?n.expectedType.type:pe.$.type,value:pe.$.value,pathCollection:pe.$.pathCollection,controlFlow:pe.$.controlFlow}:s===void 0&&(e.$={env:pe.$.env,type:(I=n.expectedType)!=null&&I.type&&!Xe(n.expectedType.type)?n.expectedType.type:pe.$.type,value:void 0,pathCollection:pe.$.pathCollection,controlFlow:pe.$.controlFlow});else if(y=!0,n.expectedType&&!Ce(n.expectedType,{type:pe.$.type,env:pe.$.env}))throw m({token:pe.token,errorMessage:`Incompatible type with expected type:
11866
+ Use \`::\` for compile-time definitions inside impl.`});let M=!$&&!n.isEvaluatingFunctionBodyOrAsyncBlock,q=(E=n.docCommentLookup)==null?void 0:E.get(Rr(l.token)),{env:P}=je({env:t,variable:{name:V,type:I,isCompileTimeOnly:$,value:l.$.value?[l.$.value]:void 0,token:l.token,initializedAtToken:l.token,consumedAtToken:void 0,isOwningTheRcValue:mt(I),isOwningTheSameRcValueAs:x,isReassignable:!s,isImplicit:s,isModuleLevel:M,docComment:q}});return t=P,l.token.value==="_"&&(l.$.variableName=V),l.$.env=t,s&&(o.$={env:t,value:ke,type:ke.type,pathCollection:[]}),e.$={env:t,value:ke,type:ke.type,pathCollection:[],isCompileTimeOnlyAssignment:$},e}else{let $=s||r,{env:k,runtimeDestructurings:C}=xF({lhs:l,rhs:a,env:t,isCompileTimeOnly:s||r,context:{...n}});return t=k,e.$={env:t,value:ke,type:ke.type,pathCollection:[],runtimeDestructurings:C,isCompileTimeOnlyAssignment:$},e}}function EN(e){return S(e)?b(e,"|",2):!1}function sy(e){if(!EN(e))return[e];let t=e,n=t.args[0],r=t.args[1];return[...sy(n),...sy(r)]}function DF(e,t,n){if(H(e))for(let r=0;r<t.length;r++){let i=t[r];if(i&&H(i)&&e.id===i.id){let o=n[r];if(o)return o}}return e}function ay(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&&!H(r)&&!Ce({type:r,env:e.env},{type:i,env:e.env}))return!1}return!0}function $N(e){return co(e)||fo(e)||Ki(e)||Mr(e)||yn(e)||On(e)||gn(e)}function VF({expr:e,env:t,context:n}){var k,C,w,I,L,x,V,M,q,P,R,te,j;if(!b(e,B.match))throw m({token:e.token,errorMessage:`Expected "match", got ${e.tag}`});let r=e.args;if(r.length<2)throw m({token:e.token,errorMessage:`Expected at least 2 arguments for "match", got ${r.length}`});let i=r[0],o=Q(i)?U({expr:i,env:t,context:{...n,expectedType:void 0}}):En({expr:i,env:t,context:{...n,expectedType:void 0},variablesToAdd:[]});if(!o.$||!o.$.variableName)throw m({token:i.token,errorMessage:`Failed to evaluate the match scrutinee expression: ${A(i)}`});t=o.$.env;let a=o.$.type,s=o.$.value,l,u;if(et(a)?(u=a.childType,l=a.tag):u=a,$N(u))return bN({expr:e,env:t,context:n,scrutineeExpr:o,scrutineeType:u,scrutineeValue:s});if(!Ye(u))throw m({token:i.token,errorMessage:`Expected enum type or primitive type (integer, bool) for match expression, got ${a?O(a):"unknown type"}`});let c=u,f=c.isGadt===!0&&((k=n.expectedType)==null?void 0:k.type)!==void 0&&c.typeConstructorArgs!==void 0&&c.typeConstructorArgs.length>0,_=r.slice(1),p=[],d,v=new Set,y=!1,h=!1,g=[],T=[],E=-1;for(let Y=0;Y<_.length;Y++){let le=_[Y],Z=t;if(!S(le)||!b(le,"=>",2))throw m({token:le.token,errorMessage:`Expected ":" for match pattern, got ${A(le)}`});let ce=le.args[0],Te=le.args[1];if(S(ce)&&b(ce,".",1)||Tn(ce,"_")){if(h)throw m({token:ce.token,errorMessage:'Wildcard pattern "_" can only be used once and must be the last match arm in a "match" expression.'});let Se;if(S(ce)){if(Se=ce.args[0],!Q(Se))throw m({token:ce.token,errorMessage:`Expected identifier for enum variant, got ${A(Se)}`})}else h=!0,Se=ce;let ge=Se.token.value,be=c.variants.find($e=>$e.name===ge);if(!be&&ge!=="_")throw m({token:ce.token,errorMessage:`Enum variant "${ge}" not found in ${O(c)}`});if(be&&be.fields&&be.fields.length>0)throw m({token:ce.token,errorMessage:`Enum variant "${ge}" has ${be.fields.length} field(s) and must be destructured. Use .${ge}(...) instead of .${ge}`});if(v.add(ge),be&&!ay(c,be)||ge!=="_"&&Sn(s)&&s.variantName!==ge)continue;let De={...c,selectedVariantName:ge==="_"?void 0:ge};Se.$={env:Z,type:De,value:void 0,pathCollection:[]};let ze=De;l&&l==="Ptr"&&(ze=An(De));let We=Te;Z=vt(Z),ce.$={env:Z,type:ze,value:void 0,pathCollection:[],caseExecuted:!0};let pe=En({expr:We,env:Z,context:{...n,isExecuting:Sn(s)&&s.variantName===ge},variablesToAdd:[]});if(!((C=pe.$)!=null&&C.type))throw m({token:We.token,errorMessage:`Expected type for match result expression, got ${A(We)}`});let fe=Zt(pe.$.env,!0);if(Z=fe,pe.$={...pe.$,env:fe},Z=Ka(pe,Z),pe.$.env=Z,s===void 0&&pe.$&&(pe.$.value=void 0),an(pe.$.controlFlow))g.push(pe.$.controlFlow),nn(pe.$.controlFlow,"return")&&T.push(pe),s&&!Ge(s)&&Sn(s)?e.$={env:pe.$.env,type:(w=n.expectedType)!=null&&w.type&&!Xe(n.expectedType.type)?n.expectedType.type:pe.$.type,value:pe.$.value,pathCollection:pe.$.pathCollection,controlFlow:pe.$.controlFlow}:s===void 0&&(e.$={env:pe.$.env,type:(I=n.expectedType)!=null&&I.type&&!Xe(n.expectedType.type)?n.expectedType.type:pe.$.type,value:void 0,pathCollection:pe.$.pathCollection,controlFlow:pe.$.controlFlow});else if(y=!0,n.expectedType&&!Ce(n.expectedType,{type:pe.$.type,env:pe.$.env}))throw m({token:pe.token,errorMessage:`Incompatible type with expected type:
11867
11867
  - Expected: ${O(n.expectedType.type)}
11868
11868
  - Actual : ${O(pe.$.type)}`});if(Z=pe.$.env,p.push(pe),E===-1&&Sn(s)&&!Ge(s)&&(s.variantName===ge||ge==="_")&&(E=p.length-1),!an(pe.$.controlFlow)){if(n.expectedType&&!Ce(n.expectedType,{type:pe.$.type,env:pe.$.env}))throw m({token:pe.token,errorMessage:`Incompatible type with expected type:
11869
11869
  - Expected: ${O(n.expectedType.type)}
@@ -11871,7 +11871,7 @@ Use \`::\` for compile-time definitions inside impl.`});let M=!$&&!n.isEvaluatin
11871
11871
  - Expected: ${O($e)}
11872
11872
  - Actual : ${O(pe.$.type)}`})}d||(d=n.expectedType)}else if(!d)d={type:(L=pe.$)==null?void 0:L.type,env:Z};else if(!Ce({type:d.type,env:Z},{type:(x=pe.$)==null?void 0:x.type,env:t}))if(Ce({type:hn({type:d.type,expectedType:void 0,expr:void 0,env:d.env}),env:d.env},{type:pe.$.type,env:Z}))d={type:pe.$.type,env:Z};else throw m({token:pe.token,errorMessage:`Incompatible types:
11873
11873
  - Previous: ${O(d.type)}
11874
- - Current : ${O(pe.$.type)}`})}}else if(S(ce)&&S(ce.func)&&b(ce.func,".",1)){if(h)throw m({token:ce.token,errorMessage:'Wildcard pattern "_" can only be used once and must be the last match arm in a "match" expression.'});let Ie=ce.func.args[0];if(!Q(Ie))throw m({token:ce.token,errorMessage:`Expected identifier for enum variant, got ${A(Ie)}`});let ge=Ie.token.value,be=c.variants.find(Le=>Le.name===ge);if(!be)throw m({token:ce.token,errorMessage:`Enum variant "${ge}" not found in ${O(c)}`});if(v.add(ge),!ay(c,be)||Sn(s)&&s.variantName!==ge)continue;let De=ce.args;if(be.fields&&be.fields.length>0){if(!De.some(Me=>S(Me)&&b(Me,":",2))&&De.length!==be.fields.length)throw m({token:ce.token,errorMessage:`Variant "${ge}" expects ${be.fields.length} parameters, got ${De.length}`})}else if(De.length>0)throw m({token:ce.token,errorMessage:`Variant "${ge}" has no fields, but destructuring parameters were provided`});let ze={...c,selectedVariantName:ge};Ie.$={env:Z,type:ze,value:void 0,pathCollection:[]};let We=ze;if(l&&l==="Ptr"&&(We=An(ze)),Z=vt(Z),be.fields&&be.fields.length>0){let Le=new Set;for(let Me=0;Me<De.length;Me++){let Ze=De[Me];if(S(Ze)&&b(Ze,":",2)){let $t=Ze.args[0],It=Ze.args[1];if(!Q($t))throw m({token:$t.token,errorMessage:`Expected identifier for label in destructuring pattern, got ${A($t)}`});let jt=$t.token.value,st=be.fields.findIndex(gt=>gt.label===jt);if(st===-1)throw m({token:$t.token,errorMessage:`Label "${jt}" not found in variant "${ge}". Available labels: ${be.fields.map(gt=>gt.label).join(", ")}`});if(Le.has(jt))throw m({token:$t.token,errorMessage:`Label "${jt}" is already destructured`});Le.add(jt);let Ct=be.fields[st],rn=Sn(s)&&!Ge(s),Bt=rn?s.fields[st]:void 0;if(Q(It)){let gt=It.token.value;if(gt!=="_"){let{env:ut}=je({env:Z,variable:{name:gt,type:Ct.type,isCompileTimeOnly:rn,value:Bt!==void 0?[Bt]:void 0,token:It.token,initializedAtToken:It.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheRcValue:!1}});Z=ut}It.$={env:Z,type:Ct.type,value:void 0,pathCollection:[]},$t.$={env:Z,type:Ct.type,value:void 0,pathCollection:[]}}else throw m({token:It.token,errorMessage:`Expected identifier or "_" for variable in labeled destructuring, got ${A(It)}`})}else if(Q(Ze)){let $t=Ze.token.value,It=be.fields[Me],jt=Sn(s)&&!Ge(s),st=jt?s.fields[Me]:void 0;if($t!=="_"){let{env:Ct}=je({env:Z,variable:{name:$t,type:It.type,isCompileTimeOnly:jt,value:st!==void 0?[st]:void 0,token:Ze.token,initializedAtToken:Ze.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheRcValue:!1}});Z=Ct}Ze.$={env:Z,type:It.type,value:void 0,pathCollection:[]}}else throw m({token:Ze.token,errorMessage:`Expected identifier, "_", or labeled pattern (label: variable) for destructuring parameter, got ${A(Ze)}`})}}ce.$={env:Z,type:We,value:void 0,pathCollection:[],caseExecuted:!0};let pe=Te,fe=En({expr:pe,env:Z,context:{...n,isExecuting:Sn(s)&&s.variantName===ge},variablesToAdd:[]});if(!((V=fe.$)!=null&&V.type))throw m({token:pe.token,errorMessage:`Expected type for match result expression, got ${A(pe)}`});let $e=Zt(fe.$.env,!0);if(Z=$e,fe.$={...fe.$,env:$e},Z=Ka(fe,Z),fe.$.env=Z,s===void 0&&fe.$&&(fe.$.value=void 0),an(fe.$.controlFlow)?(g.push(fe.$.controlFlow),nn(fe.$.controlFlow,"return")&&T.push(fe),s&&!Ge(s)&&Sn(s)?e.$={env:fe.$.env,type:(M=n.expectedType)!=null&&M.type&&!Xe(n.expectedType.type)?n.expectedType.type:fe.$.type,value:fe.$.value,pathCollection:fe.$.pathCollection,controlFlow:fe.$.controlFlow}:s===void 0&&(e.$={env:fe.$.env,type:(q=n.expectedType)!=null&&q.type&&!Xe(n.expectedType.type)?n.expectedType.type:fe.$.type,value:void 0,pathCollection:fe.$.pathCollection,controlFlow:fe.$.controlFlow})):y=!0,Z=fe.$.env,p.push(fe),E===-1&&Sn(s)&&!Ge(s)&&(s.variantName===ge||ge==="_")&&(E=p.length-1),!an(fe.$.controlFlow)){if(f){if(be.gadtReturnTypeArgs&&n.expectedType){let Le=DF(n.expectedType.type,c.typeConstructorArgs,be.gadtReturnTypeArgs);if(!Ce({type:Le,env:Z},{type:fe.$.type,env:Z}))throw m({token:fe.token,errorMessage:`GADT type mismatch in branch ".${ge}":
11874
+ - Current : ${O(pe.$.type)}`})}}else if(S(ce)&&S(ce.func)&&b(ce.func,".",1)){if(h)throw m({token:ce.token,errorMessage:'Wildcard pattern "_" can only be used once and must be the last match arm in a "match" expression.'});let Se=ce.func.args[0];if(!Q(Se))throw m({token:ce.token,errorMessage:`Expected identifier for enum variant, got ${A(Se)}`});let ge=Se.token.value,be=c.variants.find(Le=>Le.name===ge);if(!be)throw m({token:ce.token,errorMessage:`Enum variant "${ge}" not found in ${O(c)}`});if(v.add(ge),!ay(c,be)||Sn(s)&&s.variantName!==ge)continue;let De=ce.args;if(be.fields&&be.fields.length>0){if(!De.some(Me=>S(Me)&&b(Me,":",2))&&De.length!==be.fields.length)throw m({token:ce.token,errorMessage:`Variant "${ge}" expects ${be.fields.length} parameters, got ${De.length}`})}else if(De.length>0)throw m({token:ce.token,errorMessage:`Variant "${ge}" has no fields, but destructuring parameters were provided`});let ze={...c,selectedVariantName:ge};Se.$={env:Z,type:ze,value:void 0,pathCollection:[]};let We=ze;if(l&&l==="Ptr"&&(We=An(ze)),Z=vt(Z),be.fields&&be.fields.length>0){let Le=new Set;for(let Me=0;Me<De.length;Me++){let Ze=De[Me];if(S(Ze)&&b(Ze,":",2)){let $t=Ze.args[0],It=Ze.args[1];if(!Q($t))throw m({token:$t.token,errorMessage:`Expected identifier for label in destructuring pattern, got ${A($t)}`});let jt=$t.token.value,st=be.fields.findIndex(gt=>gt.label===jt);if(st===-1)throw m({token:$t.token,errorMessage:`Label "${jt}" not found in variant "${ge}". Available labels: ${be.fields.map(gt=>gt.label).join(", ")}`});if(Le.has(jt))throw m({token:$t.token,errorMessage:`Label "${jt}" is already destructured`});Le.add(jt);let Ct=be.fields[st],rn=Sn(s)&&!Ge(s),Bt=rn?s.fields[st]:void 0;if(Q(It)){let gt=It.token.value;if(gt!=="_"){let{env:ut}=je({env:Z,variable:{name:gt,type:Ct.type,isCompileTimeOnly:rn,value:Bt!==void 0?[Bt]:void 0,token:It.token,initializedAtToken:It.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheRcValue:!1}});Z=ut}It.$={env:Z,type:Ct.type,value:void 0,pathCollection:[]},$t.$={env:Z,type:Ct.type,value:void 0,pathCollection:[]}}else throw m({token:It.token,errorMessage:`Expected identifier or "_" for variable in labeled destructuring, got ${A(It)}`})}else if(Q(Ze)){let $t=Ze.token.value,It=be.fields[Me],jt=Sn(s)&&!Ge(s),st=jt?s.fields[Me]:void 0;if($t!=="_"){let{env:Ct}=je({env:Z,variable:{name:$t,type:It.type,isCompileTimeOnly:jt,value:st!==void 0?[st]:void 0,token:Ze.token,initializedAtToken:Ze.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheRcValue:!1}});Z=Ct}Ze.$={env:Z,type:It.type,value:void 0,pathCollection:[]}}else throw m({token:Ze.token,errorMessage:`Expected identifier, "_", or labeled pattern (label: variable) for destructuring parameter, got ${A(Ze)}`})}}ce.$={env:Z,type:We,value:void 0,pathCollection:[],caseExecuted:!0};let pe=Te,fe=En({expr:pe,env:Z,context:{...n,isExecuting:Sn(s)&&s.variantName===ge},variablesToAdd:[]});if(!((V=fe.$)!=null&&V.type))throw m({token:pe.token,errorMessage:`Expected type for match result expression, got ${A(pe)}`});let $e=Zt(fe.$.env,!0);if(Z=$e,fe.$={...fe.$,env:$e},Z=Ka(fe,Z),fe.$.env=Z,s===void 0&&fe.$&&(fe.$.value=void 0),an(fe.$.controlFlow)?(g.push(fe.$.controlFlow),nn(fe.$.controlFlow,"return")&&T.push(fe),s&&!Ge(s)&&Sn(s)?e.$={env:fe.$.env,type:(M=n.expectedType)!=null&&M.type&&!Xe(n.expectedType.type)?n.expectedType.type:fe.$.type,value:fe.$.value,pathCollection:fe.$.pathCollection,controlFlow:fe.$.controlFlow}:s===void 0&&(e.$={env:fe.$.env,type:(q=n.expectedType)!=null&&q.type&&!Xe(n.expectedType.type)?n.expectedType.type:fe.$.type,value:void 0,pathCollection:fe.$.pathCollection,controlFlow:fe.$.controlFlow})):y=!0,Z=fe.$.env,p.push(fe),E===-1&&Sn(s)&&!Ge(s)&&(s.variantName===ge||ge==="_")&&(E=p.length-1),!an(fe.$.controlFlow)){if(f){if(be.gadtReturnTypeArgs&&n.expectedType){let Le=DF(n.expectedType.type,c.typeConstructorArgs,be.gadtReturnTypeArgs);if(!Ce({type:Le,env:Z},{type:fe.$.type,env:Z}))throw m({token:fe.token,errorMessage:`GADT type mismatch in branch ".${ge}":
11875
11875
  - Expected: ${O(Le)}
11876
11876
  - Actual : ${O(fe.$.type)}`})}d||(d=n.expectedType)}else if(!d)d={type:(P=fe.$)==null?void 0:P.type,env:Z};else if(!Ce({type:d.type,env:Z},{type:(R=fe.$)==null?void 0:R.type,env:t}))if(Ce({type:hn({type:d.type,expectedType:void 0,expr:void 0,env:d.env}),env:d.env},{type:fe.$.type,env:Z}))d={type:fe.$.type,env:Z};else throw m({token:fe.token,errorMessage:`Incompatible types:
11877
11877
  - Previous: ${O(d.type)}
@@ -11901,13 +11901,13 @@ ${A(e)}`});let r=e.args[0],i=e.args[1];if(r=U({expr:r,env:t,context:{...n,expect
11901
11901
  ${A(i)}`});{let L=i.token.value,x=$.value.trait.fields.find(V=>V.label===L);if(x)return e.$={env:t,type:x.type,value:x.assignedValue,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}let k=i.token.value,C=$.value,w=C.variants.find(L=>L.name===k);if(!w){let L=ki({concreteType:$.value,methodName:k,env:t});if(L.length===1){let x=L[0];return e.$={env:t,type:x.type,value:x.value,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}if(L.length>1)return e.$=void 0,e;throw m({token:i.token,errorMessage:`Enum variant "${k}" not found in enum`})}let I={...C,selectedVariantName:k};if(!w.fields)e.$={env:t,type:I,value:Ra(I,k,[]),isAccessingProperty:!0,pathCollection:[]},i.$=e.$;else{let L=xe(I);e.$={env:t,type:L.type,value:L,isAccessingProperty:!0,pathCollection:[]},i.$=e.$}return e}else if($.value.trait){if(!Wt(i))throw m({token:i.token,errorMessage:`Expected identifier for type method, got:
11902
11902
  ${A(i)}`});let k=i.token.value,C=$.value.trait.fields.findLast(w=>w.label===k);if(C){if(C.assignedValue){let w=C.assignedValue.type;return e.$={env:t,type:w,value:C.assignedValue,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}if(C.unassignedSomeType){let w=xe(C.unassignedSomeType);return e.$={env:t,type:w.type,value:w,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}return e.$={env:t,type:C.type,value:void 0,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}else{for(let L of $.value.trait.fields)if(L.label===""&&L.assignedValue&&on(L.assignedValue)){let x=L.assignedValue,V=x.type,M=V.fields.findIndex(q=>q.label===k);if(M>=0){let q=V.fields[M],P=x.fields[M];if(_e(q.type))continue;if(P)return e.$={env:t,type:P.type,value:P,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e;if(q.unassignedSomeType){let R=xe(q.unassignedSomeType);return e.$={env:t,type:R.type,value:R,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}}}let w=ki({concreteType:$.value,methodName:k,env:t});if(w.length===1){let L=w[0];return e.$={env:t,type:L.type,value:L.value,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}if(n.isEvaluatingGenericImplSpecialization){let L=ve(t,k);if(L.length>0){let x=L[L.length-1];if(x.value&&x.value.length>0&&X(x.value[0]))return e.$={env:t,type:x.value[0].type,value:x.value[0],pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}}let I=n_({concreteType:$.value,propertyName:k,env:t});return I?(e.$={env:t,type:I.type,value:I.value,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e):(e.$=void 0,e)}}else if(rt($.value)){if(!Wt(i))throw m({token:i.token,errorMessage:`Expected identifier for type method, got:
11903
11903
  ${A(i)}`});let k=i.token.value,w=$.value.fields.find(I=>I.label===k);return w?(e.$={env:t,type:w.type,value:w.assignedValue??Ee(w.type,{variableName:w.label,env:t,context:n}),pathCollection:[],isAccessingProperty:!0},i.$=e.$,e):(e.$=void 0,e)}else if(_t($.value)){if(!Wt(i))throw m({token:i.token,errorMessage:`Expected identifier for type method, got:
11904
- ${A(i)}`});let k=i.token.value,C=$.value;if(C.receiverType&&C.receiverType.trait){for(let L of C.receiverType.trait.fields)if(L.label===""&&L.assignedValue&&on(L.assignedValue)){let x=L.assignedValue,V=x.type;if(!Ce({type:C,env:t},{type:V,env:t}))continue;let M=V.fields.findIndex(q=>q.label===k&&_e(q.type));if(M>=0){let q=V.fields[M];if(_e(q.type)){let P=x.fields[M];if(P){let R=q.type;return Se(P)&&P.specializedType&&(R=P.specializedType),e.$={env:t,type:R,value:P,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}}}}let I=HE({concreteType:C.receiverType,traitType:C,methodName:k,env:t});if(I)return e.$={env:t,type:I.type,value:I.value,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}let w=C.fields.find(I=>I.label===k);return w?(e.$={env:t,type:w.type,value:w.assignedValue??Ee(w.type,{variableName:w.label,env:t,context:n}),pathCollection:[],isAccessingProperty:!0},i.$=e.$,e):(e.$=void 0,e)}}let o=(p=r.$)==null?void 0:p.type,a=(d=r.$)==null?void 0:d.type;for(;o&&et(o);)o=o.childType;if(Tt(o)||Oe(o)||Ht(o)){let $=o.fields,k=r.$.value;if(Q(i)){if(i.token.type==="integer"){if(!Tt((v=r.$)==null?void 0:v.type))throw m({token:i.token,errorMessage:"Accessing tuple field by index is only allowed for tuples."});let C=parseInt(i.token.value,10);if(isNaN(C))throw m({token:i.token,errorMessage:`Expected integer for tuple index, got:
11904
+ ${A(i)}`});let k=i.token.value,C=$.value;if(C.receiverType&&C.receiverType.trait){for(let L of C.receiverType.trait.fields)if(L.label===""&&L.assignedValue&&on(L.assignedValue)){let x=L.assignedValue,V=x.type;if(!Ce({type:C,env:t},{type:V,env:t}))continue;let M=V.fields.findIndex(q=>q.label===k&&_e(q.type));if(M>=0){let q=V.fields[M];if(_e(q.type)){let P=x.fields[M];if(P){let R=q.type;return Ie(P)&&P.specializedType&&(R=P.specializedType),e.$={env:t,type:R,value:P,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}}}}let I=HE({concreteType:C.receiverType,traitType:C,methodName:k,env:t});if(I)return e.$={env:t,type:I.type,value:I.value,pathCollection:[],isAccessingProperty:!0},i.$=e.$,e}let w=C.fields.find(I=>I.label===k);return w?(e.$={env:t,type:w.type,value:w.assignedValue??Ee(w.type,{variableName:w.label,env:t,context:n}),pathCollection:[],isAccessingProperty:!0},i.$=e.$,e):(e.$=void 0,e)}}let o=(p=r.$)==null?void 0:p.type,a=(d=r.$)==null?void 0:d.type;for(;o&&et(o);)o=o.childType;if(Tt(o)||Oe(o)||Ht(o)){let $=o.fields,k=r.$.value;if(Q(i)){if(i.token.type==="integer"){if(!Tt((v=r.$)==null?void 0:v.type))throw m({token:i.token,errorMessage:"Accessing tuple field by index is only allowed for tuples."});let C=parseInt(i.token.value,10);if(isNaN(C))throw m({token:i.token,errorMessage:`Expected integer for tuple index, got:
11905
11905
  ${A(i)}`});let w=$.length;if(C<0||C>=w)throw m({token:i.token,errorMessage:`Index out of bounds: ${C} for accessing field in:
11906
11906
  ${O((y=r.$)==null?void 0:y.type)}`});let I=$[C],L=r.$.originType||a,x=r.$.pathCollection&&r.$.pathCollection.length>0?r.$.pathCollection.map(V=>[...V,i.token.value]):[[r.$.variableName??"?",i.token.value]];if(e.$={env:t,type:I.type,originType:L,isAccessingProperty:!0,pathCollection:x},i.$=e.$,k){let V=[];(kr(k)||qn(k))&&(V=k.fields),e.$.value=V==null?void 0:V[C]}return Gt(e,!1),e}else if(Wt(i)){let C=i.token.value;{let w=$.findIndex(V=>V.label===C);if(w<0){if(rt((h=r.$)==null?void 0:h.type))throw m({token:i.token,errorMessage:`Module field "${C}" not found in module type`});return e.$=void 0,e}let I=$[w],L=((g=r.$)==null?void 0:g.originType)||a,x=r.$.pathCollection&&r.$.pathCollection.length>0?r.$.pathCollection.map(V=>[...V,i.token.value]):[[r.$.variableName??"?",i.token.value]];if(e.$={env:t,type:I.type,originType:L,isAccessingProperty:!0,pathCollection:x},i.$=e.$,k)if(Ge(k)){let V=Ee(I.type,{env:t,context:n});k.isRuntimeOnly&&Ge(V)&&(V.isRuntimeOnly=!0),e.$.value=V}else{let V=k;if(bi(k)){let P=k.targetValue[0];qr(P)?V=P.elements[k.targetIndex]:V=P}let M=[];(kr(V)||qn(V))&&(M=V.fields);let q=M==null?void 0:M[w];q||(q=Ee(I.type,{env:t,context:n})),e.$.value=q,bi(k)&&(qn(V)?e.$.comptimeRef={kind:"struct",structValue:V,fieldIndex:w}:kr(V)&&(e.$.comptimeRef={kind:"tuple",tupleValue:V,fieldIndex:w}))}return Gt(e,!1),e}}}}else if(rt(o)){let $=o.fields,k=r.$.value;if(Q(i)){if(i.token.type==="integer")throw m({token:i.token,errorMessage:`Accessomg module field by index is not allowed, got:
11907
11907
  ${A(i)}`});if(Wt(i)){let C=i.token.value;{let w=$.findIndex(x=>x.label===C);if(w<0){if(rt((T=r.$)==null?void 0:T.type))throw k&&Rt(k)&&k.isLoading?m({token:i.token,errorMessage:`Field "${C}" is not yet available from this module. In a circular import, only fields exported before the import of the current module are accessible. Reorder your exports or break the cycle.`}):m({token:i.token,errorMessage:`Module field "${C}" not found in module type`});return e.$=void 0,e}let I=$[w],L=r.$.pathCollection&&r.$.pathCollection.length>0?r.$.pathCollection.map(x=>[...x,i.token.value]):[[r.$.variableName??"?",i.token.value]];if(e.$={env:t,type:I.type,isAccessingProperty:!0,pathCollection:L},i.$=e.$,k)if(Ge(k)){let x=Ee(I.type,{env:t,context:n});k.isRuntimeOnly&&Ge(x)&&(x.isRuntimeOnly=!0),e.$.value=x}else{let x=[];Rt(k)&&(x=k.fields);let V=x==null?void 0:x[w];V||(V=Ee(I.type,{env:t,context:n})),e.$.value=V}return e}}}}else if(Ye(o)&&Q(i)){if(!Wt(i))throw m({token:i.token,errorMessage:`Expected identifier for enum variant property, got:
11908
11908
  ${A(i)}`});let $=i.token.value,k=o.variants.find(C=>C.name===o.selectedVariantName);if(k){let C=(k.fields??[]).findIndex(L=>L.label===$);if(C<0)return e.$=void 0,e;let w=(k.fields??[])[C];e.$={env:t,type:w.type,value:void 0,pathCollection:[[r.$.variableName??"?",i.token.value]],isAccessingProperty:!0};let I=(E=r.$)==null?void 0:E.value;return I&&Sn(I)&&I.variantName===k.name&&(e.$.value=I.fields[C]),i.$=e.$,e}}return e.$=void 0,e}function OF({expr:e,env:t,context:n}){var o;if(((o=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:o.kind)!=="function-body")throw m({token:e.token,errorMessage:`Expected a function type for recur, got:
11909
11909
  ${A(e)}`});let r=n.isEvaluatingFunctionBodyOrAsyncBlock.type;if(!b(e,B.recur))throw m({token:e.token,errorMessage:`Expected recur, got:
11910
- ${A(e)}`});if(n.isAnalyzingCtfeCapability||n.isValidatingFunctionDefinition){let a=n.isEvaluatingFunctionBodyOrAsyncBlock.value,{returnType:s,runtimeArgExprsInOrder:l,callerEnv:u}=$a({functionValue:Se(a)?a:void 0,functionType:r,expr:e,functionCalleeExpr:e.func,argExprs:e.args,callerEnv:t,context:n,isMethodCall:!1,skipSpecialization:!0,skipCtfeExecution:!0});return t=Zt(u),e.$={type:s,value:Ee(s,{variableName:"recur_result_"+xt(t.modulePath),env:t,context:n}),env:t,pathCollection:[],runtimeArgExprsInOrder:l},e}return wi({expr:e,env:t,givenFunc:{type:r,value:n.isEvaluatingFunctionBodyOrAsyncBlock.value??void 0},context:{...n}})}function PF({expr:e,env:t,context:n}){var a;if(!b(e,B.runtime,1))throw m({token:e.token,errorMessage:`Expected runtime(expr), got:
11910
+ ${A(e)}`});if(n.isAnalyzingCtfeCapability||n.isValidatingFunctionDefinition){let a=n.isEvaluatingFunctionBodyOrAsyncBlock.value,{returnType:s,runtimeArgExprsInOrder:l,callerEnv:u}=$a({functionValue:Ie(a)?a:void 0,functionType:r,expr:e,functionCalleeExpr:e.func,argExprs:e.args,callerEnv:t,context:n,isMethodCall:!1,skipSpecialization:!0,skipCtfeExecution:!0});return t=Zt(u),e.$={type:s,value:Ee(s,{variableName:"recur_result_"+xt(t.modulePath),env:t,context:n}),env:t,pathCollection:[],runtimeArgExprsInOrder:l},e}return wi({expr:e,env:t,givenFunc:{type:r,value:n.isEvaluatingFunctionBodyOrAsyncBlock.value??void 0},context:{...n}})}function PF({expr:e,env:t,context:n}){var a;if(!b(e,B.runtime,1))throw m({token:e.token,errorMessage:`Expected runtime(expr), got:
11911
11911
  ${A(e)}`});if(n.isAnalyzingCtfeCapability)throw m({token:e.token,errorMessage:'Cannot use "runtime" during compile-time function evaluation analysis. The "runtime" keyword forces runtime evaluation and prevents CTFE.'});let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if(!((a=i.$)!=null&&a.type))throw m({token:i.token,errorMessage:`Failed to evaluate runtime argument:
11912
11912
  ${A(i)}`});let o=hn({type:i.$.type,expectedType:void 0,expr:i,env:i.$.env??t});return e.$={type:o,value:void 0,env:i.$.env??t,pathCollection:i.$.pathCollection??[]},e}function UF({expr:e,env:t,context:n}){it(e,"<:",2);let r=e.args[0],i=e.args[1],o=U({expr:r,env:t,context:{...n}});if(!o.$||!o.$.value||!X(o.$.value))throw m({token:r.token,errorMessage:"Expected type for left-hand side expression."});t=o.$.env;let a=o.$.value;if(n.isInsideWhereClause&&!H(a.value))throw m({token:r.token,errorMessage:`In a where clause, the left-hand side of <: must be a type parameter (SomeType), got: ${A(r)} of type ${O(a.value)}`});let s=[];if(S(i)&&b(i,B.tuple))for(let p of i.args)S(p)&&b(p,"!")&&p.args.length===1?s.push({expr:p.args[0],isNegated:!0}):s.push({expr:p,isNegated:!1});else S(i)&&b(i,"!")&&i.args.length===1?s.push({expr:i.args[0],isNegated:!0}):s.push({expr:i,isNegated:!1});let l=[];for(let{expr:p,isNegated:d}of s){let v=U({expr:p,env:t,context:{...n}});if(!v.$||!v.$.value||!X(v.$.value)||!_t(v.$.value.value))throw m({token:p.token,errorMessage:"Expected trait type for right-hand side expression."});t=v.$.env;let y=v.$.value.value;if(y.receiverType)throw m({token:p.token,errorMessage:"Expected trait type already has a receiver type assigned."});if(d&&!n.isInsideWhereClause)throw m({token:p.token,errorMessage:"Negated trait constraints !(Trait) are only allowed in where clauses."});l.push({traitType:y,expr:p,isNegated:d})}if(n.isInsideWhereClause&&H(a.value)){let p=a.value;for(let{traitType:d,isNegated:v}of l){let y={...d,receiverType:p};t=to({env:t,someType:p,traitType:y,isNegated:v})}return e.$={env:t,value:a,type:a.type,pathCollection:[]},e}if(l.length>1)throw m({token:i.token,errorMessage:"Multiple trait constraints (tuple form) are only allowed in where clauses."});let{traitType:u}=l[0],c=a.value;if(!H(c)&&!zn({targetType:c,traitType:u,env:t}))throw m({token:e.token,errorMessage:`Type "${O(c)}" does not implement trait "${u.typeName??O(u)}".`});let f={...u,receiverType:a.value},_=xe(f);return e.$={env:t,value:_,type:_.type,pathCollection:[]},e}function zF({expr:e,env:t,context:n}){if(!b(e,B.test))throw m({token:e.token,errorMessage:`Expected test, got ${e.tag}`});if(e.args.length!==2)throw m({token:e.token,errorMessage:`test expects 2 arguments (name, body), got ${e.args.length}. IO is implicitly available via "io" \u2014 no using clause needed.`});let r=e.args[0],i=e.args[1],o=U({expr:r,env:t,context:{...n}});if(!o.$||!o.$.value)throw m({token:r.token,errorMessage:`Failed to evaluate test name: ${A(r)}`});if(t=o.$.env,!pt(o.$.value))throw m({token:r.token,errorMessage:`Expected string for test name, got ${A(r)}`});let a=ve(t,"IO"),s=a[a.length-1];if(!s)throw m({token:e.token,errorMessage:"IO module not found in environment. Is the prelude loaded?"});let l=Array.isArray(s.value)?s.value[0]:s.value,u=l&&X(l)?l.value:s.type,c=vt(t),f=Ee(u,{variableName:"io",env:c,context:n}),_={name:"io",type:u,value:[f],isCompileTimeOnly:!0,isOwningTheRcValue:!1,isImplicit:!0,isReassignable:!1,initializedAtToken:e.token,consumedAtToken:void 0,token:e.token};c=je({env:c,variable:_,allowVariableShadowing:!0}).env;let d=Et(i),v=U({expr:i,env:c,context:{...n,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"test-block",evaluationEnv:c}}});if(!v.$)throw m({token:i.token,errorMessage:`Failed to evaluate test body: ${A(i)}`});if(!Ke(v.$.type))throw m({token:i.token,errorMessage:`Test body must have 'unit' type, got ${O(v.$.type)}`});return v.$.originalExpr=d,e.$={env:t,type:ke.type,value:ke,pathCollection:[]},e}function BF({expr:e,env:t,context:n}){var s,l;if(!b(e,F.typeof,1))throw m({token:e.token,errorMessage:`Expected "typeof" with 1 argument, got:
11913
11913
  ${A(e)}`});let r=e.args[0],i=U({expr:r,env:t,context:{...n}});if((s=i.$)!=null&&s.env&&(t=i.$.env),!((l=i.$)!=null&&l.type))throw m({token:r.token,errorMessage:`Expected type for expression, got:
@@ -11922,7 +11922,7 @@ ${O(_.$.type)}`});let d=_.$.value===void 0;if(t=_.$.env,o){let v=U({expr:o,env:t
11922
11922
  ${A(o)}`});t=v.$.env}if(Ut(l)&&l.value===!0&&d){let v=Et(i),h=(c=En({expr:v,env:t,context:{...n},variablesToAdd:[]}).$)==null?void 0:c.value;if(Ut(h)){let g=[a],T=t,E=h.value;for(let $=1;E&&$<uy;$++){let k=Et(a),C=En({expr:k,env:T,context:{...n,isEvaluatingLoopBody:{kind:"while",env:T}},variablesToAdd:[]});if(!C.$)break;if(g.push(k),T=C.$.env,o){let x=Et(o),V=U({expr:x,env:T,context:{...n}});if(!V.$)break;T=V.$.env}let w=Et(i),L=(f=En({expr:w,env:T,context:{...n},variablesToAdd:[]}).$)==null?void 0:f.value;if(Ut(L)&&L.value===!1)E=!1;else if(Ut(L)&&L.value===!0)E=!0;else return e.$={env:T,pathCollection:[],type:ke.type,value:void 0,comptimeUnrolledBodies:g},e}if(!E)return e.$={env:T,pathCollection:[],type:ke.type,value:void 0,comptimeUnrolledBodies:g},e}ly(e,a,_.$.controlFlow)}if(Ut(l)&&l.value===!0){let v=r+1;return v>=uy&&ly(e,a,_.$.controlFlow),x_({expr:e,env:t,context:{...n},_comptimeIterationCount:v})}else return e.$={env:t,pathCollection:[],type:ke.type,value:u?ke:void 0},e}}function GF(e){let t=process.env[e];return t==="1"||(t==null?void 0:t.toLowerCase())==="true"}var CN=GF("YO_DEBUG_EVAL")||GF("YO_DEBUG_EVAL_PROFILE"),WF=globalThis,gl=WF.__yoEvalProfilerState??(WF.__yoEvalProfilerState={evalCount:0,evalStart:0});function ba({expr:e,env:t,context:n}){if(CN&&(gl.evalStart||(gl.evalStart=Date.now()),gl.evalCount++,gl.evalCount%1e5===0&&console.log(`[EVAL] ${gl.evalCount} calls, ${Date.now()-gl.evalStart}ms elapsed`)),Q(e))switch(e.token.type){case"identifier":case"operator":return S_({expr:e,env:t,context:{...n},throwErrorOnUndefined:!0});case"integer":return bF(e,t,{...n});case"float":return $F(e,t,{...n});case"string":return CF(e,t);case"char":return hF(e,t);case"bool":return gF(e,t);default:throw m({token:e.token,errorMessage:`(1) Evaluating the expression (tag: ${e.tag}, token: ${e.token.type}) below is not implemented:
11923
11923
  ${A(e)}`})}else if(b(e,":",2)){let{expr:r}=I_({expr:e,env:t,context:n});return r}else{if(b(e,":=",2)||b(e,"::",2))return NF({expr:e,env:t,context:n});if(b(e,"=",2))return wF({expr:e,env:t,context:n});if(b(e,"->",2))return S(e.args[0])&&(b(e.args[0],B.fn)||b(e.args[0],B.unsafe_fn))?h_({expr:e,env:t,context:{...n,isUnsafeFunctionType:b(e.args[0],B.unsafe_fn)}}):S(e.args[0])&&b(e.args[0],B.Fn)?aF({expr:e,env:t,context:{...n}}):L_({expr:e,env:t,context:{...n}});if(b(e,"=>",2))return S(e.args[0])&&b(e.args[0],B.fn)?tF({expr:e,env:t,context:{...n}}):L_({expr:e,env:t,context:{...n}});if(b(e,"=>>",2))return L_({expr:e,env:t,context:{...n}});if(b(e,B.recur))return OF({expr:e,env:t,context:{...n}});if(b(e,B.runtime))return PF({expr:e,env:t,context:{...n}});if(b(e,B.extern))return SF({expr:e,env:t,context:{...n}});if(b(e,B.c_include))return FF({expr:e,env:t,context:{...n}});if(b(e,B.test))return zF({expr:e,env:t,context:{...n}});if(b(e,B.cond))return LF({expr:e,env:t,context:{...n}});if(b(e,B.match))return VF({expr:e,env:t,context:{...n}});if(b(e,B.tuple))return kF({expr:e,env:t,context:{...n}});if(b(e,B.array))return yF({expr:e,env:t,context:{...n}});if(b(e,B.comptime_list))return vF({expr:e,env:t,context:{...n}});if(b(e,B.dyn))return EF({expr:e,env:t,context:{...n}});if(b(e,B.atomic)){if(e.args.length!==1)throw m({token:e.token,errorMessage:'"atomic" expects exactly one argument: atomic object(...)'});let r=e.args[0];if(!S(r)||!b(r,B.object))throw m({token:r.token,errorMessage:`"atomic" modifier is only valid before "object(...)". Got:
11924
11924
  ${A(r)}`});let i=ry({expr:r,env:t,context:{...n},isAtomicRc:!0});return e.$=i.$,e.func.$=i.$,e}else{if(b(e,B.struct))return yl({expr:e,env:t,context:{...n}});if(b(e,B.object))return ry({expr:e,env:t,context:{...n}});if(b(e,B.newtype))return uF({expr:e,env:t,context:{...n}});if(b(e,B.enum))return oF({expr:e,env:t,context:{...n}});if(b(e,B.union))return mF({expr:e,env:t,context:{...n}});if(b(e,"."))return RF({expr:e,env:t,context:{...n}});if(b(e,B.begin))return En({expr:e,env:t,context:{...n},variablesToAdd:[]});if(b(e,B.module))return lF({expr:e,env:t,context:{...n}});if(b(e,B.trait))return pF({expr:e,env:t,context:{...n}});if(b(e,B.Impl))return dw({expr:e,env:t,context:{...n}});if(b(e,B.impl))return KE({expr:e,env:t,context:{...n}});if(b(e,F.typeof))return BF({expr:e,env:t,context:{...n}});if(b(e,F.sizeof))return Lw({expr:e,env:t,context:{...n}});if(b(e,F.alignof))return UC({expr:e,env:t,context:{...n}});if(b(e,F.typeid))return Yw({expr:e,env:t,context:{...n}});if(b(e,F.downcast))return Lk({expr:e,env:t,context:{...n}});if(b(e,F.rc))return Fw({expr:e,env:t,context:{...n}});if(b(e,"<:"))return UF({expr:e,env:t,context:{...n}});if(b(e,F.the))return Iw({expr:e,env:t,context:{...n}});if(b(e,B.import))return AF({expr:e,env:t,context:{...n},stdPath:n.stdPath});if(b(e,B.open))return MF({expr:e,env:t,context:{...n}});if(b(e,B.Ptr,1))return Zw({expr:e,env:t,context:{...n}});if(b(e,B.Iso,1))return Jk({expr:e,env:t,context:{...n}});if(b(e,F.__yo_address_of,1))return ww({expr:e,env:t,context:{...n}});if(b(e,B.Tuple))return dF({expr:e,env:t,context:{...n}});if(b(e,B.Array))return eF({expr:e,env:t,context:{...n}});if(b(e,F.__yo_array_fill,2))return BC({expr:e,env:t,context:{...n}});if(b(e,B.Slice))return cF({expr:e,env:t,context:{...n}});if(b(e,B.ComptimeList))return nF({expr:e,env:t,context:{...n}});if(b(e,B.Future))return sF({expr:e,env:t,context:{...n}});if(b(e,B.Concrete))return rF({expr:e,env:t,context:{...n}});if(b(e,B.Dyn))return iF({expr:e,env:t,context:{...n}});if(b(e,F.comptime_expect_error))return WC({expr:e,env:t,context:{...n}});if(b(e,F.comptime_assert))return qC({expr:e,env:t,context:{...n}});if(b(e,F.comptime_fn))return jC({expr:e,env:t,context:{...n}});if(b(e,F.comptime_print))return rk({expr:e,env:t,context:{...n}});if(b(e,F.panic))return gw({expr:e,env:t,context:{...n}});if(b(e,F.asm))return bw({expr:e,env:t,context:{...n}});if(b(e,F.global_asm))return Cw({expr:e,env:t,context:{...n}});if(b(e,F.macro_expand))return yw({expr:e,env:t,context:{...n}});if(b(e,B.op_and)||b(e,B.op_or))return zC({expr:e,env:t,context:{...n}});if(b(e,B.escape))return IF({expr:e,env:t,context:{...n}});if(b(e,F.consume))return _k({expr:e,env:t,context:{...n}});if(b(e,F.___drop))return iw({expr:e,env:t,context:{...n}});if(b(e,F.___dup))return ow({expr:e,env:t,context:{...n}});if(b(e,F.__yo_decr_rc))return pk({expr:e,env:t,context:{...n}});if(b(e,F.__yo_incr_rc))return dk({expr:e,env:t,context:{...n}});if(b(e,F.__yo_decr_rc_atomic))return yk({expr:e,env:t,context:{...n}});if(b(e,F.__yo_incr_rc_atomic))return mk({expr:e,env:t,context:{...n}});if(b(e,F.__yo_iso_extract))return $k({expr:e,env:t,context:{...n}});if(b(e,F.__yo_iso_dispose))return bk({expr:e,env:t,context:{...n}});if(b(e,F.__yo_drop_array_element))return Ck({expr:e,env:t,context:{...n}});if(b(e,F.__yo_dup_array_element))return kk({expr:e,env:t,context:{...n}});if(b(e,F.__yo_drop_tuple_element))return wk({expr:e,env:t,context:{...n}});if(b(e,F.__yo_dup_tuple_element))return Fk({expr:e,env:t,context:{...n}});if(b(e,F.__yo_rc_own))return gk({expr:e,env:t,context:{...n}});if(b(e,F.__yo_dyn_drop))return hk({expr:e,env:t,context:{...n}});if(b(e,F.__yo_dyn_dup))return vk({expr:e,env:t,context:{...n}});if(b(e,F.__yo_sometype_drop))return Tk({expr:e,env:t,context:{...n}});if(b(e,F.__yo_sometype_dup))return Ek({expr:e,env:t,context:{...n}});if(b(e,F.__yo_gc_collect))return _w({expr:e,env:t,context:{...n}});if(b(e,B.quote))return mw({expr:e,env:t,context:{...n}});if(b(e,B.gensym))return pw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_expr_is_atom))return aw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_expr_is_fn_call))return sw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_expr_get_callee))return lw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_expr_get_args))return uw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_expr_to_string))return cw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_expr_eq))return fw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_comptime_list_car))return HC({expr:e,env:t,context:{...n}});if(b(e,F.__yo_comptime_list_cdr))return YC({expr:e,env:t,context:{...n}});if(b(e,F.__yo_comptime_list_cons))return KC({expr:e,env:t,context:{...n}});if(b(e,F.__yo_comptime_list_append))return XC({expr:e,env:t,context:{...n}});if(b(e,F.__yo_comptime_list_length))return QC({expr:e,env:t,context:{...n}});if(b(e,F.__yo_comptime_list_element_type))return JC({expr:e,env:t,context:{...n}});if(b(e,F.__yo_comptime_list_get))return ZC({expr:e,env:t,context:{...n}});if(S(e)&&e.func.tag==="Atom"&&typeof e.func.token.value=="string"&&(e.func.token.value.startsWith("__yo_comptime_u8_")||e.func.token.value.startsWith("__yo_comptime_i8_")||e.func.token.value.startsWith("__yo_comptime_u16_")||e.func.token.value.startsWith("__yo_comptime_i16_")||e.func.token.value.startsWith("__yo_comptime_u32_")||e.func.token.value.startsWith("__yo_comptime_i32_")||e.func.token.value.startsWith("__yo_comptime_u64_")||e.func.token.value.startsWith("__yo_comptime_i64_")||e.func.token.value.startsWith("__yo_comptime_usize_")||e.func.token.value.startsWith("__yo_comptime_isize_")||e.func.token.value.startsWith("__yo_comptime_f32_")||e.func.token.value.startsWith("__yo_comptime_f64_")||e.func.token.value.startsWith("__yo_comptime_int_")||e.func.token.value.startsWith("__yo_comptime_float_")))return nk({expr:e,env:t,context:{...n}});if(b(e,F.__yo_comptime_bool_and,2)||b(e,F.__yo_comptime_bool_or,2)||b(e,F.__yo_comptime_bool_eq,2)||b(e,F.__yo_comptime_bool_neq,2)||b(e,F.__yo_comptime_bool_not,1)||b(e,F.__yo_comptime_bool_to_comptime_string,1))return GC({expr:e,env:t,context:{...n}});if(b(e,F.__yo_comptime_string_concat,2)||b(e,F.__yo_comptime_string_eq,2)||b(e,F.__yo_comptime_string_neq,2)||b(e,F.__yo_comptime_string_lt,2)||b(e,F.__yo_comptime_string_lte,2)||b(e,F.__yo_comptime_string_gt,2)||b(e,F.__yo_comptime_string_gte,2)||b(e,F.__yo_comptime_string_length,1)||b(e,F.__yo_comptime_string_to_upper,1)||b(e,F.__yo_comptime_string_to_lower,1)||b(e,F.__yo_comptime_string_slice))return ik({expr:e,env:t,context:{...n}});if(b(e,F.__yo_comptime_array_index)||b(e,F.__yo_comptime_slice_index)||b(e,F.__yo_comptime_array_index_range)||b(e,F.__yo_comptime_array_index_range_inclusive)||b(e,F.__yo_comptime_slice_index_range)||b(e,F.__yo_comptime_slice_index_range_inclusive)||b(e,F.__yo_comptime_string_index)||b(e,F.__yo_comptime_string_index_range)||b(e,F.__yo_comptime_string_index_range_inclusive)||b(e,F.__yo_comptime_list_index)||b(e,F.__yo_comptime_list_index_range)||b(e,F.__yo_comptime_list_index_range_inclusive))return ck({expr:e,env:t,context:{...n}});if(b(e,F.__yo_type_to_comptime_string,1))return Aw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_are_types_compatible,2))return xw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_are_types_equal,2))return Nw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_type_contains_rc_type,1))return Dw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_type_can_form_rc_cycle,1))return Vw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_type_impls,2))return Mw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_type_get_info,1))return Rw({expr:e,env:t,context:{...n}});if(b(e,F.comptime_eval,1))return Pw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_comptime_string_to_expr,1))return Uw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_type_join_fields,3))return Bw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_type_map_variants,2))return qw({expr:e,env:t,context:{...n}});if(b(e,F.derive_rule,2))return Hw({expr:e,env:t,context:{...n}});if(b(e,F.derive))return jw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_var_print_info,1))return Xw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_var_is_owning_the_rc_value))return Qw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_var_has_other_aliases))return Jw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_process_platform)||b(e,F.__yo_process_arch)||b(e,F.__yo_pointer_size_bits))return kw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_build_executable)||b(e,F.__yo_build_static_library)||b(e,F.__yo_build_shared_library)||b(e,F.__yo_build_test)||b(e,F.__yo_build_run)||b(e,F.__yo_build_step)||b(e,F.__yo_build_step_depend_on)||b(e,F.__yo_build_target_host)||b(e,F.__yo_build_target_parse)||b(e,F.__yo_build_dependency)||b(e,F.__yo_build_path_dependency)||b(e,F.__yo_build_system_library)||b(e,F.__yo_build_link)||b(e,F.__yo_build_link_system_library)||b(e,F.__yo_build_option)||b(e,F.__yo_build_dep_artifact)||b(e,F.__yo_build_module)||b(e,F.__yo_build_module_link)||b(e,F.__yo_build_add_import)||b(e,F.__yo_build_add_cflags)||b(e,F.__yo_build_dep_module)||b(e,F.__yo_build_doc)){for(let r=0;r<e.args.length;r++)e.args[r]=ba({expr:e.args[r],env:t,context:{...n}});return $$({expr:e,env:t,context:{...n}})}else return b(e,B.while)?x_({expr:e,env:t,context:{...n}}):b(e,F.va_start)?Kw({expr:e,env:t,context:{...n}}):wi({expr:e,env:t,context:{...n}})}}}var jF=require("node:fs"),HF=Yn(require("path"));var kN=process.env.YO_SKIP_PRELUDE==="1"||process.env.YO_SKIP_PRELUDE==="true";function wN(e,t){return e.some(n=>(n.type==="single_line_comment"||n.type==="multi_line_comment"||n.type==="doc_line_comment"||n.type==="inner_doc_line_comment"||n.type==="doc_block_comment"||n.type==="inner_doc_block_comment")&&n.value.includes(t))}var Lu=class{constructor({modulePath:t,stdPath:n,loadModule:r,inputString:i,allowPartialModule:o=!1,registerPartialModule:a}){if(this.modulePath=t,this.allowPartialModule=o,this.registerPartialModule=a,!this.modulePath.match(/^file:\/\//))throw new Error(`Invalid file protocol: ${this.modulePath}. Only file:// is supported for now. `);try{if(this.inputString=i??(0,jF.readFileSync)(t.replace(/^file:\/\//,""),"utf-8"),this.parser=new Da({modulePath:t,inputString:this.inputString}),this.program=this.parser.getProgram(),this.tokens=this.parser.getTokens(),!this.allowPartialModule&&this.parser.getParserError())throw this.parser.getParserError();this.evaluateProgram(n,r)}catch(s){throw new Error(`Failed to import module "${t}":
11925
- ${s instanceof Ir||s instanceof oi?s.toString():s instanceof Error?s.message:String(s)}`)}}getProgram(){return this.program}getTokens(){return this.tokens}evaluateProgram(t,n){var c,f;let r=mm({modulePath:this.modulePath,inputString:this.inputString});if(!wN(this.tokens,"@skip_prelude")&&!kN){let _="file://"+HF.default.join(t,"prelude.yo"),{moduleValue:p,moduleError:d}=n(_);if(d)throw d;if(p&&rt(p.type)){r=vt(r);for(let v=0;v<p.type.fields.length;v++){let y=p.type.fields[v],h=p.fields[v],{env:g}=je({env:r,variable:{name:y.label,type:y.type,value:h?[h]:void 0,isCompileTimeOnly:!0,initializedAtToken:((c=y.exprs.labelExpr)==null?void 0:c.token)??y.exprs.expr.token,consumedAtToken:void 0,token:((f=y.exprs.labelExpr)==null?void 0:f.token)??y.exprs.expr.token,isOwningTheRcValue:!1}});r=g}}i$(r)}let o=RE(this.tokens),a=new Map;for(let _ of o.declarations)_.declarationPosition&&a.set(Rr({position:_.declarationPosition,modulePath:_.comment.modulePath}),_.comment.content);let{moduleValue:s,env:l,partialModuleError:u}=Kf({beginExprs:this.program,env:r,context:{isExecuting:!0,expectedType:void 0,SelfType:void 0,loadModule:n.bind(this),stdPath:t,currentModulePath:this.modulePath,docCommentLookup:a},allowPartialModule:this.allowPartialModule,registerPartialModule:this.registerPartialModule});r=l,this.env=r,this.moduleValue=s,this.moduleError=u}getModuleValue(){if(!this.moduleValue)throw new Error("Module value is not set");return this.moduleValue}getModuleError(){return this.parser.getParserError()??this.moduleError}getEnv(){if(!this.env)throw new Error("Evaluator environment is not set");return this.env}};function FN(e){let t=e;for(;;){let n=Iu.join(t,"std");if((0,YF.existsSync)(n))return n;let r=Iu.dirname(t);if(r===t)break;t=r}return Iu.join(__dirname,"../std")}var hl=class{constructor(t){this.modules=new Map;this.dependencies=new Map;this.dependents=new Map;this.loadingModules=new Map;this.allowPartialModule=(t==null?void 0:t.allowPartialModule)??!1,this.stdPath=(t==null?void 0:t.stdPath)??FN(__dirname),this.codeGenratorC=new __,e_(),gm(),Jd(),im(),aE(ba),M$(PC)}getRelativePath(t){let n=t.match(/\/std\/(.+)$/);if(n)return`std/${n[1]}`;let r=t.match(/\/tests\/(.+)$/);return r?`tests/${r[1]}`:null}isWorkspaceModule(t){return!t.includes("/extensions/")&&!t.includes("/.vscode/")}findExtensionDuplicates(t){if(!this.isWorkspaceModule(t))return[];let n=this.getRelativePath(t);if(!n)return[];let r=[];for(let[i]of this.modules)i!==t&&!this.isWorkspaceModule(i)&&this.getRelativePath(i)===n&&r.push(i);if(n.startsWith("std/"))for(let[i]of this.modules)!this.isWorkspaceModule(i)&&(i.endsWith("/std/prelude.yo")||i.endsWith("/prelude.yo"))&&!r.includes(i)&&r.push(i);return r}deleteModuleAndDependents(t){let n=this.getDependentModules(t);for(let r of n)su(r),ou(r),this.clearDependencies(r),rf(r),this.modules.delete(r);su(t),ou(t),this.clearDependencies(t),rf(t),this.modules.delete(t)}addDependency(t,n){this.dependencies.has(t)||this.dependencies.set(t,new Set),this.dependencies.get(t).add(n),this.dependents.has(n)||this.dependents.set(n,new Set),this.dependents.get(n).add(t)}getDependentModules(t){let n=new Set,r=[t];for(;r.length>0;){let i=r.pop(),o=this.dependents.get(i);if(o)for(let a of o)n.has(a)||(n.add(a),r.push(a))}return n}clearDependencies(t){let n=this.dependencies.get(t);if(n)for(let r of n){let i=this.dependents.get(r);i&&i.delete(t)}this.dependencies.delete(t)}resetAllState(){for(let t of this.modules.keys())su(t),ou(t),rf(t);this.modules.clear(),this.dependencies.clear(),this.dependents.clear(),this.loadingModules.clear(),e_(),gm(),Jd(),im()}loadModule(t,n,r){if(!t.match(/^file:\/\//))throw new Error(`Invalid file protocol: ${t}. Only file:// is supported for now. `);r&&this.addDependency(r,t);let i=this.modules.get(t);if(i)return{moduleValue:i.moduleValue,moduleError:i.moduleError};let o=this.loadingModules.get(t);if(o)return{moduleValue:o,moduleError:void 0};let a=this.findExtensionDuplicates(t);for(let f of a)this.deleteModuleAndDependents(f);let s=t,l=new Lu({modulePath:t,stdPath:this.stdPath,loadModule:f=>this.loadModule(f,void 0,s),inputString:n,allowPartialModule:this.allowPartialModule,registerPartialModule:f=>{this.loadingModules.set(t,f)}});this.loadingModules.delete(t);let u=l.getModuleValue(),c=l.getModuleError();return this.modules.set(t,{moduleValue:u,moduleError:c,evaluator:l}),{moduleValue:u,moduleError:c}}deleteModule(t){if(!t.match(/^file:\/\//))throw new Error(`Invalid file protocol: ${t}. Only file:// is supported for now. `);let n=[t];if(this.isWorkspaceModule(t))for(let[i]of this.modules)!this.isWorkspaceModule(i)&&!n.includes(i)&&n.push(i);if(t.endsWith("/std/prelude.yo")||t.endsWith("/prelude.yo"))for(let[i]of this.modules)(i.endsWith("/std/prelude.yo")||i.endsWith("/prelude.yo"))&&i!==t&&!n.includes(i)&&n.push(i);for(let i of n)this.deleteModuleAndDependents(i)}compileModule(t,{emitC:n,debugGc:r,debugParallelism:i,debugAsyncAwait:o,allocator:a,isLibrary:s}={}){let{moduleValue:l,moduleError:u}=this.loadModule(t);if(u)throw u.toString();if(!this.modules.get(t))throw new Error(`Module data not found for ${t}`);let f=[];for(let[,_]of this.modules){let p=_.moduleValue;p.moduleLevelInitExprs&&p.moduleLevelInitExprs.length>0&&f.push(...p.moduleLevelInitExprs)}this.codeGenratorC.compileModule(t,l,{debugGc:r,debugParallelism:i,debugAsyncAwait:o,allocator:a,isLibrary:s,allModuleLevelInitExprs:f.length>0?f:void 0}),n&&console.log(this.codeGenratorC.print())}getGeneratedCode(){return this.codeGenratorC.print()}getExportedFunctionNames(){return this.codeGenratorC.getExportedFunctionNames()}get needsIntelAsmSyntax(){return this.codeGenratorC.needsIntelAsmSyntax}get usesParallelism(){return this.codeGenratorC.usesParallelism}};var D_=require("fs"),vl=Yn(require("path"));var KF={name:"@shd101wyy/yo",displayName:"Yo",version:"0.1.20",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",".github/skills"],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 "**/*.*" ".github/**/*.*"',test:"jest","test:watch":"jest --watch","test:coverage":"jest --coverage",postinstall:"node scripts/print-welcome.js && 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:{markdown_yo:"0.0.4","vscode-languageserver":"^9.0.1","vscode-languageserver-textdocument":"^1.0.12",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 IN=".yo-version";function N_(){return KF.version}function SN(e){let t=vl.resolve(e);for(;;){let n=vl.join(t,IN);if((0,D_.existsSync)(n))return n;let r=vl.dirname(t);if(r===t)return null;t=r}}function AN(e){let t=e.trim();if(!t)throw new Error(`Empty .yo-version file. Specify a concrete version number (e.g., ${N_()}).`);if((t.startsWith("v")||t.startsWith("V"))&&(t=t.slice(1)),t.toLowerCase()==="latest")throw new Error(`Invalid version "latest" in .yo-version.
11925
+ ${s instanceof Ir||s instanceof oi?s.toString():s instanceof Error?s.message:String(s)}`)}}getProgram(){return this.program}getTokens(){return this.tokens}evaluateProgram(t,n){var c,f;let r=mm({modulePath:this.modulePath,inputString:this.inputString});if(!wN(this.tokens,"@skip_prelude")&&!kN){let _="file://"+HF.default.join(t,"prelude.yo"),{moduleValue:p,moduleError:d}=n(_);if(d)throw d;if(p&&rt(p.type)){r=vt(r);for(let v=0;v<p.type.fields.length;v++){let y=p.type.fields[v],h=p.fields[v],{env:g}=je({env:r,variable:{name:y.label,type:y.type,value:h?[h]:void 0,isCompileTimeOnly:!0,initializedAtToken:((c=y.exprs.labelExpr)==null?void 0:c.token)??y.exprs.expr.token,consumedAtToken:void 0,token:((f=y.exprs.labelExpr)==null?void 0:f.token)??y.exprs.expr.token,isOwningTheRcValue:!1}});r=g}}i$(r)}let o=RE(this.tokens),a=new Map;for(let _ of o.declarations)_.declarationPosition&&a.set(Rr({position:_.declarationPosition,modulePath:_.comment.modulePath}),_.comment.content);let{moduleValue:s,env:l,partialModuleError:u}=Kf({beginExprs:this.program,env:r,context:{isExecuting:!0,expectedType:void 0,SelfType:void 0,loadModule:n.bind(this),stdPath:t,currentModulePath:this.modulePath,docCommentLookup:a},allowPartialModule:this.allowPartialModule,registerPartialModule:this.registerPartialModule});r=l,this.env=r,this.moduleValue=s,this.moduleError=u}getModuleValue(){if(!this.moduleValue)throw new Error("Module value is not set");return this.moduleValue}getModuleError(){return this.parser.getParserError()??this.moduleError}getEnv(){if(!this.env)throw new Error("Evaluator environment is not set");return this.env}};function FN(e){let t=e;for(;;){let n=Iu.join(t,"std");if((0,YF.existsSync)(n))return n;let r=Iu.dirname(t);if(r===t)break;t=r}return Iu.join(__dirname,"../std")}var hl=class{constructor(t){this.modules=new Map;this.dependencies=new Map;this.dependents=new Map;this.loadingModules=new Map;this.allowPartialModule=(t==null?void 0:t.allowPartialModule)??!1,this.stdPath=(t==null?void 0:t.stdPath)??FN(__dirname),this.codeGenratorC=new __,e_(),gm(),Jd(),im(),aE(ba),M$(PC)}getRelativePath(t){let n=t.match(/\/std\/(.+)$/);if(n)return`std/${n[1]}`;let r=t.match(/\/tests\/(.+)$/);return r?`tests/${r[1]}`:null}isWorkspaceModule(t){return!t.includes("/extensions/")&&!t.includes("/.vscode/")}findExtensionDuplicates(t){if(!this.isWorkspaceModule(t))return[];let n=this.getRelativePath(t);if(!n)return[];let r=[];for(let[i]of this.modules)i!==t&&!this.isWorkspaceModule(i)&&this.getRelativePath(i)===n&&r.push(i);if(n.startsWith("std/"))for(let[i]of this.modules)!this.isWorkspaceModule(i)&&(i.endsWith("/std/prelude.yo")||i.endsWith("/prelude.yo"))&&!r.includes(i)&&r.push(i);return r}deleteModuleAndDependents(t){let n=this.getDependentModules(t);for(let r of n)su(r),ou(r),this.clearDependencies(r),rf(r),this.modules.delete(r);su(t),ou(t),this.clearDependencies(t),rf(t),this.modules.delete(t)}addDependency(t,n){this.dependencies.has(t)||this.dependencies.set(t,new Set),this.dependencies.get(t).add(n),this.dependents.has(n)||this.dependents.set(n,new Set),this.dependents.get(n).add(t)}getDependentModules(t){let n=new Set,r=[t];for(;r.length>0;){let i=r.pop(),o=this.dependents.get(i);if(o)for(let a of o)n.has(a)||(n.add(a),r.push(a))}return n}clearDependencies(t){let n=this.dependencies.get(t);if(n)for(let r of n){let i=this.dependents.get(r);i&&i.delete(t)}this.dependencies.delete(t)}resetAllState(){for(let t of this.modules.keys())su(t),ou(t),rf(t);this.modules.clear(),this.dependencies.clear(),this.dependents.clear(),this.loadingModules.clear(),e_(),gm(),Jd(),im()}loadModule(t,n,r){if(!t.match(/^file:\/\//))throw new Error(`Invalid file protocol: ${t}. Only file:// is supported for now. `);r&&this.addDependency(r,t);let i=this.modules.get(t);if(i)return{moduleValue:i.moduleValue,moduleError:i.moduleError};let o=this.loadingModules.get(t);if(o)return{moduleValue:o,moduleError:void 0};let a=this.findExtensionDuplicates(t);for(let f of a)this.deleteModuleAndDependents(f);let s=t,l=new Lu({modulePath:t,stdPath:this.stdPath,loadModule:f=>this.loadModule(f,void 0,s),inputString:n,allowPartialModule:this.allowPartialModule,registerPartialModule:f=>{this.loadingModules.set(t,f)}});this.loadingModules.delete(t);let u=l.getModuleValue(),c=l.getModuleError();return this.modules.set(t,{moduleValue:u,moduleError:c,evaluator:l}),{moduleValue:u,moduleError:c}}deleteModule(t){if(!t.match(/^file:\/\//))throw new Error(`Invalid file protocol: ${t}. Only file:// is supported for now. `);let n=[t];if(this.isWorkspaceModule(t))for(let[i]of this.modules)!this.isWorkspaceModule(i)&&!n.includes(i)&&n.push(i);if(t.endsWith("/std/prelude.yo")||t.endsWith("/prelude.yo"))for(let[i]of this.modules)(i.endsWith("/std/prelude.yo")||i.endsWith("/prelude.yo"))&&i!==t&&!n.includes(i)&&n.push(i);for(let i of n)this.deleteModuleAndDependents(i)}compileModule(t,{emitC:n,debugGc:r,debugParallelism:i,debugAsyncAwait:o,allocator:a,isLibrary:s}={}){let{moduleValue:l,moduleError:u}=this.loadModule(t);if(u)throw u.toString();if(!this.modules.get(t))throw new Error(`Module data not found for ${t}`);let f=[];for(let[,_]of this.modules){let p=_.moduleValue;p.moduleLevelInitExprs&&p.moduleLevelInitExprs.length>0&&f.push(...p.moduleLevelInitExprs)}this.codeGenratorC.compileModule(t,l,{debugGc:r,debugParallelism:i,debugAsyncAwait:o,allocator:a,isLibrary:s,allModuleLevelInitExprs:f.length>0?f:void 0}),n&&console.log(this.codeGenratorC.print())}getGeneratedCode(){return this.codeGenratorC.print()}getExportedFunctionNames(){return this.codeGenratorC.getExportedFunctionNames()}get needsIntelAsmSyntax(){return this.codeGenratorC.needsIntelAsmSyntax}get usesParallelism(){return this.codeGenratorC.usesParallelism}};var D_=require("fs"),vl=Yn(require("path"));var KF={name:"@shd101wyy/yo",displayName:"Yo",version:"0.1.21",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",".github/skills"],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 "**/*.*" ".github/**/*.*"',test:"jest","test:watch":"jest --watch","test:coverage":"jest --coverage",postinstall:"node scripts/print-welcome.js && 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:{markdown_yo:"0.0.4","vscode-languageserver":"^9.0.1","vscode-languageserver-textdocument":"^1.0.12",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 IN=".yo-version";function N_(){return KF.version}function SN(e){let t=vl.resolve(e);for(;;){let n=vl.join(t,IN);if((0,D_.existsSync)(n))return n;let r=vl.dirname(t);if(r===t)return null;t=r}}function AN(e){let t=e.trim();if(!t)throw new Error(`Empty .yo-version file. Specify a concrete version number (e.g., ${N_()}).`);if((t.startsWith("v")||t.startsWith("V"))&&(t=t.slice(1)),t.toLowerCase()==="latest")throw new Error(`Invalid version "latest" in .yo-version.
11926
11926
  Specify a concrete version number (e.g., ${N_()}).`);if(!/^\d+\.\d+\.\d+(-[a-zA-Z0-9.]+)?(\+[a-zA-Z0-9.]+)?$/.test(t))throw new Error(`Invalid version "${t}" in .yo-version.
11927
11927
  Expected a semver version like "0.1.12" or "v0.1.12".`);return t}function XF(e){let t=SN(e);if(!t)return null;let n=(0,D_.readFileSync)(t,"utf-8");return AN(n)}var xN=require("child_process"),vi=Yn(require("fs"));var NN=Yn(require("os")),V_=Yn(require("path"));function QF(e){let t=a_(e);if(!vi.existsSync(t)||!vi.existsSync(V_.join(t,"package.json")))return!1;try{let n=JSON.parse(vi.readFileSync(V_.join(t,"package.json"),"utf-8"));if(n.dependencies&&Object.keys(n.dependencies).length>0&&!vi.existsSync(V_.join(t,"node_modules")))return!1}catch{return!1}return!0}function io(e,t,n){return e.find(r=>r.position.row===t&&n>=r.position.column&&n<r.position.column+r.value.length&&r.type!=="whitespace"&&r.type!=="single_line_comment"&&r.type!=="multi_line_comment")||null}function DN(e,t,n){let r=i=>{if(Q(i))i.token.value===t.value&&i.token.position.row===t.position.row&&i.token.position.column===t.position.column&&n.push(i);else if(S(i)){let o=i;r(o.func);for(let a of o.args)r(a)}};for(let i of e)r(i)}function M_(e,t,n){let r=[];return DN(e,t,r),r.length===0?null:r.length===1?r[0]:(r.sort((i,o)=>{let a=i.$?1:0,s=o.$?1:0;if(a!==s)return s-a;let l=i.token.position.row>=5,u=o.token.position.row>=5;if(l!==u)return u?-1:1;let c=i.token.position.row<=n,f=o.token.position.row<=n;return c&&f?o.token.position.row-i.token.position.row:c!==f?c?-1:1:0}),r[0]??null)}function cy(e,t){let n=e.initializedAtToken,r=t.initializedAtToken;return!n&&!r?0:n?r?n.position.row!==r.position.row?r.position.row-n.position.row:r.position.column-n.position.column:-1:1}function VN(e,t){let n=e.initializedAtToken;return!n||n.modulePath!==t.modulePath?!1:n.position.row<t.position.row?!0:n.position.row===t.position.row&&n.position.column<=t.position.column}function jo(e,t){let n=e.filter(o=>{let a=o.initializedAtToken;return a!==void 0&&a.modulePath===t.modulePath&&a.position.row===t.position.row&&a.position.column===t.position.column});if(n.length>0)return[...n].sort(cy)[0];let r=e.filter(o=>VN(o,t));if(r.length>0)return[...r].sort(cy)[0];let i=e.filter(o=>{var a;return((a=o.initializedAtToken)==null?void 0:a.modulePath)===t.modulePath});return i.length>0?[...i].sort(cy)[0]:e[e.length-1]}function ni(e){return e.startsWith("file://")?`file://${e.replace("file://","")}`:`file://${e}`}function ri(e){return e.startsWith("file://")?e:`file://${e}`}var R_=class{constructor(t){this.moduleManagerStdPath=null;this.evaluatedBuildProjects=new Map;this.lastAnalyzedTextByUri=new Map;this.analyzeGenerationByUri=new Map;this.lastGoodModules=new Map;this.moduleManager=new hl({allowPartialModule:!0,stdPath:t??void 0}),this.moduleManagerStdPath=this.moduleManager.stdPath}getStdPath(){return this.moduleManagerStdPath}attachToDocuments(t,n){t.onDidChangeContent(r=>{this.analyzeDocument(r.document,n)}),t.onDidClose(r=>{let i=r.document.uri,o=ri(i);this.moduleManager.deleteModule(o),this.lastAnalyzedTextByUri.delete(i),this.analyzeGenerationByUri.delete(i),this.lastGoodModules.delete(o)})}analyzeDocument(t,n){let r=t.uri,i=t.getText();if(this.lastAnalyzedTextByUri.get(r)===i)return;this.lastAnalyzedTextByUri.set(r,i);let o=(this.analyzeGenerationByUri.get(r)??0)+1;this.analyzeGenerationByUri.set(r,o),this.ensureStdPathForUri(r),this.ensureBuildImportsResolved(r);let a=ri(r),s=this.moduleManager.modules.get(a);if(s)try{if(s.evaluator.getProgram().length>0){let u=YE();this.lastGoodModules.set(a,{module:s,traitFieldSnapshots:u})}}catch{}this.moduleManager.deleteModule(a),this.moduleManager.loadModule(a,i),this.analyzeGenerationByUri.get(r)===o&&n(r)}getModule(t){let n=ri(t);return this.moduleManager.modules.get(n)}getModuleForCompletion(t){let n=ri(t),r=this.moduleManager.modules.get(n);return r||this.getLastGoodModule(t)}getLastGoodModule(t){let n=ri(t),r=this.lastGoodModules.get(n);if(r){for(let[i,o]of r.traitFieldSnapshots)i.fields=o;return r.module}}getModuleManager(){return this.moduleManager}ensureStdPathForUri(t){let n=t.replace("file://",""),r=this.findStdPath(n);r&&this.moduleManagerStdPath!==r&&(this.moduleManager.resetAllState(),this.moduleManager.stdPath=r,this.moduleManagerStdPath=r,this.evaluatedBuildProjects.clear(),this.lastGoodModules.clear(),T$())}findStdPath(t){let n=ii.dirname(t),r=XF(n);if(r&&r!==N_()&&QF(r)){let o=ii.join(a_(r),"std");if((0,Ho.existsSync)(o))return o}let i=n;for(;;){let o=ii.join(i,"std");if((0,Ho.existsSync)(o))return o;let a=ii.dirname(i);if(a===i)return null;i=a}}findBuildYoForUri(t){let n=t.replace("file://",""),r=ii.dirname(n),i=ii.parse(r).root;for(;r!==i;){let o=ii.join(r,"build.yo");if((0,Ho.existsSync)(o))return{buildFile:o,projectDir:r};r=ii.dirname(r)}return null}ensureBuildImportsResolved(t){let n=this.findBuildYoForUri(t);if(!n||this.evaluatedBuildProjects.has(n.projectDir))return;this.evaluatedBuildProjects.set(n.projectDir,!0);let r=new hl;try{$m();let i=`file://${(0,Ho.realpathSync)(n.buildFile)}`;r.loadModule(i);let o=tl();for(let a of o.artifacts)for(let s of a.importedModules){let l=s.dependencyName;if(l){let u=this.findDependencyDir(o,n.projectDir,l);u&&this.resolveDepModuleRoot(u,s)}else{let u=o.modules.find(c=>c.name===s.moduleName);u&&Em(s.importName,ii.resolve(n.projectDir,u.root))}}$m()}catch{}finally{r.resetAllState()}}findDependencyDir(t,n,r){let i=t.pathDependencies.find(o=>o.name===r);if(i){let o=ii.resolve(n,i.path);if((0,Ho.existsSync)(o))return o}try{return s_(n,r)}catch{return}}resolveDepModuleRoot(t,n){let r=ii.join(t,"build.yo");if(!(0,Ho.existsSync)(r))return;let i=bm(new fu),o=new hl;try{o.loadModule(`file://${(0,Ho.realpathSync)(r)}`);let a=tl(),s=n.moduleName===""?a.modules[0]:a.modules.find(l=>l.name===n.moduleName);s&&Em(n.importName,ii.resolve(t,s.root))}catch{}finally{o.resetAllState(),bm(i)}}};var Su=Yn(Na());function JF(e,t,n){let r=ri(e),i=t.getModuleManager().modules.get(r);if(!i)return[];let o=i.moduleError;return o?MN(o,n):[]}function MN(e,t){let n=[];if(e instanceof Ir)for(let{token:r,errorMessage:i}of e.tokenAndErrorList){let{row:o,column:a}=r.position;n.push({range:{start:{line:o,character:a},end:{line:o,character:a+r.value.length}},message:i,severity:Su.DiagnosticSeverity.Error,source:"yo"})}else e instanceof oi?t?n.push(RN(e,t)):n.push({range:{start:{line:0,character:0},end:{line:0,character:1}},message:e.message,severity:Su.DiagnosticSeverity.Error,source:"yo"}):n.push({range:{start:{line:0,character:0},end:{line:0,character:1}},message:String(e),severity:Su.DiagnosticSeverity.Error,source:"yo"});return n}function RN(e,t){let{characterIndex:n,message:r}=e,i=0,o=0;for(let a=0;a<n&&a<t.length;a++)t[a]===`
11928
11928
  `?(i++,o=0):o++;return{range:{start:{line:i,character:o},end:{line:i,character:o+1}},message:r,severity:Su.DiagnosticSeverity.Error,source:"yo"}}var ZF=Yn(Na());function eL(e,t,n,r){var C,w,I,L,x;let i=r.getModule(e),o=r.getLastGoodModule(e),a=i??o;if(!a)return null;let s=i??o;if(!s)return null;let l=s.evaluator.getTokens(),u=io(l,t,n);if(!u)return null;let c=[i,o].filter(V=>V!=null),f=null;for(let V of c){let M=V.evaluator.getProgram();if(f=M_(M,u,t),f&&Q(f)||u.type==="identifier"&&(f=ON(M,u),f&&Q(f)))break;f=null}if(!f&&u.type==="identifier"&&o){let V=o.evaluator.getProgram();f=PN(V,u.value,u)}if(!f||!Q(f))return null;let _=a.evaluator.getProgram(),p=f,d=A(p);mi(d)&&(d=`(${d})`);let v=(C=p.$)==null?void 0:C.type,y=(w=p.$)==null?void 0:w.value,h=!1,g=!1,T=!1,E;if((I=p.$)!=null&&I.env){let V=ve(p.$.env,p.token.value),M=V&&V.length>0?jo(V,u):void 0;g=M!==void 0,M&&(v=M.type,y=(L=M.value)==null?void 0:L[0],T=M.isCompileTimeOnly,h=!M.initializedAtToken,E=M.docComment)}if(!v){let V=UN(_,p);V&&(v=V.type,y=V.value,E=V.docComment,g=!0,T=!0)}T&&(d=`comptime(${d})`);let $="```\n"+d;if(v){let V=O(v);$+=`
@@ -11932,5 +11932,5 @@ undefined`;else{let V=bt(y);V!=="<runtime value>"&&($+=`
11932
11932
 
11933
11933
  ---
11934
11934
 
11935
- `+k),{contents:{kind:ZF.MarkupKind.Markdown,value:$},range:{start:{line:u.position.row,character:u.position.column},end:{line:u.position.row,character:u.position.column+u.value.length}}}}function ON(e,t){var o;let n=null,r=-1,i=a=>{var s;if(Q(a))(s=a.$)!=null&&s.env&&a.token.position.row<t.position.row&&a.token.position.row>r&&(n=a.$.env,r=a.token.position.row);else if(S(a)){let l=a;i(l.func);for(let u of l.args)i(u)}};for(let a of e)i(a);if(!n)return null;try{let a=ve(n,t.value);if(!a||a.length===0)return null;let s=a.filter(u=>{if(u.initializedAtToken){let c=u.initializedAtToken.position.row;return c>2&&c<t.position.row}return!1});if(s.length===0)return null;let l=s[s.length-1];return l!=null&&l.type?{tag:"Atom",token:t,$:{type:l.type,value:(o=l.value)==null?void 0:o[0],env:n,pathCollection:[]}}:null}catch{return null}}function PN(e,t,n){var a;let r=null,i=-1,o=s=>{var l;if(Q(s))(l=s.$)!=null&&l.env&&s.$.env.frames.length>i&&(r=s.$.env,i=s.$.env.frames.length);else if(S(s)){let u=s;o(u.func);for(let c of u.args)o(c)}};for(let s of e)o(s);if(!r)return null;try{let s=ve(r,t);if(!s||s.length===0)return null;let l=jo(s,n)??s[s.length-1];return l!=null&&l.type?{tag:"Atom",token:{value:t,type:"identifier",position:n.position,modulePath:n.modulePath},$:{type:l.type,value:(a=l.value)==null?void 0:a[0],env:r,pathCollection:[],docComment:l.docComment}}:null}catch{return null}}function UN(e,t){var r;function n(i){if(!S(i))return null;let o=i;if(b(o,":")&&o.args.length>=2&&o.args[0]===t)return o;let a=n(o.func);if(a)return a;for(let s of o.args)if(a=n(s),a)return a;return null}for(let i of e){let o=n(i);if(o){let a=o.args[1];if((r=a==null?void 0:a.$)!=null&&r.type){let s=t.token.value,l,u=fy(i,o);if(u){let c=u.receiverType;if(c!=null&&c.trait){for(let f of c.trait.fields)if(f.label===s&&f.docComment){l=f.docComment;break}}}return{type:a.$.type,value:a.$.value,docComment:l}}}}return null}function fy(e,t){var i,o;if(!S(e))return null;let n=e;if(b(n,"impl")){for(let a of n.args)if(a===t){let s=(i=n.$)==null?void 0:i.type;if(s&&_t(s)&&s.receiverType)return{receiverType:s.receiverType};let l=n.args[0];if((o=l==null?void 0:l.$)!=null&&o.value&&X(l.$.value))return{receiverType:l.$.value.value};break}}let r=fy(n.func,t);if(r)return r;for(let a of n.args)if(r=fy(a,t),r)return r;return null}function zN(e,t){var i,o;let n=t.token.value;function r(a){if(!S(a))return null;let s=a;if(b(s,".")&&s.args.length===2&&s.args[1]===t)return s;let l=r(s.func);if(l)return l;for(let u of s.args)if(l=r(u),l)return l;return null}for(let a of e){let s=r(a);if(s){let l=s.args[0],u=(i=l==null?void 0:l.$)==null?void 0:i.type;if(u&&Lt(u)&&((o=l==null?void 0:l.$)!=null&&o.value)&&X(l.$.value)&&(u=l.$.value.value),u){if(Oe(u)){let c=u.fields.find(f=>f.label===n);if(c!=null&&c.docComment)return c.docComment}if(u.trait){for(let c of u.trait.fields)if(c.label===n&&c.docComment)return c.docComment}}}}}var Ln=Yn(Na()),z_=Yn(require("node:fs")),Tl=Yn(require("node:path"));var _y=null;function BN(){if(_y)return _y;let e=[];for(let t of Object.keys(B))e.push(...B[t]);for(let t of Object.keys(F))e.push(...F[t]);for(let t of Object.keys(Sr))e.push(Sr[t]);return _y=e,e}function iL(e,t,n,r,i){let o=r.substring(0,n),a=qN(o,e,i);if(a.length>0)return a;let s=i.getModule(e);if(!s)return U_("");if(o.endsWith(".")){let c=o.slice(0,-1).trimEnd();if(c.length===0||c.endsWith("=")||c.endsWith("(")||c.endsWith(",")||c.endsWith("return")||c.endsWith("{")||c.endsWith(";")){let d=i.getLastGoodModule(e)??s,v=jN(d,t,n);if(v.length>0)return v}let _=nL(s,t,n,r);if(_.length>0)return _;let p=i.getLastGoodModule(e);if(p&&p!==s){let d=nL(p,t,n,r);if(d.length>0)return d}if(c){let d=rL(s,c,t,n);if(d.length>0)return d;if(p&&p!==s){let v=rL(p,c,t,n);if(v.length>0)return v}}return _}if(s.moduleError){let c=tL(r,n),f=py(s,t,n,c);if(f.length>0)return f;let _=i.getLastGoodModule(e);if(_){let p=py(_,t,n,c);if(p.length>0)return p}return U_(c)}let u=tL(r,n);return py(s,t,n,u)}function tL(e,t){let n=t;for(;n>0&&/[a-zA-Z0-9_]/.test(e[n-1]);)n--;return e.substring(n,t)}function U_(e){let t=[],n=e.toLowerCase();for(let r of BN())r.startsWith("___")||r.startsWith("__yo_")||r.toLowerCase().includes(n)&&t.push({label:r,kind:Ln.CompletionItemKind.Keyword,sortText:r.toLowerCase().startsWith(n)?`0_${r}`:`1_${r}`});return t}function qN(e,t,n){let r=e.match(/import\s+"([^"]*?)([^"/]*)$/);if(!r)return[];let i=r[1]+r[2],o=r[2],a;if(i.startsWith("std/")){let s=n.getStdPath();if(!s)return[];let l=i.slice(4),u=l.lastIndexOf("/");u>=0?a=Tl.join(s,l.slice(0,u)):a=s}else if(i.startsWith("./")||i.startsWith("../")){let s=t.startsWith("file://")?t.slice(7):t,l=Tl.dirname(s),u=i,c=u.lastIndexOf("/");c>=0?a=Tl.resolve(l,u.slice(0,c)):a=l}else return[];try{if(!z_.existsSync(a))return[];let s=z_.readdirSync(a,{withFileTypes:!0}),l=[],u=o.toLowerCase();for(let c of s){let f=c.name;if(!f.startsWith(".")){if(c.isDirectory()){if(!f.toLowerCase().startsWith(u))continue;l.push({label:f,kind:Ln.CompletionItemKind.Folder,sortText:`0_${f}`})}else if(f.endsWith(".yo")){let _=f.slice(0,-3);if(!_.toLowerCase().startsWith(u)||f==="index.yo")continue;l.push({label:_,kind:Ln.CompletionItemKind.File,sortText:`1_${_}`})}}}return l}catch{return[]}}function py(e,t,n,r){var a,s,l,u,c;let i=[],o=r.toLowerCase();try{let f=e.evaluator.getProgram(),_=new Map,p=null,d=-1,v=y=>{var h;if(Q(y)){if((h=y.$)!=null&&h.env&&y.$.env.frames.length>d){let g=y.token.position.row,T=y.token.position.column;(g<t||g===t&&T<=n)&&(p=y.$.env,d=y.$.env.frames.length)}if(y.token.type==="identifier"){let g=y.token.position.row,T=y.token.position.column;if(!(g<t||g===t&&T<n))return;let $=y.token.value;$.toLowerCase().includes(o)&&(_.has($)||_.set($,[]),_.get($).push(y))}}else if(S(y)){let g=y;v(g.func);for(let T of g.args)v(T)}};for(let y of f)v(y);p&&GN(p,o,_);for(let[y,h]of _){if(y.startsWith("___")||y.startsWith("__yo_"))continue;h.sort((C,w)=>{let I=C.token.position.row<t,L=w.token.position.row<t;if(I&&L)return w.token.position.row-C.token.position.row;if(I!==L)return L?1:-1;let x=C.$?1:0;return(w.$?1:0)-x});let g=h[0],T=_e((a=g.$)==null?void 0:a.type)?Ln.CompletionItemKind.Function:Ln.CompletionItemKind.Variable,E="";if((s=g.$)!=null&&s.type)try{E=O(g.$.type)}catch{}let $;if((l=g.$)!=null&&l.env)try{let C=ve(g.$.env,y);if(C&&C.length>0){let w=jo(C,{position:{row:t,column:n,character:n},modulePath:g.token.modulePath});$=w==null?void 0:w.docComment}}catch{}$||($=(u=g.$)==null?void 0:u.docComment);let k={label:y,kind:T,detail:E||void 0,sortText:y.toLowerCase().startsWith(o)?`0_${y}`:`1_${y}`};if($)k.documentation={kind:Ln.MarkupKind.Markdown,value:$};else if((c=g.$)!=null&&c.value)try{k.documentation=`Value: ${bt(g.$.value)}`}catch{}i.push(k)}i.push(...U_(r))}catch{return U_(r)}return i}function GN(e,t,n){var i;let r=new Set(n.keys());for(let o of e.frames)for(let a of o.variables){let s=a.name;if(r.has(s)||s.startsWith("___")||s.startsWith("__yo_")||s.startsWith("_")&&s.length>1&&s[1]!=="_"||!s.toLowerCase().includes(t))continue;r.add(s);let l={token:{type:"identifier",value:s,position:{row:0,column:0,character:0}},$:{type:a.type,value:(i=a.value)==null?void 0:i[0],env:e,docComment:a.docComment}};n.set(s,[l])}}function nL(e,t,n,r){var a;let i=[],o=n-1;try{let s=e.evaluator.getTokens(),l=e.evaluator.getProgram(),u=s.find(g=>{let T=g.position.column+g.value.length;return g.position.row===t&&g.type!=="whitespace"&&g.type!=="single_line_comment"&&g.type!=="multi_line_comment"&&T===o});if(u&&r.substring(u.position.column,o)!==u.value&&(u=void 0),!u){let g=r.substring(0,o).trim();if(g&&/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(g)){let T=s.filter(E=>E.value===g&&E.type==="identifier"&&E.position.row<t);T.length>0&&(T.sort((E,$)=>$.position.row-E.position.row),u=T[0])}if(!u)return i}let c=null,f=g=>{if(Q(g)){if(g.token.position.row===u.position.row&&g.token.position.column===u.position.column&&g.token.value===u.value)return c=g,!0}else if(S(g)){let T=g;if(f(T.func))return!0;for(let E of T.args)if(f(E))return!0}return!1};for(let g of l)if(f(g))break;if(!c&&u.type==="identifier")for(let g of l){let T=my(g,u.value,t);if(T){c=T;break}}if(!c&&u.value===")"&&u.type===")"){let g=null,T=1/0,E=k=>{var C;return(C=k.$)!=null&&C.type?!!(_t(k.$.type)||Lt(k.$.type)&&k.$.value&&X(k.$.value)&&_t(k.$.value.value)):!1},$=k=>{var C,w,I,L;if(S(k)){let x=k,V=(w=(C=x.func.token)==null?void 0:C.position)==null?void 0:w.row,M=((L=(I=x.func.token)==null?void 0:I.position)==null?void 0:L.column)??1/0;V===t&&M<o&&E(x)&&M<T&&(g=x,T=M),$(x.func);for(let q of x.args)$(q)}};for(let k of l)$(k);g&&(c=g)}let _={position:{row:t,column:o,character:o},modulePath:u.modulePath},p=YN(c,u,_,l);if(!p)return i;let d=p,v=p;for(;et(v)||hr(v);)et(v)?v=v.childType:hr(v)&&(v=v.fields[0].type);let y=[];if(oL(y,v),c&&Q(c)){let g=(a=c.$)==null?void 0:a.env;g&&aL(y,g,v,d)}else v.trait&&KN(y,v);let h=new Set;for(let g of y){if(h.has(g.name)||g.name.startsWith("___")||g.name.startsWith("__yo_"))continue;h.add(g.name);let T={label:g.name,kind:g.kind,detail:g.detail,documentation:g.documentation,sortText:`0_${g.name}`};g.insertText&&(T.insertText=g.insertText,T.insertTextFormat=g.insertTextFormat),i.push(T)}}catch{}return i}function rL(e,t,n,r){var o;let i=[];try{let a=e.evaluator.getProgram(),s=null,l=-1,u=-1,c=-1,f=C=>{var w;if(Q(C)){if((w=C.$)!=null&&w.env){let I=C.token.position.row,L=C.token.position.column;if(!(I<n||I===n&&L<=r))return;let V=C.$.env.frames.length;(V>l||V===l&&(I>u||I===u&&L>c))&&(s=C.$.env,l=V,u=I,c=L)}}else if(S(C)){let I=C;f(I.func);for(let L of I.args)f(L)}};for(let C of a)f(C);if(!s)return i;let _=s,p=t.match(/\(\s*([a-zA-Z_][a-zA-Z0-9_]*)\s*<:\s*([A-Za-z_][a-zA-Z0-9_]*)(?:\s*\(([^()]*(?:\([^()]*\))*[^()]*)\))?\s*\)\s*$/),d=t.match(/([A-Z][a-zA-Z0-9_]*)\s*\(([^()]*(?:\([^()]*\))*[^()]*)\)\s*$/),v=t.match(/([a-zA-Z_][a-zA-Z0-9_]*)$/),y=(p==null?void 0:p[2])??(d==null?void 0:d[1])??(v==null?void 0:v[1]);if(!y)return i;let h=ve(_,y);if(!h||h.length===0)return i;let g=jo(h,{position:{row:n,column:r,character:r},modulePath:_.modulePath})??h[h.length-1];if(!g)return i;let T=null;if((d||p)&&(T=WN(a,y)),!T&&((o=g.value)!=null&&o[0])&&X(g.value[0])&&(T=g.value[0].value),T||(T=P_(g.type,g.value)),!T)return i;let E=T;for(;et(E)||hr(E);)et(E)?E=E.childType:hr(E)&&(E=E.fields[0].type);let $=[];oL($,E),aL($,s,E,T);let k=new Set;for(let C of $){if(k.has(C.name)||C.name.startsWith("___")||C.name.startsWith("__yo_"))continue;k.add(C.name);let w={label:C.name,kind:C.kind,detail:C.detail,documentation:C.documentation,sortText:`0_${C.name}`};C.insertText&&(w.insertText=C.insertText,w.insertTextFormat=C.insertTextFormat),i.push(w)}}catch{}return i}function WN(e,t){let n=null,r=i=>{var o;if(!n&&S(i)){let a=i;if(Q(a.func)&&a.func.token.value===t&&((o=a.$)!=null&&o.type)){if(Lt(a.$.type)&&a.$.value&&X(a.$.value)){n=a.$.value.value;return}n=a.$.type;return}r(a.func);for(let s of a.args)r(s)}};for(let i of e)r(i);return n}function oL(e,t){if(ft(t))e.push({name:"len",detail:"comptime(usize)",documentation:"Get the compile-time known length of the array",kind:Ln.CompletionItemKind.Property});else if(Vt(t))e.push({name:"len",detail:"usize",documentation:"Get the runtime length of the slice",kind:Ln.CompletionItemKind.Property});else if(Oe(t))for(let n of t.fields)e.push({name:n.label,detail:O(n.type),documentation:n.docComment||`Field: ${n.label} : ${O(n.type)}`,kind:Ln.CompletionItemKind.Field});else if(Ye(t))for(let n of t.variants){let r={name:n.name,detail:n.fields?`(${n.fields.map(i=>O(i.type)).join(", ")})`:"()",documentation:`Variant: ${n.name}`,kind:Ln.CompletionItemKind.EnumMember};if(n.fields&&n.fields.length>0){let i=n.fields.map((o,a)=>`\${${a+1}:${o.label||O(o.type)}}`).join(", ");r.insertText=`${n.name}(${i})`,r.insertTextFormat=Ln.InsertTextFormat.Snippet}e.push(r)}else if(Ht(t))for(let n of t.fields)e.push({name:n.label,detail:O(n.type),documentation:`Field: ${n.label} : ${O(n.type)}`,kind:Ln.CompletionItemKind.Field});else if(rt(t))for(let n of t.fields){if(!n.label||n.label.startsWith("___")||n.label.startsWith("__yo_"))continue;let r=_e(n.type)?Ln.CompletionItemKind.Function:rt(n.type)?Ln.CompletionItemKind.Module:Lt(n.type)?Ln.CompletionItemKind.Class:Ln.CompletionItemKind.Field;try{e.push({name:n.label,detail:O(n.type),documentation:n.docComment||`${n.label}`,kind:r})}catch{e.push({name:n.label,detail:"",documentation:n.docComment||`${n.label}`,kind:r})}}else if(_t(t))for(let n of t.fields){if(!n.label||n.label.startsWith("___")||n.label.startsWith("__yo_"))continue;let r=_e(n.type)?Ln.CompletionItemKind.Method:rt(n.type)?Ln.CompletionItemKind.Module:Lt(n.type)?Ln.CompletionItemKind.Class:Ln.CompletionItemKind.Property,i=_e(n.type)?yy(n.label,n.type):void 0;try{e.push({name:n.label,detail:O(n.type),documentation:n.docComment||(_e(n.type)?`Trait method: ${n.label}`:`Trait member: ${n.label}`),kind:r,...i})}catch{e.push({name:n.label,detail:"",documentation:n.docComment||(_e(n.type)?`Trait method: ${n.label}`:`Trait member: ${n.label}`),kind:r,...i})}}}function jN(e,t,n){let r=[];try{let i=e.evaluator.getProgram(),o=HN(i,t);if(o&&Ye(o))for(let a of o.variants){let s=a.fields?`(${a.fields.map(u=>O(u.type)).join(", ")})`:"",l={label:`.${a.name}`,kind:Ln.CompletionItemKind.EnumMember,detail:s,documentation:`Variant: ${a.name}`,sortText:`0_${a.name}`};if(a.fields&&a.fields.length>0){let u=a.fields.map((c,f)=>`\${${f+1}:${c.label||O(c.type)}}`).join(", ");l.insertText=`${a.name}(${u})`,l.insertTextFormat=Ln.InsertTextFormat.Snippet}else l.insertText=a.name;r.push(l)}}catch{}return r}function HN(e,t){for(let n of e){let r=dy(n,t);if(r)return r}return null}function dy(e,t){var i,o,a,s,l,u;if(!S(e))return null;let n=e;if(Q(n.func)&&n.func.token.value==="="&&n.args.length>=2){let c=n.args[0],f=n.args[1];if(((Q(f)?f.token.position.row:S(f)?((o=(i=f.token)==null?void 0:i.position)==null?void 0:o.row)??-1:-1)===t||O_(c,t))&&S(c)){let p=c;if(Q(p.func)&&p.func.token.value===":"&&p.args.length>=2){let d=p.args[1];if((a=d.$)!=null&&a.value&&X(d.$.value))return d.$.value.value;if((s=d.$)!=null&&s.type)return d.$.type}}}if(Q(n.func)&&n.func.token.value==="match"&&n.args.length>=1)for(let c=1;c<n.args.length;c++){let f=n.args[c];if(O_(f,t)){let _=n.args[0];if((l=_.$)!=null&&l.type)return _.$.type}}if(Q(n.func)&&n.func.token.value==="cond"){for(let c of n.args)if(O_(c,t)&&(u=c.$)!=null&&u.type&&Ye(c.$.type))return c.$.type}let r=dy(n.func,t);if(r)return r;for(let c of n.args)if(r=dy(c,t),r)return r;return null}function O_(e,t){var n,r;if(Q(e))return e.token.position.row===t;if(S(e)){let i=e;if(((r=(n=i.token)==null?void 0:n.position)==null?void 0:r.row)===t||Q(i.func)&&i.func.token.position.row===t)return!0;for(let o of i.args)if(O_(o,t))return!0}return!1}function my(e,t,n){var r;if(Q(e)){if(e.token.type==="identifier"&&e.token.value===t&&((r=e.$)!=null&&r.type)&&e.token.position.row<n)return e}else if(S(e)){let i=e,o=my(i.func,t,n);if(o)return o;for(let a of i.args){let s=my(a,t,n);if(s)return s}}return null}function P_(e,t){return Lt(e)&&t&&t[0]&&X(t[0])?t[0].value:e}function YN(e,t,n,r){var s,l,u,c;if(e){if(Q(e)){let f=e;if((s=f.$)!=null&&s.type){if(Lt(f.$.type)){if(f.$.value&&X(f.$.value))return f.$.value.value;if((l=f.$)!=null&&l.env)try{let _=ve(f.$.env,f.token.value);if(_&&_.length>0){let p=jo(_,n)??_[_.length-1];if(p)return P_(p.type,p.value)}}catch{}}return f.$.type}if((u=f.$)!=null&&u.env)try{let _=ve(f.$.env,f.token.value);if(_&&_.length>0){let p=jo(_,n)??_[_.length-1];if(p)return P_(p.type,p.value)}}catch{}}else if(S(e)){let f=e;if((c=f.$)!=null&&c.type)return Lt(f.$.type)&&f.$.value&&X(f.$.value)?f.$.value.value:f.$.type}}if(t.type!=="identifier")return null;let i=null,o=-1,a=f=>{var _;if(Q(f))(_=f.$)!=null&&_.env&&f.token.position.row<n.position.row&&f.token.position.row>o&&(i=f.$.env,o=f.token.position.row);else if(S(f)){let p=f;a(p.func);for(let d of p.args)a(d)}};for(let f of r)a(f);if(!i)return null;try{let f=ve(i,t.value);if(!f||f.length===0)return null;let _=jo(f,n)??f[f.length-1];if(_)return P_(_.type,_.value)}catch{}return null}function yy(e,t){if(!_e(t))return;let n=t,r=mi(e)?`(${e})`:e,i=n.parameters.filter(a=>a.label!=="self"&&!a.isImplicit);if(i.length===0)return{insertText:`${r}()`,insertTextFormat:Ln.InsertTextFormat.Snippet};let o=i.map((a,s)=>`\${${s+1}:${a.label||O(a.type)}}`).join(", ");return{insertText:`${r}(${o})`,insertTextFormat:Ln.InsertTextFormat.Snippet}}function aL(e,t,n,r){let i=new Set(e.map(a=>a.name));function o(a,s,l){if(i.has(a))return;i.add(a);let u=yy(a,s);try{e.push({name:a,detail:O(s),documentation:l||`Method ${a}`,kind:Ln.CompletionItemKind.Method,...u})}catch{e.push({name:a,detail:"",documentation:l||`Method ${a}`,kind:Ln.CompletionItemKind.Method,...u})}}if(n.trait){for(let a of n.trait.fields)if(a.label&&_e(a.type))o(a.label,a.type,a.docComment);else if(a.label&&rt(a.type))o(a.label,a.type,a.docComment);else if(a.label===""&&a.assignedValue&&on(a.assignedValue)){let s=a.assignedValue,l=s.type;for(let u=0;u<l.fields.length;u++){let c=l.fields[u];if(c.label&&_e(c.type)){let f=s.fields[u],_=Se(f)&&f.specializedType?f.specializedType:c.type;o(c.label,_,c.docComment)}}}}try{let a=jE({concreteType:r,env:t});for(let s of a)o(s.name,s.type)}catch{}}function KN(e,t){if(!t.trait)return;let n=new Set(e.map(r=>r.name));for(let r of t.trait.fields)if(r.label&&_e(r.type)&&!n.has(r.label)){n.add(r.label);let i=r.docComment||`Method ${r.label}`,o=yy(r.label,r.type);try{e.push({name:r.label,detail:O(r.type),documentation:i,kind:Ln.CompletionItemKind.Method,...o})}catch{e.push({name:r.label,detail:"",documentation:i,kind:Ln.CompletionItemKind.Method,...o})}}}function sL(e,t,n,r){var g;let i=r.getModule(e);if(!i||i.moduleError){let T=r.getLastGoodModule(e);if(T)i=T;else if(!i)return null}let o=i.evaluator.getProgram(),a=i.evaluator.getTokens(),s=io(a,t,n);if(!s)return null;if(s.type==="string"){let T=XN(o,s);if(T)return T}let l=M_(o,s,t);if(!l||!Q(l))return null;let u=l,c=(g=u.$)==null?void 0:g.env;if(!c)return null;let f=s.value,_=JN(o,l,s);if(_)return _;let p=ZN(u,f,r);if(p)return p;let d=QN(c,f);if(!d)return null;let{definitionToken:v,definitionModulePath:y}=d;return{uri:ni(y),range:{start:{line:v.position.row,character:v.position.column},end:{line:v.position.row,character:v.position.column+v.value.length}}}}function XN(e,t){let n=null,r=i=>{var o;if(!n&&S(i)){let a=i;if(Q(a.func)&&a.func.token.value==="import"&&a.args.length>=1){let s=a.args[0];if(Q(s)&&s.token.position.row===t.position.row&&s.token.position.column===t.position.column){let l=(o=a.$)==null?void 0:o.value;if(l&&Rt(l)){let u=l.type.env.modulePath;if(u){n={uri:ni(u),range:{start:{line:0,character:0},end:{line:0,character:0}}};return}}}}r(a.func);for(let s of a.args)r(s)}};for(let i of e)r(i);return n}function QN(e,t){try{for(let n=e.frames.length-1;n>=0;n--){let r=e.frames[n];if(r!=null&&r.variables){for(let i of r.variables)if(i.name===t)return{definitionToken:i.token,definitionModulePath:i.token.modulePath}}}for(let n=e.frames.length-1;n>=0;n--){let r=e.frames[n];if(r!=null&&r.variables){for(let i of r.variables)if(i.value&&Rt(i.value[0])){let o=i.value[0];if(o.type&&o.type.fields){for(let a of o.type.fields)if(a&&a.label===t)return{definitionToken:a.exprs.expr.token,definitionModulePath:a.exprs.expr.token.modulePath}}}}}return null}catch{return null}}function JN(e,t,n){var s,l,u,c,f,_,p,d,v,y,h;let r=n.value,i=tD(e,t);if(!i)return null;let o=i.args[0];if(!o)return null;let a=(s=o.$)==null?void 0:s.type;if(!a)return null;for(Lt(a)&&((l=o.$)!=null&&l.value)&&X(o.$.value)&&(a=o.$.value.value);et(a);)a=a.childType;if(Oe(a)||Ht(a)){let g=a;for(let T of g.fields)if(T.label===r&&((c=(u=T.exprs)==null?void 0:u.expr)!=null&&c.token)){let E=T.exprs.expr.token;return{uri:ni(E.modulePath),range:{start:{line:E.position.row,character:E.position.column},end:{line:E.position.row,character:E.position.column+E.value.length}}}}}if(a.trait)for(let g of a.trait.fields){if(g.label===r){if((_=(f=g.exprs)==null?void 0:f.expr)!=null&&_.token&&g.exprs.expr.token.value===r){let E=g.exprs.expr.token;return{uri:ni(E.modulePath),range:{start:{line:E.position.row,character:E.position.column},end:{line:E.position.row,character:E.position.column+E.value.length}}}}let T=nD(e,r,a.typeName);if(T)return{uri:ni(T.modulePath),range:{start:{line:T.position.row,character:T.position.column},end:{line:T.position.row,character:T.position.column+T.value.length}}}}if(g.label===""&&g.assignedValue&&on(g.assignedValue)){let T=g.assignedValue,E=T.type;for(let $=0;$<E.fields.length;$++){let k=E.fields[$];if(k.label===r){if((d=(p=k.exprs)==null?void 0:p.expr)!=null&&d.token){let w=k.exprs.expr.token;return{uri:ni(w.modulePath),range:{start:{line:w.position.row,character:w.position.column},end:{line:w.position.row,character:w.position.column+w.value.length}}}}let C=T.fields[$];if(Se(C)&&((v=C.body)!=null&&v.token)){let w=C.body.token;return{uri:ni(w.modulePath),range:{start:{line:w.position.row,character:w.position.column},end:{line:w.position.row,character:w.position.column+w.value.length}}}}}}}}if(rt(a)){for(let g of a.fields)if(g.label===r&&((h=(y=g.exprs)==null?void 0:y.expr)!=null&&h.token)){let T=g.exprs.expr.token;return{uri:ni(T.modulePath),range:{start:{line:T.position.row,character:T.position.column},end:{line:T.position.row,character:T.position.column+T.value.length}}}}}return null}function ZN(e,t,n){var l,u;let r=null,i=(l=e.$)==null?void 0:l.type;if(i&&Ye(i))r=i;else if(i&&Lt(i)&&((u=e.$)!=null&&u.value)&&X(e.$.value)){let c=e.$.value.value;Ye(c)&&(r=c)}if(!r||!r.variants.some(c=>c.name===t))return null;let o=r.env.modulePath;if(!o)return null;let a=n.getModule(ni(o));if(!a)return null;let s=a.evaluator.getProgram();return eD(s,t,r.typeName)}function eD(e,t,n){let r=null,i=(o,a)=>{if(r||!S(o))return;let s=o;if(b(s,"::")&&s.args.length>=2&&Q(s.args[0])&&n&&s.args[0].token.value===n){i(s.args[1],!0);return}if(a&&b(s,"enum"))for(let l of s.args){let u=lL(l);if(u&&u.value===t){r={uri:ni(u.modulePath),range:{start:{line:u.position.row,character:u.position.column},end:{line:u.position.row,character:u.position.column+u.value.length}}};return}}i(s.func,a);for(let l of s.args)i(l,a)};for(let o of e)i(o,!1);return r}function lL(e){if(Q(e))return e.token;if(S(e)){let t=e;return Q(t.func)?t.func.token:lL(t.func)}return null}function tD(e,t){let n=null,r=i=>{if(n||!S(i))return;let o=i;if(b(o,".")&&o.args.length===2&&o.args[1]===t){n=o;return}r(o.func);for(let a of o.args)r(a)};for(let i of e)r(i);return n}function nD(e,t,n){let r=null,i=o=>{if(r||!S(o))return;let a=o;if(b(a,"impl")&&a.args.length>=2){let s=a.args[0];if(s&&Q(s)&&n&&s.token.value===n)for(let l=1;l<a.args.length;l++){let u=a.args[l];if(S(u)&&b(u,":")){let c=u;if(c.args.length>=1&&Q(c.args[0])&&c.args[0].token.value===t){r=c.args[0].token;return}}}}i(a.func);for(let s of a.args)i(s)};for(let o of e)i(o);return r}var _r=Yn(Na());function uL(e,t){try{let n=t.getModule(e);if(!n)return[];let r=n.evaluator.getProgram(),i=ri(e),o=[],a=new Set;for(let s of r){let l=rD(s,i);l&&!a.has(l.name)&&(a.add(l.name),o.push(l))}return o}catch{return[]}}function rD(e,t){if(!S(e)||e.token.modulePath!==t)return null;let n=e,r=n.func;if(!Q(r))return null;let i=r.token.value;return i===":="||i==="::"?iD(n):i==="import"||i==="export"||i==="open"?sD(n,i):i==="impl"?lD(n):i==="test"?uD(n):null}function iD(e){if(e.args.length<2)return null;let t=e.args[0];if(!t||!Q(t))return null;let n=t.token,r=n.value;if(!r||r.startsWith("__"))return null;let i=e.args[1],o=oD(i),a=aD(e),s=B_(n);return _r.DocumentSymbol.create(r,a,o,s,s)}function oD(e){if(!e)return _r.SymbolKind.Variable;let t=e.$;if(t!=null&&t.type){if(_e(t.type))return _r.SymbolKind.Function;if(Oe(t.type))return _r.SymbolKind.Struct;if(Ye(t.type))return _r.SymbolKind.Enum;if(Ht(t.type))return _r.SymbolKind.Enum}if(S(e)){let n=e;if(Q(n.func))switch(n.func.token.value){case"fn":case"unsafe_fn":return _r.SymbolKind.Function;case"struct":case"object":case"newtype":return _r.SymbolKind.Struct;case"enum":return _r.SymbolKind.Enum;case"union":return _r.SymbolKind.Enum;case"trait":return _r.SymbolKind.Interface;case"module":return _r.SymbolKind.Module}}if((t==null?void 0:t.value)!==void 0){let n=t.value;if(Array.isArray(n)&&n.length>0&&n[0]){let r=n[0];if(typeof r=="object"&&"tag"in r){if(r.tag==="TypeValue")return _r.SymbolKind.Class;if(r.tag==="ModuleValue")return _r.SymbolKind.Module}}}return _r.SymbolKind.Variable}function aD(e){var t;try{let n=e.$;if(n!=null&&n.type)return O(n.type);let r=e.args[1];if((t=r==null?void 0:r.$)!=null&&t.type)return O(r.$.type)}catch{}}function sD(e,t){if(e.args.length===0||t==="export"&&e.args.length===1&&Q(e.args[0]))return null;if(t==="open"){let n=e.args[0];if(n&&S(n)){let r=n;if(Q(r.func)&&r.func.token.value==="import"){let i=r.args[0];if(i&&Q(i)){let o=i.token.value,a=B_(e.func.token);return _r.DocumentSymbol.create(`open import ${o}`,void 0,_r.SymbolKind.Namespace,a,a)}}}return null}return null}function lD(e){if(e.args.length===0)return null;let t=e.args[0];if(!t)return null;let n="impl";Q(t)&&(n=`impl(${t.token.value})`);let r=B_(e.func.token);return _r.DocumentSymbol.create(n,void 0,_r.SymbolKind.Class,r,r)}function uD(e){if(e.args.length<1)return null;let t=e.args[0];if(!t)return null;let n="test";Q(t)&&(n=`test ${t.token.value}`);let r=B_(e.func.token);return _r.DocumentSymbol.create(n,void 0,_r.SymbolKind.Function,r,r)}function B_(e){return{start:{line:e.position.row,character:e.position.column},end:{line:e.position.row,character:e.position.column+e.value.length}}}function cL(e,t,n,r){try{let i=r.getModule(e);if(i||(i=r.getLastGoodModule(e)),!i)return null;let o=i.evaluator.getTokens(),a=io(o,t,n);if(!a||a.type==="whitespace"||a.type==="single_line_comment"||a.type==="multi_line_comment")return null;let s=a.value,l=ri(e),u=[],c=i.evaluator.getProgram();if(cD(c,s,l,u),u.length===0)for(let f of o)f.value===s&&f.modulePath===l&&f.type!=="whitespace"&&f.type!=="single_line_comment"&&f.type!=="multi_line_comment"&&u.push({uri:ni(f.modulePath),range:{start:{line:f.position.row,character:f.position.column},end:{line:f.position.row,character:f.position.column+f.value.length}}});return u.length>0?u:null}catch{return null}}function cD(e,t,n,r){let i=new Set;function o(a){if(Q(a)){let s=a;if(s.token.value===t&&s.token.modulePath===n){let l=`${s.token.position.row}:${s.token.position.column}`;i.has(l)||(i.add(l),r.push({uri:ni(s.token.modulePath),range:{start:{line:s.token.position.row,character:s.token.position.column},end:{line:s.token.position.row,character:s.token.position.column+s.token.value.length}}}))}}if(S(a)){let s=a;o(s.func);for(let l of s.args)o(l)}}for(let a of e)o(a)}function fD(e,t,n,r){let i=[],o=new Set;function a(s){if(Q(s)){let l=s;if(l.token.value===t&&l.token.modulePath===r){let u=`${l.token.position.row}:${l.token.position.column}`;o.has(u)||(o.add(u),i.push({range:{start:{line:l.token.position.row,character:l.token.position.column},end:{line:l.token.position.row,character:l.token.position.column+t.length}},newText:n}))}}if(S(s)){let l=s;a(l.func);for(let u of l.args)a(u)}}for(let s of e)a(s);return i}function fL(e,t){try{let n=e.textDocument.uri,r=t.getModule(n);if(!r)return null;let i=r.evaluator.getTokens(),o=io(i,e.position.line,e.position.character);if(!o||o.type==="whitespace"||o.type==="single_line_comment"||o.type==="multi_line_comment")return null;let a=o.value,s=e.newName,l=ri(n),u=r.evaluator.getProgram(),c=fD(u,a,s,l);if(c.length===0){let _=new Set;c=[];for(let p of i)if(p.value===a&&p.modulePath===l&&p.type!=="whitespace"&&p.type!=="single_line_comment"&&p.type!=="multi_line_comment"){let d=`${p.position.row}:${p.position.column}`;_.has(d)||(_.add(d),c.push({range:{start:{line:p.position.row,character:p.position.column},end:{line:p.position.row,character:p.position.column+a.length}},newText:s}))}}return c.length===0?null:{changes:{[ni(l)]:c}}}catch{return null}}function _L(e,t,n,r){try{let i=r.getModule(e);if(!i)return null;let o=i.evaluator.getTokens(),a=io(o,t,n);return!a||a.type!=="identifier"?null:{range:{start:{line:a.position.row,character:a.position.column},end:{line:a.position.row,character:a.position.column+a.value.length}},placeholder:a.value}}catch{return null}}var _D=new Set(Object.values(B).flat());function pL(e,t,n,r){var i;try{let o=r.getModule(e);if(o||(o=r.getLastGoodModule(e)),!o)return null;let a=o.evaluator.getProgram(),s=o.evaluator.getTokens(),l=ri(e),u=pD(a,t,n,l);if(!u)return null;let{funcExpr:c,activeParameter:f}=u,_=c.$;if(!(_!=null&&_.type))return null;let p=null;if(_e(_.type)&&(p=_.type),!p&&Q(c)){let y=c.token.value;if(io(s,t,n)){for(let g of a)if(S(g)){let T=g;if(Q(T.func)){let E=T.func.token.value;if((E==="::"||E===":=")&&T.args.length>=2){let $=T.args[0];if(Q($)&&$.token.value===y){let k=T.args[1];if((i=k==null?void 0:k.$)!=null&&i.type&&_e(k.$.type)){p=k.$.type;break}}}}}}}if(!p)return null;let d=p.parameters.map(y=>({label:y.label?`${y.label}: ${O(y.type)}`:O(y.type)})),v={label:O(p),parameters:d};return _.docComment&&(v.documentation=_.docComment),{signatures:[v],activeSignature:0,activeParameter:Math.min(f,d.length-1)}}catch{return null}}function pD(e,t,n,r){let i=null;function o(a){if(!S(a))return;let s=a,l=s.func.token;if(l.type==="operator"||l.type==="."||_D.has(l.value)){o(s.func);for(let f of s.args)o(f);return}if(l.modulePath!==r)return;if(!(t>l.position.row||t===l.position.row&&n>l.position.column+l.value.length)){for(let f of s.args)o(f);return}if(s.args.length>0){let f=s.args[s.args.length-1],_=gy(f);if(t>_.row||t===_.row&&n>_.col){for(let p of s.args)o(p);return}}let c=0;for(let f=0;f<s.args.length;f++){let _=s.args[f].token;(t>_.position.row||t===_.position.row&&n>=_.position.column)&&(c=f)}o(s.func);for(let f of s.args)o(f);i||(i={funcExpr:s.func,activeParameter:c})}for(let a of e)o(a);return i}function gy(e){if(Q(e))return{row:e.token.position.row,col:e.token.position.column+e.token.value.length};let t=e,n=gy(t.func);for(let r of t.args){let i=gy(r);(i.row>n.row||i.row===n.row&&i.col>n.col)&&(n=i)}return n}var El=Yn(Na());function dL(e,t){try{let n=t.getModule(e);if(!n)return[];let r=n.evaluator.getTokens(),i=[],o=[];for(let a of r)switch(a.type){case"{":o.push(a);break;case"}":{let s=o.pop();s&&s.position.row<a.position.row&&i.push({startLine:s.position.row,startCharacter:s.position.column,endLine:a.position.row,endCharacter:a.position.column+1,kind:El.FoldingRangeKind.Region});break}case"(":o.push(a);break;case")":{let s=o.pop();s&&s.position.row<a.position.row&&i.push({startLine:s.position.row,startCharacter:s.position.column,endLine:a.position.row,endCharacter:a.position.column+1,kind:El.FoldingRangeKind.Region});break}case"multi_line_comment":case"doc_block_comment":case"inner_doc_block_comment":{let s=a.value.split(`
11935
+ `+k),{contents:{kind:ZF.MarkupKind.Markdown,value:$},range:{start:{line:u.position.row,character:u.position.column},end:{line:u.position.row,character:u.position.column+u.value.length}}}}function ON(e,t){var o;let n=null,r=-1,i=a=>{var s;if(Q(a))(s=a.$)!=null&&s.env&&a.token.position.row<t.position.row&&a.token.position.row>r&&(n=a.$.env,r=a.token.position.row);else if(S(a)){let l=a;i(l.func);for(let u of l.args)i(u)}};for(let a of e)i(a);if(!n)return null;try{let a=ve(n,t.value);if(!a||a.length===0)return null;let s=a.filter(u=>{if(u.initializedAtToken){let c=u.initializedAtToken.position.row;return c>2&&c<t.position.row}return!1});if(s.length===0)return null;let l=s[s.length-1];return l!=null&&l.type?{tag:"Atom",token:t,$:{type:l.type,value:(o=l.value)==null?void 0:o[0],env:n,pathCollection:[]}}:null}catch{return null}}function PN(e,t,n){var a;let r=null,i=-1,o=s=>{var l;if(Q(s))(l=s.$)!=null&&l.env&&s.$.env.frames.length>i&&(r=s.$.env,i=s.$.env.frames.length);else if(S(s)){let u=s;o(u.func);for(let c of u.args)o(c)}};for(let s of e)o(s);if(!r)return null;try{let s=ve(r,t);if(!s||s.length===0)return null;let l=jo(s,n)??s[s.length-1];return l!=null&&l.type?{tag:"Atom",token:{value:t,type:"identifier",position:n.position,modulePath:n.modulePath},$:{type:l.type,value:(a=l.value)==null?void 0:a[0],env:r,pathCollection:[],docComment:l.docComment}}:null}catch{return null}}function UN(e,t){var r;function n(i){if(!S(i))return null;let o=i;if(b(o,":")&&o.args.length>=2&&o.args[0]===t)return o;let a=n(o.func);if(a)return a;for(let s of o.args)if(a=n(s),a)return a;return null}for(let i of e){let o=n(i);if(o){let a=o.args[1];if((r=a==null?void 0:a.$)!=null&&r.type){let s=t.token.value,l,u=fy(i,o);if(u){let c=u.receiverType;if(c!=null&&c.trait){for(let f of c.trait.fields)if(f.label===s&&f.docComment){l=f.docComment;break}}}return{type:a.$.type,value:a.$.value,docComment:l}}}}return null}function fy(e,t){var i,o;if(!S(e))return null;let n=e;if(b(n,"impl")){for(let a of n.args)if(a===t){let s=(i=n.$)==null?void 0:i.type;if(s&&_t(s)&&s.receiverType)return{receiverType:s.receiverType};let l=n.args[0];if((o=l==null?void 0:l.$)!=null&&o.value&&X(l.$.value))return{receiverType:l.$.value.value};break}}let r=fy(n.func,t);if(r)return r;for(let a of n.args)if(r=fy(a,t),r)return r;return null}function zN(e,t){var i,o;let n=t.token.value;function r(a){if(!S(a))return null;let s=a;if(b(s,".")&&s.args.length===2&&s.args[1]===t)return s;let l=r(s.func);if(l)return l;for(let u of s.args)if(l=r(u),l)return l;return null}for(let a of e){let s=r(a);if(s){let l=s.args[0],u=(i=l==null?void 0:l.$)==null?void 0:i.type;if(u&&Lt(u)&&((o=l==null?void 0:l.$)!=null&&o.value)&&X(l.$.value)&&(u=l.$.value.value),u){if(Oe(u)){let c=u.fields.find(f=>f.label===n);if(c!=null&&c.docComment)return c.docComment}if(u.trait){for(let c of u.trait.fields)if(c.label===n&&c.docComment)return c.docComment}}}}}var Ln=Yn(Na()),z_=Yn(require("node:fs")),Tl=Yn(require("node:path"));var _y=null;function BN(){if(_y)return _y;let e=[];for(let t of Object.keys(B))e.push(...B[t]);for(let t of Object.keys(F))e.push(...F[t]);for(let t of Object.keys(Sr))e.push(Sr[t]);return _y=e,e}function iL(e,t,n,r,i){let o=r.substring(0,n),a=qN(o,e,i);if(a.length>0)return a;let s=i.getModule(e);if(!s)return U_("");if(o.endsWith(".")){let c=o.slice(0,-1).trimEnd();if(c.length===0||c.endsWith("=")||c.endsWith("(")||c.endsWith(",")||c.endsWith("return")||c.endsWith("{")||c.endsWith(";")){let d=i.getLastGoodModule(e)??s,v=jN(d,t,n);if(v.length>0)return v}let _=nL(s,t,n,r);if(_.length>0)return _;let p=i.getLastGoodModule(e);if(p&&p!==s){let d=nL(p,t,n,r);if(d.length>0)return d}if(c){let d=rL(s,c,t,n);if(d.length>0)return d;if(p&&p!==s){let v=rL(p,c,t,n);if(v.length>0)return v}}return _}if(s.moduleError){let c=tL(r,n),f=py(s,t,n,c);if(f.length>0)return f;let _=i.getLastGoodModule(e);if(_){let p=py(_,t,n,c);if(p.length>0)return p}return U_(c)}let u=tL(r,n);return py(s,t,n,u)}function tL(e,t){let n=t;for(;n>0&&/[a-zA-Z0-9_]/.test(e[n-1]);)n--;return e.substring(n,t)}function U_(e){let t=[],n=e.toLowerCase();for(let r of BN())r.startsWith("___")||r.startsWith("__yo_")||r.toLowerCase().includes(n)&&t.push({label:r,kind:Ln.CompletionItemKind.Keyword,sortText:r.toLowerCase().startsWith(n)?`0_${r}`:`1_${r}`});return t}function qN(e,t,n){let r=e.match(/import\s+"([^"]*?)([^"/]*)$/);if(!r)return[];let i=r[1]+r[2],o=r[2],a;if(i.startsWith("std/")){let s=n.getStdPath();if(!s)return[];let l=i.slice(4),u=l.lastIndexOf("/");u>=0?a=Tl.join(s,l.slice(0,u)):a=s}else if(i.startsWith("./")||i.startsWith("../")){let s=t.startsWith("file://")?t.slice(7):t,l=Tl.dirname(s),u=i,c=u.lastIndexOf("/");c>=0?a=Tl.resolve(l,u.slice(0,c)):a=l}else return[];try{if(!z_.existsSync(a))return[];let s=z_.readdirSync(a,{withFileTypes:!0}),l=[],u=o.toLowerCase();for(let c of s){let f=c.name;if(!f.startsWith(".")){if(c.isDirectory()){if(!f.toLowerCase().startsWith(u))continue;l.push({label:f,kind:Ln.CompletionItemKind.Folder,sortText:`0_${f}`})}else if(f.endsWith(".yo")){let _=f.slice(0,-3);if(!_.toLowerCase().startsWith(u)||f==="index.yo")continue;l.push({label:_,kind:Ln.CompletionItemKind.File,sortText:`1_${_}`})}}}return l}catch{return[]}}function py(e,t,n,r){var a,s,l,u,c;let i=[],o=r.toLowerCase();try{let f=e.evaluator.getProgram(),_=new Map,p=null,d=-1,v=y=>{var h;if(Q(y)){if((h=y.$)!=null&&h.env&&y.$.env.frames.length>d){let g=y.token.position.row,T=y.token.position.column;(g<t||g===t&&T<=n)&&(p=y.$.env,d=y.$.env.frames.length)}if(y.token.type==="identifier"){let g=y.token.position.row,T=y.token.position.column;if(!(g<t||g===t&&T<n))return;let $=y.token.value;$.toLowerCase().includes(o)&&(_.has($)||_.set($,[]),_.get($).push(y))}}else if(S(y)){let g=y;v(g.func);for(let T of g.args)v(T)}};for(let y of f)v(y);p&&GN(p,o,_);for(let[y,h]of _){if(y.startsWith("___")||y.startsWith("__yo_"))continue;h.sort((C,w)=>{let I=C.token.position.row<t,L=w.token.position.row<t;if(I&&L)return w.token.position.row-C.token.position.row;if(I!==L)return L?1:-1;let x=C.$?1:0;return(w.$?1:0)-x});let g=h[0],T=_e((a=g.$)==null?void 0:a.type)?Ln.CompletionItemKind.Function:Ln.CompletionItemKind.Variable,E="";if((s=g.$)!=null&&s.type)try{E=O(g.$.type)}catch{}let $;if((l=g.$)!=null&&l.env)try{let C=ve(g.$.env,y);if(C&&C.length>0){let w=jo(C,{position:{row:t,column:n,character:n},modulePath:g.token.modulePath});$=w==null?void 0:w.docComment}}catch{}$||($=(u=g.$)==null?void 0:u.docComment);let k={label:y,kind:T,detail:E||void 0,sortText:y.toLowerCase().startsWith(o)?`0_${y}`:`1_${y}`};if($)k.documentation={kind:Ln.MarkupKind.Markdown,value:$};else if((c=g.$)!=null&&c.value)try{k.documentation=`Value: ${bt(g.$.value)}`}catch{}i.push(k)}i.push(...U_(r))}catch{return U_(r)}return i}function GN(e,t,n){var i;let r=new Set(n.keys());for(let o of e.frames)for(let a of o.variables){let s=a.name;if(r.has(s)||s.startsWith("___")||s.startsWith("__yo_")||s.startsWith("_")&&s.length>1&&s[1]!=="_"||!s.toLowerCase().includes(t))continue;r.add(s);let l={token:{type:"identifier",value:s,position:{row:0,column:0,character:0}},$:{type:a.type,value:(i=a.value)==null?void 0:i[0],env:e,docComment:a.docComment}};n.set(s,[l])}}function nL(e,t,n,r){var a;let i=[],o=n-1;try{let s=e.evaluator.getTokens(),l=e.evaluator.getProgram(),u=s.find(g=>{let T=g.position.column+g.value.length;return g.position.row===t&&g.type!=="whitespace"&&g.type!=="single_line_comment"&&g.type!=="multi_line_comment"&&T===o});if(u&&r.substring(u.position.column,o)!==u.value&&(u=void 0),!u){let g=r.substring(0,o).trim();if(g&&/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(g)){let T=s.filter(E=>E.value===g&&E.type==="identifier"&&E.position.row<t);T.length>0&&(T.sort((E,$)=>$.position.row-E.position.row),u=T[0])}if(!u)return i}let c=null,f=g=>{if(Q(g)){if(g.token.position.row===u.position.row&&g.token.position.column===u.position.column&&g.token.value===u.value)return c=g,!0}else if(S(g)){let T=g;if(f(T.func))return!0;for(let E of T.args)if(f(E))return!0}return!1};for(let g of l)if(f(g))break;if(!c&&u.type==="identifier")for(let g of l){let T=my(g,u.value,t);if(T){c=T;break}}if(!c&&u.value===")"&&u.type===")"){let g=null,T=1/0,E=k=>{var C;return(C=k.$)!=null&&C.type?!!(_t(k.$.type)||Lt(k.$.type)&&k.$.value&&X(k.$.value)&&_t(k.$.value.value)):!1},$=k=>{var C,w,I,L;if(S(k)){let x=k,V=(w=(C=x.func.token)==null?void 0:C.position)==null?void 0:w.row,M=((L=(I=x.func.token)==null?void 0:I.position)==null?void 0:L.column)??1/0;V===t&&M<o&&E(x)&&M<T&&(g=x,T=M),$(x.func);for(let q of x.args)$(q)}};for(let k of l)$(k);g&&(c=g)}let _={position:{row:t,column:o,character:o},modulePath:u.modulePath},p=YN(c,u,_,l);if(!p)return i;let d=p,v=p;for(;et(v)||hr(v);)et(v)?v=v.childType:hr(v)&&(v=v.fields[0].type);let y=[];if(oL(y,v),c&&Q(c)){let g=(a=c.$)==null?void 0:a.env;g&&aL(y,g,v,d)}else v.trait&&KN(y,v);let h=new Set;for(let g of y){if(h.has(g.name)||g.name.startsWith("___")||g.name.startsWith("__yo_"))continue;h.add(g.name);let T={label:g.name,kind:g.kind,detail:g.detail,documentation:g.documentation,sortText:`0_${g.name}`};g.insertText&&(T.insertText=g.insertText,T.insertTextFormat=g.insertTextFormat),i.push(T)}}catch{}return i}function rL(e,t,n,r){var o;let i=[];try{let a=e.evaluator.getProgram(),s=null,l=-1,u=-1,c=-1,f=C=>{var w;if(Q(C)){if((w=C.$)!=null&&w.env){let I=C.token.position.row,L=C.token.position.column;if(!(I<n||I===n&&L<=r))return;let V=C.$.env.frames.length;(V>l||V===l&&(I>u||I===u&&L>c))&&(s=C.$.env,l=V,u=I,c=L)}}else if(S(C)){let I=C;f(I.func);for(let L of I.args)f(L)}};for(let C of a)f(C);if(!s)return i;let _=s,p=t.match(/\(\s*([a-zA-Z_][a-zA-Z0-9_]*)\s*<:\s*([A-Za-z_][a-zA-Z0-9_]*)(?:\s*\(([^()]*(?:\([^()]*\))*[^()]*)\))?\s*\)\s*$/),d=t.match(/([A-Z][a-zA-Z0-9_]*)\s*\(([^()]*(?:\([^()]*\))*[^()]*)\)\s*$/),v=t.match(/([a-zA-Z_][a-zA-Z0-9_]*)$/),y=(p==null?void 0:p[2])??(d==null?void 0:d[1])??(v==null?void 0:v[1]);if(!y)return i;let h=ve(_,y);if(!h||h.length===0)return i;let g=jo(h,{position:{row:n,column:r,character:r},modulePath:_.modulePath})??h[h.length-1];if(!g)return i;let T=null;if((d||p)&&(T=WN(a,y)),!T&&((o=g.value)!=null&&o[0])&&X(g.value[0])&&(T=g.value[0].value),T||(T=P_(g.type,g.value)),!T)return i;let E=T;for(;et(E)||hr(E);)et(E)?E=E.childType:hr(E)&&(E=E.fields[0].type);let $=[];oL($,E),aL($,s,E,T);let k=new Set;for(let C of $){if(k.has(C.name)||C.name.startsWith("___")||C.name.startsWith("__yo_"))continue;k.add(C.name);let w={label:C.name,kind:C.kind,detail:C.detail,documentation:C.documentation,sortText:`0_${C.name}`};C.insertText&&(w.insertText=C.insertText,w.insertTextFormat=C.insertTextFormat),i.push(w)}}catch{}return i}function WN(e,t){let n=null,r=i=>{var o;if(!n&&S(i)){let a=i;if(Q(a.func)&&a.func.token.value===t&&((o=a.$)!=null&&o.type)){if(Lt(a.$.type)&&a.$.value&&X(a.$.value)){n=a.$.value.value;return}n=a.$.type;return}r(a.func);for(let s of a.args)r(s)}};for(let i of e)r(i);return n}function oL(e,t){if(ft(t))e.push({name:"len",detail:"comptime(usize)",documentation:"Get the compile-time known length of the array",kind:Ln.CompletionItemKind.Property});else if(Vt(t))e.push({name:"len",detail:"usize",documentation:"Get the runtime length of the slice",kind:Ln.CompletionItemKind.Property});else if(Oe(t))for(let n of t.fields)e.push({name:n.label,detail:O(n.type),documentation:n.docComment||`Field: ${n.label} : ${O(n.type)}`,kind:Ln.CompletionItemKind.Field});else if(Ye(t))for(let n of t.variants){let r={name:n.name,detail:n.fields?`(${n.fields.map(i=>O(i.type)).join(", ")})`:"()",documentation:`Variant: ${n.name}`,kind:Ln.CompletionItemKind.EnumMember};if(n.fields&&n.fields.length>0){let i=n.fields.map((o,a)=>`\${${a+1}:${o.label||O(o.type)}}`).join(", ");r.insertText=`${n.name}(${i})`,r.insertTextFormat=Ln.InsertTextFormat.Snippet}e.push(r)}else if(Ht(t))for(let n of t.fields)e.push({name:n.label,detail:O(n.type),documentation:`Field: ${n.label} : ${O(n.type)}`,kind:Ln.CompletionItemKind.Field});else if(rt(t))for(let n of t.fields){if(!n.label||n.label.startsWith("___")||n.label.startsWith("__yo_"))continue;let r=_e(n.type)?Ln.CompletionItemKind.Function:rt(n.type)?Ln.CompletionItemKind.Module:Lt(n.type)?Ln.CompletionItemKind.Class:Ln.CompletionItemKind.Field;try{e.push({name:n.label,detail:O(n.type),documentation:n.docComment||`${n.label}`,kind:r})}catch{e.push({name:n.label,detail:"",documentation:n.docComment||`${n.label}`,kind:r})}}else if(_t(t))for(let n of t.fields){if(!n.label||n.label.startsWith("___")||n.label.startsWith("__yo_"))continue;let r=_e(n.type)?Ln.CompletionItemKind.Method:rt(n.type)?Ln.CompletionItemKind.Module:Lt(n.type)?Ln.CompletionItemKind.Class:Ln.CompletionItemKind.Property,i=_e(n.type)?yy(n.label,n.type):void 0;try{e.push({name:n.label,detail:O(n.type),documentation:n.docComment||(_e(n.type)?`Trait method: ${n.label}`:`Trait member: ${n.label}`),kind:r,...i})}catch{e.push({name:n.label,detail:"",documentation:n.docComment||(_e(n.type)?`Trait method: ${n.label}`:`Trait member: ${n.label}`),kind:r,...i})}}}function jN(e,t,n){let r=[];try{let i=e.evaluator.getProgram(),o=HN(i,t);if(o&&Ye(o))for(let a of o.variants){let s=a.fields?`(${a.fields.map(u=>O(u.type)).join(", ")})`:"",l={label:`.${a.name}`,kind:Ln.CompletionItemKind.EnumMember,detail:s,documentation:`Variant: ${a.name}`,sortText:`0_${a.name}`};if(a.fields&&a.fields.length>0){let u=a.fields.map((c,f)=>`\${${f+1}:${c.label||O(c.type)}}`).join(", ");l.insertText=`${a.name}(${u})`,l.insertTextFormat=Ln.InsertTextFormat.Snippet}else l.insertText=a.name;r.push(l)}}catch{}return r}function HN(e,t){for(let n of e){let r=dy(n,t);if(r)return r}return null}function dy(e,t){var i,o,a,s,l,u;if(!S(e))return null;let n=e;if(Q(n.func)&&n.func.token.value==="="&&n.args.length>=2){let c=n.args[0],f=n.args[1];if(((Q(f)?f.token.position.row:S(f)?((o=(i=f.token)==null?void 0:i.position)==null?void 0:o.row)??-1:-1)===t||O_(c,t))&&S(c)){let p=c;if(Q(p.func)&&p.func.token.value===":"&&p.args.length>=2){let d=p.args[1];if((a=d.$)!=null&&a.value&&X(d.$.value))return d.$.value.value;if((s=d.$)!=null&&s.type)return d.$.type}}}if(Q(n.func)&&n.func.token.value==="match"&&n.args.length>=1)for(let c=1;c<n.args.length;c++){let f=n.args[c];if(O_(f,t)){let _=n.args[0];if((l=_.$)!=null&&l.type)return _.$.type}}if(Q(n.func)&&n.func.token.value==="cond"){for(let c of n.args)if(O_(c,t)&&(u=c.$)!=null&&u.type&&Ye(c.$.type))return c.$.type}let r=dy(n.func,t);if(r)return r;for(let c of n.args)if(r=dy(c,t),r)return r;return null}function O_(e,t){var n,r;if(Q(e))return e.token.position.row===t;if(S(e)){let i=e;if(((r=(n=i.token)==null?void 0:n.position)==null?void 0:r.row)===t||Q(i.func)&&i.func.token.position.row===t)return!0;for(let o of i.args)if(O_(o,t))return!0}return!1}function my(e,t,n){var r;if(Q(e)){if(e.token.type==="identifier"&&e.token.value===t&&((r=e.$)!=null&&r.type)&&e.token.position.row<n)return e}else if(S(e)){let i=e,o=my(i.func,t,n);if(o)return o;for(let a of i.args){let s=my(a,t,n);if(s)return s}}return null}function P_(e,t){return Lt(e)&&t&&t[0]&&X(t[0])?t[0].value:e}function YN(e,t,n,r){var s,l,u,c;if(e){if(Q(e)){let f=e;if((s=f.$)!=null&&s.type){if(Lt(f.$.type)){if(f.$.value&&X(f.$.value))return f.$.value.value;if((l=f.$)!=null&&l.env)try{let _=ve(f.$.env,f.token.value);if(_&&_.length>0){let p=jo(_,n)??_[_.length-1];if(p)return P_(p.type,p.value)}}catch{}}return f.$.type}if((u=f.$)!=null&&u.env)try{let _=ve(f.$.env,f.token.value);if(_&&_.length>0){let p=jo(_,n)??_[_.length-1];if(p)return P_(p.type,p.value)}}catch{}}else if(S(e)){let f=e;if((c=f.$)!=null&&c.type)return Lt(f.$.type)&&f.$.value&&X(f.$.value)?f.$.value.value:f.$.type}}if(t.type!=="identifier")return null;let i=null,o=-1,a=f=>{var _;if(Q(f))(_=f.$)!=null&&_.env&&f.token.position.row<n.position.row&&f.token.position.row>o&&(i=f.$.env,o=f.token.position.row);else if(S(f)){let p=f;a(p.func);for(let d of p.args)a(d)}};for(let f of r)a(f);if(!i)return null;try{let f=ve(i,t.value);if(!f||f.length===0)return null;let _=jo(f,n)??f[f.length-1];if(_)return P_(_.type,_.value)}catch{}return null}function yy(e,t){if(!_e(t))return;let n=t,r=mi(e)?`(${e})`:e,i=n.parameters.filter(a=>a.label!=="self"&&!a.isImplicit);if(i.length===0)return{insertText:`${r}()`,insertTextFormat:Ln.InsertTextFormat.Snippet};let o=i.map((a,s)=>`\${${s+1}:${a.label||O(a.type)}}`).join(", ");return{insertText:`${r}(${o})`,insertTextFormat:Ln.InsertTextFormat.Snippet}}function aL(e,t,n,r){let i=new Set(e.map(a=>a.name));function o(a,s,l){if(i.has(a))return;i.add(a);let u=yy(a,s);try{e.push({name:a,detail:O(s),documentation:l||`Method ${a}`,kind:Ln.CompletionItemKind.Method,...u})}catch{e.push({name:a,detail:"",documentation:l||`Method ${a}`,kind:Ln.CompletionItemKind.Method,...u})}}if(n.trait){for(let a of n.trait.fields)if(a.label&&_e(a.type))o(a.label,a.type,a.docComment);else if(a.label&&rt(a.type))o(a.label,a.type,a.docComment);else if(a.label===""&&a.assignedValue&&on(a.assignedValue)){let s=a.assignedValue,l=s.type;for(let u=0;u<l.fields.length;u++){let c=l.fields[u];if(c.label&&_e(c.type)){let f=s.fields[u],_=Ie(f)&&f.specializedType?f.specializedType:c.type;o(c.label,_,c.docComment)}}}}try{let a=jE({concreteType:r,env:t});for(let s of a)o(s.name,s.type)}catch{}}function KN(e,t){if(!t.trait)return;let n=new Set(e.map(r=>r.name));for(let r of t.trait.fields)if(r.label&&_e(r.type)&&!n.has(r.label)){n.add(r.label);let i=r.docComment||`Method ${r.label}`,o=yy(r.label,r.type);try{e.push({name:r.label,detail:O(r.type),documentation:i,kind:Ln.CompletionItemKind.Method,...o})}catch{e.push({name:r.label,detail:"",documentation:i,kind:Ln.CompletionItemKind.Method,...o})}}}function sL(e,t,n,r){var g;let i=r.getModule(e);if(!i||i.moduleError){let T=r.getLastGoodModule(e);if(T)i=T;else if(!i)return null}let o=i.evaluator.getProgram(),a=i.evaluator.getTokens(),s=io(a,t,n);if(!s)return null;if(s.type==="string"){let T=XN(o,s);if(T)return T}let l=M_(o,s,t);if(!l||!Q(l))return null;let u=l,c=(g=u.$)==null?void 0:g.env;if(!c)return null;let f=s.value,_=JN(o,l,s);if(_)return _;let p=ZN(u,f,r);if(p)return p;let d=QN(c,f);if(!d)return null;let{definitionToken:v,definitionModulePath:y}=d;return{uri:ni(y),range:{start:{line:v.position.row,character:v.position.column},end:{line:v.position.row,character:v.position.column+v.value.length}}}}function XN(e,t){let n=null,r=i=>{var o;if(!n&&S(i)){let a=i;if(Q(a.func)&&a.func.token.value==="import"&&a.args.length>=1){let s=a.args[0];if(Q(s)&&s.token.position.row===t.position.row&&s.token.position.column===t.position.column){let l=(o=a.$)==null?void 0:o.value;if(l&&Rt(l)){let u=l.type.env.modulePath;if(u){n={uri:ni(u),range:{start:{line:0,character:0},end:{line:0,character:0}}};return}}}}r(a.func);for(let s of a.args)r(s)}};for(let i of e)r(i);return n}function QN(e,t){try{for(let n=e.frames.length-1;n>=0;n--){let r=e.frames[n];if(r!=null&&r.variables){for(let i of r.variables)if(i.name===t)return{definitionToken:i.token,definitionModulePath:i.token.modulePath}}}for(let n=e.frames.length-1;n>=0;n--){let r=e.frames[n];if(r!=null&&r.variables){for(let i of r.variables)if(i.value&&Rt(i.value[0])){let o=i.value[0];if(o.type&&o.type.fields){for(let a of o.type.fields)if(a&&a.label===t)return{definitionToken:a.exprs.expr.token,definitionModulePath:a.exprs.expr.token.modulePath}}}}}return null}catch{return null}}function JN(e,t,n){var s,l,u,c,f,_,p,d,v,y,h;let r=n.value,i=tD(e,t);if(!i)return null;let o=i.args[0];if(!o)return null;let a=(s=o.$)==null?void 0:s.type;if(!a)return null;for(Lt(a)&&((l=o.$)!=null&&l.value)&&X(o.$.value)&&(a=o.$.value.value);et(a);)a=a.childType;if(Oe(a)||Ht(a)){let g=a;for(let T of g.fields)if(T.label===r&&((c=(u=T.exprs)==null?void 0:u.expr)!=null&&c.token)){let E=T.exprs.expr.token;return{uri:ni(E.modulePath),range:{start:{line:E.position.row,character:E.position.column},end:{line:E.position.row,character:E.position.column+E.value.length}}}}}if(a.trait)for(let g of a.trait.fields){if(g.label===r){if((_=(f=g.exprs)==null?void 0:f.expr)!=null&&_.token&&g.exprs.expr.token.value===r){let E=g.exprs.expr.token;return{uri:ni(E.modulePath),range:{start:{line:E.position.row,character:E.position.column},end:{line:E.position.row,character:E.position.column+E.value.length}}}}let T=nD(e,r,a.typeName);if(T)return{uri:ni(T.modulePath),range:{start:{line:T.position.row,character:T.position.column},end:{line:T.position.row,character:T.position.column+T.value.length}}}}if(g.label===""&&g.assignedValue&&on(g.assignedValue)){let T=g.assignedValue,E=T.type;for(let $=0;$<E.fields.length;$++){let k=E.fields[$];if(k.label===r){if((d=(p=k.exprs)==null?void 0:p.expr)!=null&&d.token){let w=k.exprs.expr.token;return{uri:ni(w.modulePath),range:{start:{line:w.position.row,character:w.position.column},end:{line:w.position.row,character:w.position.column+w.value.length}}}}let C=T.fields[$];if(Ie(C)&&((v=C.body)!=null&&v.token)){let w=C.body.token;return{uri:ni(w.modulePath),range:{start:{line:w.position.row,character:w.position.column},end:{line:w.position.row,character:w.position.column+w.value.length}}}}}}}}if(rt(a)){for(let g of a.fields)if(g.label===r&&((h=(y=g.exprs)==null?void 0:y.expr)!=null&&h.token)){let T=g.exprs.expr.token;return{uri:ni(T.modulePath),range:{start:{line:T.position.row,character:T.position.column},end:{line:T.position.row,character:T.position.column+T.value.length}}}}}return null}function ZN(e,t,n){var l,u;let r=null,i=(l=e.$)==null?void 0:l.type;if(i&&Ye(i))r=i;else if(i&&Lt(i)&&((u=e.$)!=null&&u.value)&&X(e.$.value)){let c=e.$.value.value;Ye(c)&&(r=c)}if(!r||!r.variants.some(c=>c.name===t))return null;let o=r.env.modulePath;if(!o)return null;let a=n.getModule(ni(o));if(!a)return null;let s=a.evaluator.getProgram();return eD(s,t,r.typeName)}function eD(e,t,n){let r=null,i=(o,a)=>{if(r||!S(o))return;let s=o;if(b(s,"::")&&s.args.length>=2&&Q(s.args[0])&&n&&s.args[0].token.value===n){i(s.args[1],!0);return}if(a&&b(s,"enum"))for(let l of s.args){let u=lL(l);if(u&&u.value===t){r={uri:ni(u.modulePath),range:{start:{line:u.position.row,character:u.position.column},end:{line:u.position.row,character:u.position.column+u.value.length}}};return}}i(s.func,a);for(let l of s.args)i(l,a)};for(let o of e)i(o,!1);return r}function lL(e){if(Q(e))return e.token;if(S(e)){let t=e;return Q(t.func)?t.func.token:lL(t.func)}return null}function tD(e,t){let n=null,r=i=>{if(n||!S(i))return;let o=i;if(b(o,".")&&o.args.length===2&&o.args[1]===t){n=o;return}r(o.func);for(let a of o.args)r(a)};for(let i of e)r(i);return n}function nD(e,t,n){let r=null,i=o=>{if(r||!S(o))return;let a=o;if(b(a,"impl")&&a.args.length>=2){let s=a.args[0];if(s&&Q(s)&&n&&s.token.value===n)for(let l=1;l<a.args.length;l++){let u=a.args[l];if(S(u)&&b(u,":")){let c=u;if(c.args.length>=1&&Q(c.args[0])&&c.args[0].token.value===t){r=c.args[0].token;return}}}}i(a.func);for(let s of a.args)i(s)};for(let o of e)i(o);return r}var _r=Yn(Na());function uL(e,t){try{let n=t.getModule(e);if(!n)return[];let r=n.evaluator.getProgram(),i=ri(e),o=[],a=new Set;for(let s of r){let l=rD(s,i);l&&!a.has(l.name)&&(a.add(l.name),o.push(l))}return o}catch{return[]}}function rD(e,t){if(!S(e)||e.token.modulePath!==t)return null;let n=e,r=n.func;if(!Q(r))return null;let i=r.token.value;return i===":="||i==="::"?iD(n):i==="import"||i==="export"||i==="open"?sD(n,i):i==="impl"?lD(n):i==="test"?uD(n):null}function iD(e){if(e.args.length<2)return null;let t=e.args[0];if(!t||!Q(t))return null;let n=t.token,r=n.value;if(!r||r.startsWith("__"))return null;let i=e.args[1],o=oD(i),a=aD(e),s=B_(n);return _r.DocumentSymbol.create(r,a,o,s,s)}function oD(e){if(!e)return _r.SymbolKind.Variable;let t=e.$;if(t!=null&&t.type){if(_e(t.type))return _r.SymbolKind.Function;if(Oe(t.type))return _r.SymbolKind.Struct;if(Ye(t.type))return _r.SymbolKind.Enum;if(Ht(t.type))return _r.SymbolKind.Enum}if(S(e)){let n=e;if(Q(n.func))switch(n.func.token.value){case"fn":case"unsafe_fn":return _r.SymbolKind.Function;case"struct":case"object":case"newtype":return _r.SymbolKind.Struct;case"enum":return _r.SymbolKind.Enum;case"union":return _r.SymbolKind.Enum;case"trait":return _r.SymbolKind.Interface;case"module":return _r.SymbolKind.Module}}if((t==null?void 0:t.value)!==void 0){let n=t.value;if(Array.isArray(n)&&n.length>0&&n[0]){let r=n[0];if(typeof r=="object"&&"tag"in r){if(r.tag==="TypeValue")return _r.SymbolKind.Class;if(r.tag==="ModuleValue")return _r.SymbolKind.Module}}}return _r.SymbolKind.Variable}function aD(e){var t;try{let n=e.$;if(n!=null&&n.type)return O(n.type);let r=e.args[1];if((t=r==null?void 0:r.$)!=null&&t.type)return O(r.$.type)}catch{}}function sD(e,t){if(e.args.length===0||t==="export"&&e.args.length===1&&Q(e.args[0]))return null;if(t==="open"){let n=e.args[0];if(n&&S(n)){let r=n;if(Q(r.func)&&r.func.token.value==="import"){let i=r.args[0];if(i&&Q(i)){let o=i.token.value,a=B_(e.func.token);return _r.DocumentSymbol.create(`open import ${o}`,void 0,_r.SymbolKind.Namespace,a,a)}}}return null}return null}function lD(e){if(e.args.length===0)return null;let t=e.args[0];if(!t)return null;let n="impl";Q(t)&&(n=`impl(${t.token.value})`);let r=B_(e.func.token);return _r.DocumentSymbol.create(n,void 0,_r.SymbolKind.Class,r,r)}function uD(e){if(e.args.length<1)return null;let t=e.args[0];if(!t)return null;let n="test";Q(t)&&(n=`test ${t.token.value}`);let r=B_(e.func.token);return _r.DocumentSymbol.create(n,void 0,_r.SymbolKind.Function,r,r)}function B_(e){return{start:{line:e.position.row,character:e.position.column},end:{line:e.position.row,character:e.position.column+e.value.length}}}function cL(e,t,n,r){try{let i=r.getModule(e);if(i||(i=r.getLastGoodModule(e)),!i)return null;let o=i.evaluator.getTokens(),a=io(o,t,n);if(!a||a.type==="whitespace"||a.type==="single_line_comment"||a.type==="multi_line_comment")return null;let s=a.value,l=ri(e),u=[],c=i.evaluator.getProgram();if(cD(c,s,l,u),u.length===0)for(let f of o)f.value===s&&f.modulePath===l&&f.type!=="whitespace"&&f.type!=="single_line_comment"&&f.type!=="multi_line_comment"&&u.push({uri:ni(f.modulePath),range:{start:{line:f.position.row,character:f.position.column},end:{line:f.position.row,character:f.position.column+f.value.length}}});return u.length>0?u:null}catch{return null}}function cD(e,t,n,r){let i=new Set;function o(a){if(Q(a)){let s=a;if(s.token.value===t&&s.token.modulePath===n){let l=`${s.token.position.row}:${s.token.position.column}`;i.has(l)||(i.add(l),r.push({uri:ni(s.token.modulePath),range:{start:{line:s.token.position.row,character:s.token.position.column},end:{line:s.token.position.row,character:s.token.position.column+s.token.value.length}}}))}}if(S(a)){let s=a;o(s.func);for(let l of s.args)o(l)}}for(let a of e)o(a)}function fD(e,t,n,r){let i=[],o=new Set;function a(s){if(Q(s)){let l=s;if(l.token.value===t&&l.token.modulePath===r){let u=`${l.token.position.row}:${l.token.position.column}`;o.has(u)||(o.add(u),i.push({range:{start:{line:l.token.position.row,character:l.token.position.column},end:{line:l.token.position.row,character:l.token.position.column+t.length}},newText:n}))}}if(S(s)){let l=s;a(l.func);for(let u of l.args)a(u)}}for(let s of e)a(s);return i}function fL(e,t){try{let n=e.textDocument.uri,r=t.getModule(n);if(!r)return null;let i=r.evaluator.getTokens(),o=io(i,e.position.line,e.position.character);if(!o||o.type==="whitespace"||o.type==="single_line_comment"||o.type==="multi_line_comment")return null;let a=o.value,s=e.newName,l=ri(n),u=r.evaluator.getProgram(),c=fD(u,a,s,l);if(c.length===0){let _=new Set;c=[];for(let p of i)if(p.value===a&&p.modulePath===l&&p.type!=="whitespace"&&p.type!=="single_line_comment"&&p.type!=="multi_line_comment"){let d=`${p.position.row}:${p.position.column}`;_.has(d)||(_.add(d),c.push({range:{start:{line:p.position.row,character:p.position.column},end:{line:p.position.row,character:p.position.column+a.length}},newText:s}))}}return c.length===0?null:{changes:{[ni(l)]:c}}}catch{return null}}function _L(e,t,n,r){try{let i=r.getModule(e);if(!i)return null;let o=i.evaluator.getTokens(),a=io(o,t,n);return!a||a.type!=="identifier"?null:{range:{start:{line:a.position.row,character:a.position.column},end:{line:a.position.row,character:a.position.column+a.value.length}},placeholder:a.value}}catch{return null}}var _D=new Set(Object.values(B).flat());function pL(e,t,n,r){var i;try{let o=r.getModule(e);if(o||(o=r.getLastGoodModule(e)),!o)return null;let a=o.evaluator.getProgram(),s=o.evaluator.getTokens(),l=ri(e),u=pD(a,t,n,l);if(!u)return null;let{funcExpr:c,activeParameter:f}=u,_=c.$;if(!(_!=null&&_.type))return null;let p=null;if(_e(_.type)&&(p=_.type),!p&&Q(c)){let y=c.token.value;if(io(s,t,n)){for(let g of a)if(S(g)){let T=g;if(Q(T.func)){let E=T.func.token.value;if((E==="::"||E===":=")&&T.args.length>=2){let $=T.args[0];if(Q($)&&$.token.value===y){let k=T.args[1];if((i=k==null?void 0:k.$)!=null&&i.type&&_e(k.$.type)){p=k.$.type;break}}}}}}}if(!p)return null;let d=p.parameters.map(y=>({label:y.label?`${y.label}: ${O(y.type)}`:O(y.type)})),v={label:O(p),parameters:d};return _.docComment&&(v.documentation=_.docComment),{signatures:[v],activeSignature:0,activeParameter:Math.min(f,d.length-1)}}catch{return null}}function pD(e,t,n,r){let i=null;function o(a){if(!S(a))return;let s=a,l=s.func.token;if(l.type==="operator"||l.type==="."||_D.has(l.value)){o(s.func);for(let f of s.args)o(f);return}if(l.modulePath!==r)return;if(!(t>l.position.row||t===l.position.row&&n>l.position.column+l.value.length)){for(let f of s.args)o(f);return}if(s.args.length>0){let f=s.args[s.args.length-1],_=gy(f);if(t>_.row||t===_.row&&n>_.col){for(let p of s.args)o(p);return}}let c=0;for(let f=0;f<s.args.length;f++){let _=s.args[f].token;(t>_.position.row||t===_.position.row&&n>=_.position.column)&&(c=f)}o(s.func);for(let f of s.args)o(f);i||(i={funcExpr:s.func,activeParameter:c})}for(let a of e)o(a);return i}function gy(e){if(Q(e))return{row:e.token.position.row,col:e.token.position.column+e.token.value.length};let t=e,n=gy(t.func);for(let r of t.args){let i=gy(r);(i.row>n.row||i.row===n.row&&i.col>n.col)&&(n=i)}return n}var El=Yn(Na());function dL(e,t){try{let n=t.getModule(e);if(!n)return[];let r=n.evaluator.getTokens(),i=[],o=[];for(let a of r)switch(a.type){case"{":o.push(a);break;case"}":{let s=o.pop();s&&s.position.row<a.position.row&&i.push({startLine:s.position.row,startCharacter:s.position.column,endLine:a.position.row,endCharacter:a.position.column+1,kind:El.FoldingRangeKind.Region});break}case"(":o.push(a);break;case")":{let s=o.pop();s&&s.position.row<a.position.row&&i.push({startLine:s.position.row,startCharacter:s.position.column,endLine:a.position.row,endCharacter:a.position.column+1,kind:El.FoldingRangeKind.Region});break}case"multi_line_comment":case"doc_block_comment":case"inner_doc_block_comment":{let s=a.value.split(`
11936
11936
  `);s.length>1&&i.push({startLine:a.position.row,endLine:a.position.row+s.length-1,kind:El.FoldingRangeKind.Comment});break}}return dD(r,i),i}catch{return[]}}function dD(e,t){let n=null,r=-2;for(let i of e)(i.type==="single_line_comment"||i.type==="doc_line_comment"||i.type==="inner_doc_line_comment")&&(i.position.row===r+1||(n!==null&&r>n&&t.push({startLine:n,endLine:r,kind:El.FoldingRangeKind.Comment}),n=i.position.row),r=i.position.row);n!==null&&r>n&&t.push({startLine:n,endLine:r,kind:El.FoldingRangeKind.Comment})}var Fi=(0,Gi.createConnection)(Gi.ProposedFeatures.all,new Gi.StreamMessageReader(process.stdin),new Gi.StreamMessageWriter(process.stdout)),q_=new Gi.TextDocuments(Yc),qi;Fi.onInitialize(e=>{let t;return e.workspaceFolders&&e.workspaceFolders.length>0&&(t=void 0),qi=new R_(t),qi.attachToDocuments(q_,n=>{let r=q_.get(n),i=JF(n,qi,r==null?void 0:r.getText());Fi.sendDiagnostics({uri:n,diagnostics:i})}),{capabilities:{textDocumentSync:Gi.TextDocumentSyncKind.Full,hoverProvider:!0,completionProvider:{triggerCharacters:[".",":","("],resolveProvider:!1},definitionProvider:!0,documentSymbolProvider:!0,referencesProvider:!0,renameProvider:{prepareProvider:!0},signatureHelpProvider:{triggerCharacters:["(",","]},foldingRangeProvider:!0}}});Fi.onHover(e=>eL(e.textDocument.uri,e.position.line,e.position.character,qi));Fi.onCompletion(e=>{let t=q_.get(e.textDocument.uri);if(!t)return[];let n=t.getText({start:{line:e.position.line,character:0},end:{line:e.position.line+1,character:0}})??"";return iL(e.textDocument.uri,e.position.line,e.position.character,n,qi)});Fi.onDefinition(e=>sL(e.textDocument.uri,e.position.line,e.position.character,qi));Fi.onDocumentSymbol(e=>uL(e.textDocument.uri,qi));Fi.onReferences(e=>cL(e.textDocument.uri,e.position.line,e.position.character,qi));Fi.onRenameRequest(e=>fL(e,qi));Fi.onPrepareRename(e=>_L(e.textDocument.uri,e.position.line,e.position.character,qi));Fi.onSignatureHelp(e=>pL(e.textDocument.uri,e.position.line,e.position.character,qi));Fi.onFoldingRanges(e=>dL(e.textDocument.uri,qi));q_.listen(Fi);Fi.listen();