@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/esm/index.mjs
CHANGED
|
@@ -149,7 +149,7 @@ Given: "${S(t.type)}"`)}}}return{expectedEnv:e.env,givenEnv:t.env}}function vl(e
|
|
|
149
149
|
`)}function gc(e){let t={moduleDoc:null,declarations:[]},n=[],r=null,i="",o=0;for(;o<e.length;){let a=e[o];if(ag(a))if(r===null&&(r=a.position,i=a.modulePath),a.type==="inner_doc_line_comment"){for(n.push($l(a.value)),o++;o<e.length&&e[o].type==="whitespace";){if(e[o].value.includes(`
|
|
150
150
|
`)){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(mc(a.value)),o++;continue}if(a.type==="doc_line_comment"){let s=[],l=a.position,u=a.modulePath;for(s.push($l(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($l(e[p].value)),o=p+1;else break}let c={content:s.join(`
|
|
151
151
|
`),inner:!1,position:l,modulePath:u},{name:_,position:f}=yc(e,o);t.declarations.push({comment:c,declarationName:_,declarationPosition:f});continue}if(a.type==="doc_block_comment"){let s={content:mc(a.value),inner:!1,position:a.position,modulePath:a.modulePath};o++;let{name:l,position:u}=yc(e,o);t.declarations.push({comment:s,declarationName:l,declarationPosition:u});continue}o++}return n.length>0&&r!==null&&(t.moduleDoc={content:n.join(`
|
|
152
|
-
`),inner:!0,position:r,modulePath:i}),t}function yc(e,t){let n=t;for(;n<e.length;){let r=e[n];if(sg(r)||og(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 gs(e){return E(e,["->","=>"])?!!(e.$?.isAnonymousFunctionDefinition===!0||F(e)&&F(e.func)&&(E(e.func,V.fn)||E(e.func,V.unsafe_fn)||E(e.func,V.Fn))||!e.$):!1}function hs(e,t){if(!F(e))return!1;if(t(e.func))return!0;for(let n of e.args)if(F(n)&&E(n,"=>")){for(let r of n.args)if(t(r))return!0}else if(t(n))return!0;return!1}function cr(e){if(B(e))return ht(e,V.escape);if(F(e)){if(e.$?.macroExpansion)return cr(e.$.macroExpansion);if(E(e,V.cond)||E(e,V.match))return hs(e,cr);if(gs(e)||F(e.func)&&e.func.$?.value!==void 0&&O(e.func.$.value)&&W(e.func.$.value.value)||F(e.func)&&e.func.$?.value!==void 0&&O(e.func.$.value)&&Zt(e.func.$.value.value))return!1;if(cr(e.func))return!0;for(let t of e.args)if(cr(t))return!0}return!1}function uo(e){if(B(e))return ht(e,V.return)||ht(e,V.escape);if(F(e)){if(E(e,V.return)||E(e,V.escape))return!0;if(e.$?.macroExpansion)return uo(e.$.macroExpansion);if(E(e,V.cond)||E(e,V.match))return hs(e,uo);if(gs(e)||F(e.func)&&e.func.$?.value!==void 0&&O(e.func.$.value)&&W(e.func.$.value.value)||F(e.func)&&e.func.$?.value!==void 0&&O(e.func.$.value)&&Zt(e.func.$.value.value))return!1;if(uo(e.func))return!0;for(let t of e.args)if(uo(t))return!0}return!1}function pn(e){if(F(e)){if(e.func.$?.type?.ioBuiltin==="io_await")return!0;if(e.$?.macroExpansion)return pn(e.$.macroExpansion);if(E(e,V.cond)||E(e,V.match))return hs(e,pn);if(e.func.$?.type?.ioBuiltin==="io_async"||gs(e)||O(e.func.$?.value)&&W(e.func.$.value.value)||F(e.func)&&e.func.$?.value!==void 0&&O(e.func.$.value)&&Zt(e.func.$.value.value))return!1;if(pn(e.func))return!0;for(let t of e.args)if(pn(t))return!0}return!1}function co(e){if(B(e))return ht(e,V.break)||ht(e,V.return)||ht(e,V.escape);if(F(e)){if(E(e,V.return)||E(e,V.escape))return!0;if(e.$?.macroExpansion)return co(e.$.macroExpansion);if(E(e,V.cond)||E(e,V.match))return hs(e,co);if(gs(e)||F(e.func)&&e.func.$?.value!==void 0&&O(e.func.$.value)&&W(e.func.$.value.value)||F(e.func)&&e.func.$?.value!==void 0&&O(e.func.$.value)&&Zt(e.func.$.value.value))return!1;if(co(e.func))return!0;for(let t of e.args)if(co(t))return!0}return!1}var Q={tag:"Unit",type:Yn()};function Xo(e){if(e&&e.tag==="FnCall"&&E(e,":=")){let t=e.args[0];if(t&&t.tag==="Atom"&&t.token.type==="identifier"&&t.$){let n=t.token.value,r=K(t.$.env,n);if(r.length>0)return r[r.length-1].id}}}function vs(e,t){let n=[],r=new Map,i=new Map,o=new Map;if(Lr(e,n,r,i,o,t),e.$?.deferredDropExpressions)for(let a of e.$.deferredDropExpressions)Lr(a,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 Lr(e,t,n,r,i,o,a){switch(e.tag){case"Atom":if(e.$&&e.token.type==="identifier"){let s=e.token.value,l=e.$.type,u=K(e.$.env,s);if(u.length>0){let c=u[u.length-1];if(c&&!n.has(c.id)&&!c.isCompileTimeOnly){let _=`${c.name}:${c.frameLevel}`,f=r.get(_);if(f&&f!==c.id)i.set(c.id,f);else if(c.isOwningTheSameRcValueAs){let p=c.isOwningTheSameRcValueAs;if(!n.has(p.id)){let d={id:p.id,name:p.name,type:p.type,isOwningTheSameRcValueAs:void 0};n.set(p.id,d);let h=`${p.name}:${p.frameLevel}`;r.has(h)||r.set(h,p.id)}}else n.set(c.id,{id:c.id,name:s,type:l,isOwningTheSameRcValueAs:void 0}),r.has(_)||r.set(_,c.id)}}}break;case"FnCall":{if(E(e,V.while)){let s=t.length;Lr(e.func,t,n,r,i,o,e);for(let u of e.args)Lr(u,t,n,r,i,o,e);let l=t.length;if(l>s)for(let u=s;u<l;u++)t[u].isInsideWhile=!0,t[u].whileNestingDepth=(t[u].whileNestingDepth??0)+1,t[u].enclosingWhileExpr||(t[u].enclosingWhileExpr=e);break}if(E(e,V.cond)){hc(e,t,n,r,i,o);break}if(E(e,V.match)){hc(e,t,n,r,i,o);break}if(o.detect(e,a,t),o.shouldSkipBody(e)){if(e.$?.deferredDupExpressions)for(let s of e.$.deferredDupExpressions)Lr(s,t,n,r,i,o,e);break}Lr(e.func,t,n,r,i,o,e);for(let s of e.args)Lr(s,t,n,r,i,o,e);if(e.$?.deferredDropExpressions)for(let s of e.$.deferredDropExpressions)Lr(s,t,n,r,i,o,e);break}}}function hc(e,t,n,r,i,o){if(e.tag!=="FnCall")return;let a=t.length;Lr(e.func,t,n,r,i,o,e);let s=new Map(r),l=[];for(let c of e.args){let _=t.length;Lr(c,t,n,r,i,o,e),l.push(t.slice(_))}r.clear();for(let[c,_]of s)r.set(c,_);let u=Math.max(...l.map(c=>c.length),0);if(u>0){t.splice(a);let c=a;for(let _=0;_<u;_++){let f;for(let p of l)if(_<p.length){f=p[_];break}f&&(f.index=t.length,f.isInsideCond=!0,_===0&&(f.needsOwnCondBranchField=!0),_>0&&(f.condBranchSourceIndex=c),t.push(f))}}}function vc(e){let n=vs(e,{detect(i,o,a){if(i.tag==="FnCall"&&En(i)){let s=i.args[0];if(!s)return;let l=s.$?.type;if(l&&Se(l)){let u=Rt(l);if(!u)return;let c=u.isFuture.outputType,_;if(s.tag==="Atom"&&s.token.type==="identifier"&&s.$){let p=s.token.value,d=K(s.$.env,p);if(d.length>0){let h=d[d.length-1];h.isOwningTheSameRcValueAs?_=h.isOwningTheSameRcValueAs.id:_=h.id}}let f=Xo(o);a.push({index:a.length,expr:i,resultType:c,futureType:u,targetVariableId:f,futureVariableId:_})}}},shouldSkipBody(i){return zt(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 zt(e){return e.tag!=="FnCall"?!1:e.func.$?.type?.ioBuiltin==="io_async"}function En(e){return e.tag!=="FnCall"?!1:e.func.$?.type?.ioBuiltin==="io_await"}function Tc(e){return e.tag!=="FnCall"?!1:e.func.$?.type?.ioBuiltin==="io_state"}function Ts(e){return e.tag!=="FnCall"?!1:e.func.$?.type?.ioBuiltin==="io_spawn"}function Ec(e){return e.tag!=="FnCall"?!1:e.func.$?.type?.ioBuiltin==="join_handle_await"}function Ke(e){return B(e)&&e.token.type==="identifier"||e.token.type==="operator"}function Qo(e,t,n){if(!e.$?.variableName)return;let r=K(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 ai(e){let t=e.$?.env;if(!t)return;let n;if(e.$?.pathCollection)for(let r of e.$.pathCollection)r.length>0&&typeof r[0]=="string"&&(n=r[0]);else B(e)&&(n=e.token.value);if(n){let r=K(t,n),i=r[r.length-1];if(i?.isImplicit)throw m({token:e.token,errorMessage:`Cannot use implicit variable "${i.name}" in assignment. Implicit variables must be passed via using() parameters.`})}}var Es=!0;function Cl({variablesToDrop:e,env:t,context:n}){let r=[],i=t;for(let o of e){let a=Qe(`${k.___drop[0]}(${o.name})`),s=x({expr:a,env:i,context:{...n,expectedType:{env:i,type:Q.type}}});r.push(s),s.$&&s.$.env&&(i=s.$.env)}return{deferredDropExpressions:r.length>0?r:void 0,env:i}}function Zo(e,t,n){if(F(e)&&zt(e))return;if(e.$?.deferredDupExpressions)for(let s of e.$.deferredDupExpressions)Zo(s,t,n);if(F(e)&&F(e.func)&&E(e.func,".",2)&&B(e.func.args[0])&&B(e.func.args[1])&&e.func.args[1].token.value===k.___dup[0]&&e.args.length===0&&e.$?.env){let s=e.func.args[0].token.value,l=K(e.$.env,s);if(l.length>0){let u=l[l.length-1];t.has(u.id)||t.set(u.id,[]),t.get(u.id).push(e)}return}if(F(e)&&E(e,V.while))return;function i(s){if(rt(s.$?.controlFlow))return!0;if(F(s)&&E(s,V.begin)){let l=s.args[s.args.length-1];if(rt(l?.$?.controlFlow)||F(l)&&E(l,V.return))return!0}return!!(F(s)&&E(s,V.return))}function o(s){if(F(s)&&E(s,V.tuple,0))return!0;if(F(s)&&E(s,V.begin)){if(s.args.length===0)return!0;if(s.args.length===1){let l=s.args[0];if(F(l)&&E(l,V.tuple,0))return!0}}return!1}function a(s,l){let u=[],c=[],_=[];for(let p=l;p<s.args.length;p++){let d=s.args[p];if(F(d)&&E(d,"=>",2)){let h=d.args[1],g=$c(h);u.push(g),c.push(i(h)),_.push(o(h))}}let f=new Set;for(let p of u){for(let d of p.dupCalls.keys())f.add(d);for(let d of p.varsWithPartialBranchDups)n.add(d)}if(u.length>0)for(let p of f){let d=[],h=[];for(let g=0;g<u.length;g++){let y=u[g],v=y.dupCalls.has(p),T=c[g];if(v){let $=y.dupCalls.get(p);T?d.push(...$):h.push(...$)}}for(let g of d)t.has(p)||t.set(p,[]),g.__isEarlyReturnDup=!0,t.get(p).push(g);if(h.length>0){let g=0,y=0;for(let v=0;v<u.length;v++)c[v]||(g++,u[v].dupCalls.has(p)&&y++);if(y===g){t.has(p)||t.set(p,[]);for(let v of h)t.get(p).push(v)}else n.add(p)}}}if(F(e)&&E(e,V.cond)){a(e,0);return}if(F(e)&&E(e,V.match)){e.args[0]&&Zo(e.args[0],t,n),a(e,1);return}if(F(e)){Zo(e.func,t,n);for(let s of e.args)Zo(s,t,n)}}function $c(e){let t=new Map,n=new Set;return Zo(e,t,n),{dupCalls:t,varsWithPartialBranchDups:n}}function $s(e){return F(e)&&E(e,V.tuple,0)}function bl(e,t){if(e.$?.deferredDupExpressions&&(e.$.deferredDupExpressions=e.$.deferredDupExpressions.filter(n=>!t.has(n)),e.$.deferredDupExpressions.length===0&&(e.$.deferredDupExpressions=void 0)),F(e)){bl(e.func,t);for(let n of e.args)bl(n,t)}}function lg(e,t){let n=new Set,r=e.args;for(let i=0;i<r.length;i++){let o=r[i];if(!F(o)||!E(o,V.while))continue;let a=o.args[o.args.length-1];if(!(!a||!F(a)||!E(a,V.begin)))for(let s of a.args){if(!F(s)||!E(s,V.match))continue;let l=s.args[0];if(!l||!B(l))continue;let u=l.token.value,c,_,f;for(let $=1;$<s.args.length;$++){let b=s.args[$];if(!F(b)||!E(b,"=>",2))continue;let L=b.args[1];if(!(!F(L)||!E(L,V.begin))){for(let C of L.args)if(F(C)&&E(C,"=",2)){let I=C.args[0];if(B(I)&&I.token.value===u){c=C.args[1],_=C,f=L;break}}if(c)break}}if(!c||!_||!f||!c.$?.deferredDupExpressions||c.$.deferredDupExpressions.length===0)continue;let p;for(let $=0;$<i;$++){let b=r[$];if(F(b)&&E(b,"=",2)){let L=b.args[0];if(B(L)&&L.token.value===u){p=b.args[1];break}if(F(L)&&L.args.length>0&&B(L.args[0])&&L.args[0].token.value===u){p=b.args[1];break}}}if(!p)continue;let d=p.$?.variableName;if(!d||!p.$?.env)continue;let h=K(p.$.env,d);if(h.length===0||h[h.length-1].isOwningTheRcValue||!p.$?.deferredDupExpressions||p.$.deferredDupExpressions.length===0)continue;let y=!1;for(let $=i+1;$<r.length;$++)if(kl(r[$],u)){y=!0;break}if(y)continue;p.$.deferredDupExpressions=void 0,c.$.deferredDupExpressions=void 0;let v=_.$?.variableName;v&&f.$?.deferredDropExpressions&&(f.$.deferredDropExpressions=f.$.deferredDropExpressions.filter($=>ug($)!==v),f.$.deferredDropExpressions.length===0&&(f.$.deferredDropExpressions=void 0)),_.$&&(_.$.variableName=void 0);let T=K(t,u);if(T.length>0){let $=T[T.length-1];t=qe(t,$,{...$,consumedAtToken:$.token})}n.add(u)}}return{optimizedVarNames:n,env:t}}function ug(e){if(F(e)&&e.args.length===0&&F(e.func)&&E(e.func,".",2)&&B(e.func.args[1])&&e.func.args[1].token.value===k.___drop[0]&&B(e.func.args[0]))return e.func.args[0].token.value;if(F(e)&&E(e,k.___drop)&&e.args.length>=1&&B(e.args[0]))return e.args[0].token.value}function kl(e,t){if(B(e)&&e.token.value===t)return!0;if(F(e)){if(kl(e.func,t))return!0;for(let n of e.args)if(kl(n,t))return!0}return!1}function vt({expr:e,env:t,context:n,variablesToAdd:r=[],isEvaluatingFunctionBodyBeginBlock:i=!1}){if(F(e)&&E(e,"_")&&!E(e,V.begin)){let L=e;L.args.some(I=>F(I)&&E(I,":"))||(L.func={...L.func,token:{...L.func.token,value:V.begin[0]}})}if(!F(e)||!E(e,V.begin)){let L={tag:"FnCall",func:{tag:"Atom",token:{...e.token,value:V.begin[0]}},args:[Me(e)],token:{...e.token,value:V.begin[0]}};wr(e,L),e=e}let o=e.args,a=n.expectedType;if(o.length===0)return e.$={env:t,type:Q.type,value:Q,pathCollection:[]},e;t=Ve(t,void 0,!0);for(let L=0;L<r.length;L++){let C=r[L],{env:I}=fe({env:t,variable:C});t=I}let s=o[o.length-1],l,u=!1;for(let L=0;L<o.length;L++){let C=o[L];if(B(C)&&ht(C,V.return)||F(C)&&E(C,V.return)){if(L!==o.length-1&&!(L===o.length-2&&$s(o[o.length-1])))throw m({token:C.token,errorMessage:'The "return" keyword can only be used as the last expression.'});if(F(C)&&he(C,V.return,1),!n.isEvaluatingFunctionBodyOrAsyncBlock)throw m({token:C.token,errorMessage:'The "return" keyword can only be used inside a function body or async block.'});if(l=C,B(C)){C.$={env:t,type:Q.type,value:Q,pathCollection:[],controlFlow:ii("return")},s=C;break}else{he(C,V.return,1);let I=C.args[0],A=x({expr:I,env:t,context:{...n,expectedType:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?{type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t}:n.expectedType}});if(!A.$)throw m({token:I.token,errorMessage:`Return expression is not evaluated correctly:
|
|
152
|
+
`),inner:!0,position:r,modulePath:i}),t}function yc(e,t){let n=t;for(;n<e.length;){let r=e[n];if(sg(r)||og(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 gs(e){return E(e,["->","=>"])?!!(e.$?.isAnonymousFunctionDefinition===!0||e.$?.value!==void 0&&ne(e.$.value)||F(e)&&F(e.func)&&(E(e.func,V.fn)||E(e.func,V.unsafe_fn)||E(e.func,V.Fn))||!e.$):!1}function hs(e,t){if(!F(e))return!1;if(t(e.func))return!0;for(let n of e.args)if(F(n)&&E(n,"=>")){for(let r of n.args)if(t(r))return!0}else if(t(n))return!0;return!1}function cr(e){if(B(e))return ht(e,V.escape);if(F(e)){if(e.$?.macroExpansion)return cr(e.$.macroExpansion);if(E(e,V.cond)||E(e,V.match))return hs(e,cr);if(gs(e)||F(e.func)&&e.func.$?.value!==void 0&&O(e.func.$.value)&&W(e.func.$.value.value)||F(e.func)&&e.func.$?.value!==void 0&&O(e.func.$.value)&&Zt(e.func.$.value.value))return!1;if(cr(e.func))return!0;for(let t of e.args)if(cr(t))return!0}return!1}function uo(e){if(B(e))return ht(e,V.return)||ht(e,V.escape);if(F(e)){if(E(e,V.return)||E(e,V.escape))return!0;if(e.$?.macroExpansion)return uo(e.$.macroExpansion);if(E(e,V.cond)||E(e,V.match))return hs(e,uo);if(gs(e)||F(e.func)&&e.func.$?.value!==void 0&&O(e.func.$.value)&&W(e.func.$.value.value)||F(e.func)&&e.func.$?.value!==void 0&&O(e.func.$.value)&&Zt(e.func.$.value.value))return!1;if(uo(e.func))return!0;for(let t of e.args)if(uo(t))return!0}return!1}function pn(e){if(F(e)){if(e.func.$?.type?.ioBuiltin==="io_await")return!0;if(e.$?.macroExpansion)return pn(e.$.macroExpansion);if(E(e,V.cond)||E(e,V.match))return hs(e,pn);if(e.func.$?.type?.ioBuiltin==="io_async"||gs(e)||O(e.func.$?.value)&&W(e.func.$.value.value)||F(e.func)&&e.func.$?.value!==void 0&&O(e.func.$.value)&&Zt(e.func.$.value.value))return!1;if(pn(e.func))return!0;for(let t of e.args)if(pn(t))return!0}return!1}function co(e){if(B(e))return ht(e,V.break)||ht(e,V.return)||ht(e,V.escape);if(F(e)){if(E(e,V.return)||E(e,V.escape))return!0;if(e.$?.macroExpansion)return co(e.$.macroExpansion);if(E(e,V.cond)||E(e,V.match))return hs(e,co);if(gs(e)||F(e.func)&&e.func.$?.value!==void 0&&O(e.func.$.value)&&W(e.func.$.value.value)||F(e.func)&&e.func.$?.value!==void 0&&O(e.func.$.value)&&Zt(e.func.$.value.value))return!1;if(co(e.func))return!0;for(let t of e.args)if(co(t))return!0}return!1}var Q={tag:"Unit",type:Yn()};function Xo(e){if(e&&e.tag==="FnCall"&&E(e,":=")){let t=e.args[0];if(t&&t.tag==="Atom"&&t.token.type==="identifier"&&t.$){let n=t.token.value,r=K(t.$.env,n);if(r.length>0)return r[r.length-1].id}}}function vs(e,t){let n=[],r=new Map,i=new Map,o=new Map;if(Lr(e,n,r,i,o,t),e.$?.deferredDropExpressions)for(let a of e.$.deferredDropExpressions)Lr(a,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 Lr(e,t,n,r,i,o,a){switch(e.tag){case"Atom":if(e.$&&e.token.type==="identifier"){let s=e.token.value,l=e.$.type,u=K(e.$.env,s);if(u.length>0){let c=u[u.length-1];if(c&&!n.has(c.id)&&!c.isCompileTimeOnly){let _=`${c.name}:${c.frameLevel}`,f=r.get(_);if(f&&f!==c.id)i.set(c.id,f);else if(c.isOwningTheSameRcValueAs){let p=c.isOwningTheSameRcValueAs;if(!n.has(p.id)){let d={id:p.id,name:p.name,type:p.type,isOwningTheSameRcValueAs:void 0};n.set(p.id,d);let h=`${p.name}:${p.frameLevel}`;r.has(h)||r.set(h,p.id)}}else n.set(c.id,{id:c.id,name:s,type:l,isOwningTheSameRcValueAs:void 0}),r.has(_)||r.set(_,c.id)}}}break;case"FnCall":{if(E(e,V.while)){let s=t.length;Lr(e.func,t,n,r,i,o,e);for(let u of e.args)Lr(u,t,n,r,i,o,e);let l=t.length;if(l>s)for(let u=s;u<l;u++)t[u].isInsideWhile=!0,t[u].whileNestingDepth=(t[u].whileNestingDepth??0)+1,t[u].enclosingWhileExpr||(t[u].enclosingWhileExpr=e);break}if(E(e,V.cond)){hc(e,t,n,r,i,o);break}if(E(e,V.match)){hc(e,t,n,r,i,o);break}if(o.detect(e,a,t),o.shouldSkipBody(e)){if(e.$?.deferredDupExpressions)for(let s of e.$.deferredDupExpressions)Lr(s,t,n,r,i,o,e);break}Lr(e.func,t,n,r,i,o,e);for(let s of e.args)Lr(s,t,n,r,i,o,e);if(e.$?.deferredDropExpressions)for(let s of e.$.deferredDropExpressions)Lr(s,t,n,r,i,o,e);break}}}function hc(e,t,n,r,i,o){if(e.tag!=="FnCall")return;let a=t.length;Lr(e.func,t,n,r,i,o,e);let s=new Map(r),l=[];for(let c of e.args){let _=t.length;Lr(c,t,n,r,i,o,e),l.push(t.slice(_))}r.clear();for(let[c,_]of s)r.set(c,_);let u=Math.max(...l.map(c=>c.length),0);if(u>0){t.splice(a);let c=a;for(let _=0;_<u;_++){let f;for(let p of l)if(_<p.length){f=p[_];break}f&&(f.index=t.length,f.isInsideCond=!0,_===0&&(f.needsOwnCondBranchField=!0),_>0&&(f.condBranchSourceIndex=c),t.push(f))}}}function vc(e){let n=vs(e,{detect(i,o,a){if(i.tag==="FnCall"&&En(i)){let s=i.args[0];if(!s)return;let l=s.$?.type;if(l&&Se(l)){let u=Rt(l);if(!u)return;let c=u.isFuture.outputType,_;if(s.tag==="Atom"&&s.token.type==="identifier"&&s.$){let p=s.token.value,d=K(s.$.env,p);if(d.length>0){let h=d[d.length-1];h.isOwningTheSameRcValueAs?_=h.isOwningTheSameRcValueAs.id:_=h.id}}let f=Xo(o);a.push({index:a.length,expr:i,resultType:c,futureType:u,targetVariableId:f,futureVariableId:_})}}},shouldSkipBody(i){return zt(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 zt(e){return e.tag!=="FnCall"?!1:e.func.$?.type?.ioBuiltin==="io_async"}function En(e){return e.tag!=="FnCall"?!1:e.func.$?.type?.ioBuiltin==="io_await"}function Tc(e){return e.tag!=="FnCall"?!1:e.func.$?.type?.ioBuiltin==="io_state"}function Ts(e){return e.tag!=="FnCall"?!1:e.func.$?.type?.ioBuiltin==="io_spawn"}function Ec(e){return e.tag!=="FnCall"?!1:e.func.$?.type?.ioBuiltin==="join_handle_await"}function Ke(e){return B(e)&&e.token.type==="identifier"||e.token.type==="operator"}function Qo(e,t,n){if(!e.$?.variableName)return;let r=K(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 ai(e){let t=e.$?.env;if(!t)return;let n;if(e.$?.pathCollection)for(let r of e.$.pathCollection)r.length>0&&typeof r[0]=="string"&&(n=r[0]);else B(e)&&(n=e.token.value);if(n){let r=K(t,n),i=r[r.length-1];if(i?.isImplicit)throw m({token:e.token,errorMessage:`Cannot use implicit variable "${i.name}" in assignment. Implicit variables must be passed via using() parameters.`})}}var Es=!0;function Cl({variablesToDrop:e,env:t,context:n}){let r=[],i=t;for(let o of e){let a=Qe(`${k.___drop[0]}(${o.name})`),s=x({expr:a,env:i,context:{...n,expectedType:{env:i,type:Q.type}}});r.push(s),s.$&&s.$.env&&(i=s.$.env)}return{deferredDropExpressions:r.length>0?r:void 0,env:i}}function Zo(e,t,n){if(F(e)&&zt(e))return;if(e.$?.deferredDupExpressions)for(let s of e.$.deferredDupExpressions)Zo(s,t,n);if(F(e)&&F(e.func)&&E(e.func,".",2)&&B(e.func.args[0])&&B(e.func.args[1])&&e.func.args[1].token.value===k.___dup[0]&&e.args.length===0&&e.$?.env){let s=e.func.args[0].token.value,l=K(e.$.env,s);if(l.length>0){let u=l[l.length-1];t.has(u.id)||t.set(u.id,[]),t.get(u.id).push(e)}return}if(F(e)&&E(e,V.while))return;function i(s){if(rt(s.$?.controlFlow))return!0;if(F(s)&&E(s,V.begin)){let l=s.args[s.args.length-1];if(rt(l?.$?.controlFlow)||F(l)&&E(l,V.return))return!0}return!!(F(s)&&E(s,V.return))}function o(s){if(F(s)&&E(s,V.tuple,0))return!0;if(F(s)&&E(s,V.begin)){if(s.args.length===0)return!0;if(s.args.length===1){let l=s.args[0];if(F(l)&&E(l,V.tuple,0))return!0}}return!1}function a(s,l){let u=[],c=[],_=[];for(let p=l;p<s.args.length;p++){let d=s.args[p];if(F(d)&&E(d,"=>",2)){let h=d.args[1],g=$c(h);u.push(g),c.push(i(h)),_.push(o(h))}}let f=new Set;for(let p of u){for(let d of p.dupCalls.keys())f.add(d);for(let d of p.varsWithPartialBranchDups)n.add(d)}if(u.length>0)for(let p of f){let d=[],h=[];for(let g=0;g<u.length;g++){let y=u[g],v=y.dupCalls.has(p),T=c[g];if(v){let $=y.dupCalls.get(p);T?d.push(...$):h.push(...$)}}for(let g of d)t.has(p)||t.set(p,[]),g.__isEarlyReturnDup=!0,t.get(p).push(g);if(h.length>0){let g=0,y=0;for(let v=0;v<u.length;v++)c[v]||(g++,u[v].dupCalls.has(p)&&y++);if(y===g){t.has(p)||t.set(p,[]);for(let v of h)t.get(p).push(v)}else n.add(p)}}}if(F(e)&&E(e,V.cond)){a(e,0);return}if(F(e)&&E(e,V.match)){e.args[0]&&Zo(e.args[0],t,n),a(e,1);return}if(F(e)){Zo(e.func,t,n);for(let s of e.args)Zo(s,t,n)}}function $c(e){let t=new Map,n=new Set;return Zo(e,t,n),{dupCalls:t,varsWithPartialBranchDups:n}}function $s(e){return F(e)&&E(e,V.tuple,0)}function bl(e,t){if(e.$?.deferredDupExpressions&&(e.$.deferredDupExpressions=e.$.deferredDupExpressions.filter(n=>!t.has(n)),e.$.deferredDupExpressions.length===0&&(e.$.deferredDupExpressions=void 0)),F(e)){bl(e.func,t);for(let n of e.args)bl(n,t)}}function lg(e,t){let n=new Set,r=e.args;for(let i=0;i<r.length;i++){let o=r[i];if(!F(o)||!E(o,V.while))continue;let a=o.args[o.args.length-1];if(!(!a||!F(a)||!E(a,V.begin)))for(let s of a.args){if(!F(s)||!E(s,V.match))continue;let l=s.args[0];if(!l||!B(l))continue;let u=l.token.value,c,_,f;for(let $=1;$<s.args.length;$++){let b=s.args[$];if(!F(b)||!E(b,"=>",2))continue;let L=b.args[1];if(!(!F(L)||!E(L,V.begin))){for(let C of L.args)if(F(C)&&E(C,"=",2)){let I=C.args[0];if(B(I)&&I.token.value===u){c=C.args[1],_=C,f=L;break}}if(c)break}}if(!c||!_||!f||!c.$?.deferredDupExpressions||c.$.deferredDupExpressions.length===0)continue;let p;for(let $=0;$<i;$++){let b=r[$];if(F(b)&&E(b,"=",2)){let L=b.args[0];if(B(L)&&L.token.value===u){p=b.args[1];break}if(F(L)&&L.args.length>0&&B(L.args[0])&&L.args[0].token.value===u){p=b.args[1];break}}}if(!p)continue;let d=p.$?.variableName;if(!d||!p.$?.env)continue;let h=K(p.$.env,d);if(h.length===0||h[h.length-1].isOwningTheRcValue||!p.$?.deferredDupExpressions||p.$.deferredDupExpressions.length===0)continue;let y=!1;for(let $=i+1;$<r.length;$++)if(kl(r[$],u)){y=!0;break}if(y)continue;p.$.deferredDupExpressions=void 0,c.$.deferredDupExpressions=void 0;let v=_.$?.variableName;v&&f.$?.deferredDropExpressions&&(f.$.deferredDropExpressions=f.$.deferredDropExpressions.filter($=>ug($)!==v),f.$.deferredDropExpressions.length===0&&(f.$.deferredDropExpressions=void 0)),_.$&&(_.$.variableName=void 0);let T=K(t,u);if(T.length>0){let $=T[T.length-1];t=qe(t,$,{...$,consumedAtToken:$.token})}n.add(u)}}return{optimizedVarNames:n,env:t}}function ug(e){if(F(e)&&e.args.length===0&&F(e.func)&&E(e.func,".",2)&&B(e.func.args[1])&&e.func.args[1].token.value===k.___drop[0]&&B(e.func.args[0]))return e.func.args[0].token.value;if(F(e)&&E(e,k.___drop)&&e.args.length>=1&&B(e.args[0]))return e.args[0].token.value}function kl(e,t){if(B(e)&&e.token.value===t)return!0;if(F(e)){if(kl(e.func,t))return!0;for(let n of e.args)if(kl(n,t))return!0}return!1}function vt({expr:e,env:t,context:n,variablesToAdd:r=[],isEvaluatingFunctionBodyBeginBlock:i=!1}){if(F(e)&&E(e,"_")&&!E(e,V.begin)){let L=e;L.args.some(I=>F(I)&&E(I,":"))||(L.func={...L.func,token:{...L.func.token,value:V.begin[0]}})}if(!F(e)||!E(e,V.begin)){let L={tag:"FnCall",func:{tag:"Atom",token:{...e.token,value:V.begin[0]}},args:[Me(e)],token:{...e.token,value:V.begin[0]}};wr(e,L),e=e}let o=e.args,a=n.expectedType;if(o.length===0)return e.$={env:t,type:Q.type,value:Q,pathCollection:[]},e;t=Ve(t,void 0,!0);for(let L=0;L<r.length;L++){let C=r[L],{env:I}=fe({env:t,variable:C});t=I}let s=o[o.length-1],l,u=!1;for(let L=0;L<o.length;L++){let C=o[L];if(B(C)&&ht(C,V.return)||F(C)&&E(C,V.return)){if(L!==o.length-1&&!(L===o.length-2&&$s(o[o.length-1])))throw m({token:C.token,errorMessage:'The "return" keyword can only be used as the last expression.'});if(F(C)&&he(C,V.return,1),!n.isEvaluatingFunctionBodyOrAsyncBlock)throw m({token:C.token,errorMessage:'The "return" keyword can only be used inside a function body or async block.'});if(l=C,B(C)){C.$={env:t,type:Q.type,value:Q,pathCollection:[],controlFlow:ii("return")},s=C;break}else{he(C,V.return,1);let I=C.args[0],A=x({expr:I,env:t,context:{...n,expectedType:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?{type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t}:n.expectedType}});if(!A.$)throw m({token:I.token,errorMessage:`Return expression is not evaluated correctly:
|
|
153
153
|
${w(I)}`});if(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"&&D(n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type)&&n.functionReturnImplConcreteType){let z=A.$.type;if(n.functionReturnImplConcreteType.length>0){let P=n.functionReturnImplConcreteType[0];if(!X({type:P.concreteType,env:P.env},{type:z,env:t}))throw ct([{token:C.token,errorMessage:`All return statements must return the same concrete type for Impl(...).
|
|
154
154
|
Impl(...) uses static dispatch and requires the same concrete type across all returns.
|
|
155
155
|
Consider using Dyn(...) for dynamic dispatch if different concrete types are needed.`},{token:P.token,errorMessage:`First return has concrete type: ${S(P.concreteType)}`},{token:C.token,errorMessage:`Conflicting return has concrete type: ${S(z)}`}])}else n.functionReturnImplConcreteType.push({concreteType:z,env:t,token:C.token})}He(A,!0),t=A.$.env,C.$={env:t,type:A.$.type,value:A.$.value,pathCollection:A.$.pathCollection,variableName:A.$.variableName,controlFlow:ii("return")},s=C;break}}else if(B(C)&&ht(C,V.break)){if(L!==o.length-1&&!(L===o.length-2&&$s(o[o.length-1])))throw m({token:C.token,errorMessage:'The "break" keyword can only be used as the last expression.'});if(!n.isEvaluatingLoopBody)throw m({token:C.token,errorMessage:'The "break" keyword can only be used inside a loop.'});C.$={env:t,type:Q.type,value:Q,pathCollection:[],controlFlow:ii("break")},s=C;break}else if(B(C)&&ht(C,V.continue)){if(L!==o.length-1&&!(L===o.length-2&&$s(o[o.length-1])))throw m({token:C.token,errorMessage:'The "continue" keyword can only be used as the last expression.'});if(!n.isEvaluatingLoopBody)throw m({token:C.token,errorMessage:'The "continue" keyword can only be used inside a loop.'});C.$={env:t,type:Q.type,value:Q,pathCollection:[],controlFlow:ii("continue")},s=C;break}else if(F(C)&&E(C,V.escape)){if(L!==o.length-1&&!(L===o.length-2&&$s(o[o.length-1])))throw m({token:C.token,errorMessage:'The "escape" keyword can only be used as the last expression.'});if(!n.enclosingFunctionReturnType)throw m({token:C.token,errorMessage:'The "escape" keyword can only be used inside a function that has an enclosing function.'});l=C,he(C,V.escape,1);let I=C.args[0],A=x({expr:I,env:t,context:{...n,expectedType:{type:n.enclosingFunctionReturnType,env:t}}});if(!A.$)throw m({token:I.token,errorMessage:`Escape expression is not evaluated correctly:
|