@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.
- package/out/cjs/index.cjs +46 -46
- package/out/cjs/yo-cli.cjs +2 -2
- package/out/cjs/yo-lsp.cjs +54 -54
- package/out/esm/index.mjs +1 -1
- package/out/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
package/out/cjs/yo-lsp.cjs
CHANGED
|
@@ -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
|
|
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&&
|
|
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
|
|
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.`});
|
|
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&&
|
|
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(
|
|
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&>.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&>.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(!
|
|
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&&
|
|
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
|
|
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&<.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&>.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&<.$.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&&
|
|
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(
|
|
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&<.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&>.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&<.$.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(!
|
|
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&&
|
|
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&&
|
|
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(!
|
|
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;
|
|
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||!
|
|
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),
|
|
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;
|
|
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,
|
|
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&&
|
|
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&&
|
|
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&>.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.$||!
|
|
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(
|
|
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,!
|
|
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,
|
|
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=(
|
|
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&&
|
|
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
|
|
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)):
|
|
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),
|
|
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
|
|
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:
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
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.
|
|
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();
|