@shd101wyy/yo 0.1.16 → 0.1.17
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 +241 -241
- package/out/cjs/yo-cli.cjs +604 -532
- package/out/cjs/yo-lsp.cjs +298 -298
- package/out/esm/index.mjs +2 -2
- package/out/types/src/doc/builder.d.ts +2 -0
- package/out/types/src/doc/model.d.ts +14 -1
- package/out/types/src/doc-command.d.ts +2 -0
- package/out/types/src/evaluator/builtins/build.d.ts +1 -0
- package/out/types/src/evaluator/index.d.ts +3 -0
- package/out/types/src/evaluator/values/impl.d.ts +14 -0
- package/out/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/scripts/build-site.ts +66 -12
- package/std/build.yo +7 -2
- package/std/collections/array_list.yo +3 -0
package/out/esm/index.mjs
CHANGED
|
@@ -186,7 +186,7 @@ This typically happens when a struct/enum/array/tuple contains fields with confl
|
|
|
186
186
|
|
|
187
187
|
Consider restructuring the type to avoid mixing incompatible field types.`})}function fn(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=[fn(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=>fn(i,t,n))}}case"Struct":{let r=e;return{...r,fields:r.fields.map(i=>fn(i,t,n))}}case"Enum":{let r=e;return{...r,fields:r.fields.map(i=>fn(i,t,n))}}case"Array":{let r=e;return{...r,elements:r.elements.map(i=>fn(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=[fn(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=>fn(i,t,n))}}case"Module":{let r=e;return{...r,fields:r.fields.map(i=>i?fn(i,t,n):void 0)}}case"Trait":{let r=e;return{...r,fields:r.fields.map(i=>i?fn(i,t,n):void 0)}}default:return e}}function Ll({modulePath:e,inputString:t}){return{functionDeclarationFrameLevel:-1,frames:[],modulePath:e,inputString:t}}function ct(){let e=Ll({modulePath:"",inputString:""});return xe(e)}function Il(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=fn(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=fn(o.value[0],!1,t);return{...o,value:[s]}},i=o=>({...o,variables:o.variables.map(r),whereClauseConstraints:Tg(o.whereClauseConstraints)});return{...e,frames:e.frames.map(i)}}function Tg(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 pr({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 Rn(e,t){let n=[],r=[],i=new Set,o=new Set,a=!1,s=new Set;for(let l of e.frames)for(let u of l.variables){let c=u.value?.[0];O(c)&&D(c.value)&&c.value.id===t.id&&s.add(u.name)}for(let l of e.frames)for(let u of l.whereClauseConstraints.values())if(!(u.someType.id!==t.id&&!s.has(u.someType.name))){a=!0;for(let c of u.requiredTraits)i.has(c.id)||(i.add(c.id),n.push(c));for(let c of u.negativeTraits)o.has(c.id)||(o.add(c.id),r.push(c))}if(a)return{requiredTraits:n,negativeTraits:r}}function Vc(e){return`typeapp:${e.constructor.id}:${e.args.map(t=>t.id).join(",")}`}function Nc({env:e,typeApp:t,traitType:n,isNegated:r}){let i=e.frames.length-1,o=e.frames[i];if(!o)return e;let a=Vc(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 Eg(e,t){let n=Vc(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 Dc=null;function Mc(e){Dc=e}function Al(){Dc=null}var $g="__yo_self";function fe({env:e,variable:t,deltaFrame:n,variableId:r,addToBeginBlockFrame:i,allowVariableShadowing:o}){let a=e.frames.length-1+(n??0),s=ut(e.modulePath,t.name);if(i){let d=wg(e);d>=0&&(a=d)}if(t.name!==$g&&!s){let d=H(e,t.name);if(d.length>0&&!o){let h=d[d.length-1];throw pt([{token:t.token,errorMessage:`Failed to define variable "${t.name}":`},{token:h.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??$t(e.modulePath,t.name),c={...t,frameLevel:a,id:u},_=s?bg(l,c):Cg({frame:l,variable:c}),f=e.frames.slice();return f[a]=_,{env:{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,frames:f,modulePath:e.modulePath,inputString:e.inputString},variable:c}}function Cg({frame:e,variable:t}){if(t.name==="_")return e;if(e.variables.some(r=>r.name===t.name))throw pt([{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 bg(e,t){return{id:e.id,variables:[...e.variables,t],isBeginBlockFrame:e.isBeginBlockFrame,whereClauseConstraints:e.whereClauseConstraints}}function kg(e,t,n){let r=e.variables.filter(i=>i.name===t);return n?r.filter(n):r}function H(e,t,n){let r=[];for(let i=0;i<e.frames.length;i++){let o=e.frames[i],a=kg(o,t,n);r.push(...a)}return n?r.filter(n):r}function $n(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 ra(e,t){for(let n=e.frames.length-1;n>=0;n--)if(e.frames[n].variables.some(t))return n;return-1}function xe(e,t={id:$t(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 tt(e,t=!1){let n=e.frames.length-1,r=e.frames[n];if(!t){let i=_o(e),o=r.variables.filter(a=>!a.initializedAtToken);if(i.length>0)throw pt(i.map(a=>({token:a.token,errorMessage:`Variable "${a.name}" was not consumed. It is supposed to be consumed before going out of scope.
|
|
188
188
|
Typeof "${a.name}": ${S(a.type)}`})));if(o.length>0)throw pt(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 Ye(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 Oc(e){return{id:e.id,name:e.name,type:S(e.type),typeId:e.type.id,value:Pe(e.value?.[0]),isCompileTimeOnly:e.isCompileTimeOnly,isUndefined:!e.initializedAtToken,isOwningTheRcValue:!!e.isOwningTheRcValue,isOwningTheSameRcValueAs:e.isOwningTheSameRcValueAs?.name,isReassignable:!!e.isReassignable,isConsumed:!!e.consumedAtToken}}function Rc({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&&G(a.type));if(o&&G(o.type)){let a=o.assignedValue;ue(a)&&(a=Y(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&&mt(a.assignedValue)){let s=a.assignedValue,l=s.type,u=l.fields.findIndex(c=>c.label===n&&G(c.type));if(u>=0){let c=l.fields[u];if(G(c.type)){let _=s.fields[u],f=c.type;J(_)&&_.specializedType&&(f=_.specializedType),i.push({type:f,value:_})}}}if(i.length===0){let a=Hn({concreteType:r,methodName:n,env:e});i.push(...a)}return i}function Sl({env:e,context:t,methodName:n,receiverType:r,isInfixOperatorCall:i}){let o=[],a=r;for(;Ee(a);)a=a.childType;function s(f,p){let d=f.fields.find(h=>h.label===n&&(G(h.type)||Ie(h.type)));if(d){let h;if(G(d.type)){if(ue(p))h=Y(d.type,{variableName:d.label,env:e,context:t});else if(mt(p)){let g=f.fields.findIndex(y=>y.label===d.label);h=p.fields[g]}o.push({type:d.type,value:h})}else if($e(d.type)){let g=d.assignedValue;He(g)&&l(g)}}if(!d)for(let h of f.fields)Ie(h.type)&&h.assignedValue&&s(h.type,h.assignedValue)}function l(f){let p=f.type.fields.findIndex(d=>d.label==="Call");if(p>=0){let d=f.type.fields[p];if(d.assignedValue){let h=d.assignedValue;_n(h)?h.fields.forEach(g=>{o.push({type:g.type,value:g})}):o.push({type:h.type,value:h})}}}function u(f){let p=[];for(let d of f)if(G(d.type)){if(d.type.parameters.length===0)continue;let g=d.type.parameters[0].type;if(!i&&Ee(g)){let v=g.childType,T=r;if((yt(r)||Nt(r)||gt(r))&&(T=ht({type:r,expectedType:void 0,expr:void 0,env:e})),j({type:v,env:d.type.env},{type:T,env:e},!0)){p.push({type:d.type,value:d.value,needsPointerConversion:!0});continue}}if(ye(g)){p.push(d);continue}if(ye(g)&&!ye(r)){p.push(d);continue}if(D(r)&&r.resolvedConcreteType&&!Ae(r)&&!ye(g)&&j({type:g,env:d.type.env},{type:r.resolvedConcreteType,env:e},!0)){p.push(d);continue}if(!ye(g)&&ye(r))continue;if(yt(r)||Nt(r)||gt(r)){let v=ht({type:r,expectedType:void 0,expr:void 0,env:e});if(j({type:g,env:d.type.env},{type:v,env:e},!0)){p.push(d);continue}}if(Se(r)&&d.value===void 0){if(d.type.parameters.length>0&&d.type.SelfType){let T=d.type.parameters[0];if(T){let $=T.type;if(!dt($)&&!Se($)&&!Ee($))continue}}let v=d.type.return.type;if($r(v,d.type.SelfType))continue}j({type:g,env:d.type.env},{type:r,env:e},!0)&&p.push(d)}else p.push(d);return p}function c(f,p,d=new Set){if(d.has(f.id))return;d.add(f.id);let h=f.fields.find(g=>g.label===p&&G(g.type));if(h&&G(h.type)){let g=h.assignedValue;ue(g)&&(g=Y(h.type,{variableName:h.label,env:e,context:t})),o.push({type:h.type,value:g});return}for(let g of f.fields)Ie(g.type)&&g.assignedValue&&s(g.type,g.assignedValue)}if(r!==a&&r.trait){let f=r.trait.fields.find(p=>p.label===n&&G(p.type));if(f&&G(f.type)){let p=f.assignedValue;ue(p)&&(p=Y(f.type,{variableName:f.label,env:e,context:t})),o.push({type:f.type,value:p})}else c(r.trait,n);for(let p of r.trait.fields)if(p.label===""&&p.assignedValue&&mt(p.assignedValue)){let d=p.assignedValue,h=d.type,g=h.fields.findIndex(y=>y.label===n&&G(y.type));if(g>=0){let y=h.fields[g];if(G(y.type)){let v=d.fields[g],T=y.type;J(v)&&v.specializedType&&(T=v.specializedType),o.push({type:T,value:v})}}}}if(o.length===0&&r!==a){let f=Hn({concreteType:r,methodName:n,env:e});o.push(...f)}let _=D(a)&&a.resolvedConcreteType&&!Ae(a);if(a.trait&&!Se(a)&&!_){let f=a.trait.fields.find(p=>p.label===n&&(G(p.type)||$e(p.type)));if(f&&G(f.type)){let p=f.assignedValue;ue(p)&&(p=Y(f.type,{variableName:f.label,env:e,context:t})),o.push({type:f.type,value:p})}else if(f&&$e(f.type)){let p=f.assignedValue;He(p)&&l(p)}else c(a.trait,n);for(let p of a.trait.fields)if(p.label===""&&p.assignedValue&&mt(p.assignedValue)){let d=p.assignedValue,h=d.type,g=h.fields.findIndex(y=>y.label===n&&G(y.type));if(g>=0){let y=h.fields[g];if(G(y.type)){let v=d.fields[g],T=y.type;J(v)&&v.specializedType&&(T=v.specializedType),o.push({type:T,value:v})}}}if(o.length===0){let p=Hn({concreteType:a,methodName:n,env:e});o.push(...p)}}if(o.length===0&&Nr(a)){let f=Eg(e,a);if(f)for(let p of f.requiredTraits)c(p,n)}if(yt(a)||Nt(a)||gt(a)){let f=ht({type:a,expectedType:void 0,expr:void 0,env:e});if(f.trait){let p=f.trait.fields.find(d=>d.label===n&&G(d.type));if(p&&G(p.type)){let d=p.assignedValue;ue(d)&&(d=Y(p.type,{variableName:p.label,env:e,context:t})),o.push({type:p.type,value:d})}else c(f.trait,n);for(let d of f.trait.fields)if(d.label===""&&d.assignedValue&&mt(d.assignedValue)){let h=d.assignedValue,g=h.type,y=g.fields.findIndex(v=>v.label===n&&G(v.type));if(y>=0){let v=g.fields[y];if(G(v.type)){let T=h.fields[y],$=v.type;J(T)&&T.specializedType&&($=T.specializedType),o.push({type:$,value:T})}}}if(o.length===0){let d=Hn({concreteType:f,methodName:n,env:e});o.push(...d)}}}if(D(a)){if(a.resolvedConcreteType?.trait&&!Ae(a)){let f=a.resolvedConcreteType,p=f.trait,d=p?.fields.find(h=>h.label===n&&G(h.type));if(d&&G(d.type)){let h=d.assignedValue||Y(d.type,{variableName:d.label,env:e,context:t});o.push({type:d.type,value:h})}if(o.length===0){let h=new Set;if(D(a)){let g=Rn(e,a);if(g)for(let y of g.requiredTraits)h.add(y.id)}for(let g of p?.fields??[])if(g.label===""&&g.assignedValue&&mt(g.assignedValue)){let y=g.assignedValue,v=y.type;if(h.size>0&&!h.has(v.id))continue;let T=v.fields.findIndex($=>$.label===n&&G($.type));if(T>=0){let $=v.fields[T];if(G($.type)){let b=y.fields[T],L=$.type;J(b)&&b.specializedType&&(L=b.specializedType),o.push({type:L,value:b});break}}}}if(o.length===0){let h=Hn({concreteType:f,methodName:n,env:e});o.push(...h)}}if(!(o.length>0)){let f=[],p=new Set;for(let h of a.requiredTraits??[])p.has(h.traitType.id)||(p.add(h.traitType.id),f.push(h.traitType));let d=Rn(e,a);if(d)for(let h of d.requiredTraits)p.has(h.id)||(p.add(h.id),f.push(h));if(D(a))for(let h=e.frames.length-1;h>=0;h--){let g=e.frames[h];for(let y of g.whereClauseConstraints.values())if(j({type:y.someType,env:e},{type:a,env:e},!1))for(let v of y.requiredTraits)p.has(v.id)||(p.add(v.id),f.push(v))}for(let h of f){let g=h.fields.find(y=>y.label===n&&G(y.type));if(g&&G(g.type)){let y={...g.type,SelfType:a},v=!1;if(y.parameters.length>0&&Ee(y.parameters[0].type)){let b=y.parameters[0].type.childType;(D(b)&&b.name==="Self"||j({type:b,env:y.env},{type:r,env:e},!0))&&(v=!0)}let T;if(D(a)){let b=a.definitionFrameLevel;if(b!==void 0&&b>=0){let L=e.frames[b];if(L){let C=L.variables.find(I=>I.name===a.name&&I.value&&O(I.value[0]));if(C?.value&&O(C.value[0])){let I=C.value[0].value;if(I!==a&&!D(I)&&I.trait){for(let A of I.trait.fields)if(A.label===""&&A.assignedValue&&mt(A.assignedValue)&&A.assignedValue.type.id===h.id){let z=A.assignedValue.type.fields.findIndex(P=>P.label===n&&G(P.type));z>=0&&(T=A.assignedValue.fields[z]??A.assignedValue.type.fields[z]?.assignedValue);break}}}}}}let $=T??Y(y,{variableName:g.label,env:e,context:t});o.push({type:y,value:$,needsPointerConversion:v})}}if(o.length===0){for(let h of a.trait.fields)if(h.label===""&&h.assignedValue&&O(h.assignedValue)&&Ie(h.assignedValue.value)){let y=h.assignedValue.value.fields.find(v=>v.label===n&&G(v.type));if(y&&G(y.type)){let v=Y(y.type,{variableName:y.label,env:e,context:t});o.push({type:y.type,value:v})}}}}}if(Se(a)){let f=a.trait.fields.find(d=>d.label===n&&(G(d.type)||Ie(d.type)));if(f&&G(f.type)){let d=f.assignedValue||Y(f.type,{variableName:f.label,env:e,context:t});o.push({type:f.type,value:d})}let p=a.requiredTraits;for(let{traitType:d}of p){let h=d.fields.find(g=>g.label===n&&(G(g.type)||Ie(g.type)));h&&G(h.type)&&h.type.parameters.length>0&&(ye(h.type.parameters[0].type)||ye(r)||j({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 Pc(e){let t=e.frames.map(n=>({...n,variables:n.variables.filter(r=>!r.isImplicit)}));return{...e,frames:t}}function xs(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 _o(e){return e.frames.length===0?[]:e.frames[e.frames.length-1].variables.filter(r=>{if(r.consumedAtToken||!r.isOwningTheRcValue||!Le(r.type)||r.isModuleLevel)return!1;let i=r.type;return!(D(i)&&!i.resolvedConcreteType&&i.requiredTraits.length===0)}).reverse()}function wg(e){for(let t=e.frames.length-1;t>=0;t--)if(e.frames[t]?.isBeginBlockFrame)return t;return-1}var Ig=process.env.YO_SKIP_PRELUDE==="1"||process.env.YO_SKIP_PRELUDE==="true";function Ag(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 ia=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??Fg(t.replace(/^file:\/\//,""),"utf-8"),this.parser=new yi({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}":
|
|
189
|
-
${s instanceof kn||s instanceof Wn?s.toString():s instanceof Error?s.message:String(s)}`)}}getProgram(){return this.program}getTokens(){return this.tokens}evaluateProgram(t,n){let r=Ll({modulePath:this.modulePath,inputString:this.inputString});if(!Ag(this.tokens,"@skip_prelude")&&!Ig){let c="file://"+Lg.join(t,"prelude.yo"),{moduleValue:_,moduleError:f}=n(c);if(f)throw f;if(_&&$e(_.type)){r=xe(r);for(let p=0;p<_.type.fields.length;p++){let d=_.type.fields[p],h=_.fields[p],{env:g}=fe({env:r,variable:{name:d.label,type:d.type,value:h?[h]:void 0,isCompileTimeOnly:!0,initializedAtToken:d.exprs.labelExpr?.token??d.exprs.expr.token,consumedAtToken:void 0,token:d.exprs.labelExpr?.token??d.exprs.expr.token,isOwningTheRcValue:!1}});r=g}}Mc(r)}let o=gc(this.tokens),a=new Map;for(let c of o.declarations)c.declarationPosition&&a.set(Tn({position:c.declarationPosition,modulePath:c.comment.modulePath}),c.comment.content);let{moduleValue:s,env:l,partialModuleError:u}=Cs({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.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}};function eb(...e){process.env.NODE_ENV!=="production"&&process.env.DEBUG&&console.log(...e)}import{existsSync as gT}from"fs";import*as $a from"path";import*as qc from"fs";function Sg(e){switch(e){case"x86_64":case"aarch64":return 64;case"x86":case"arm":case"wasm32":return 32}}var Uc={darwin:"macos",linux:"linux",win32:"windows",freebsd:"freebsd"},zc={x64:"x86_64",arm64:"aarch64",ia32:"x86",arm:"arm"},Vs;function xg(){if(Vs)return Vs;let e=Uc[process.platform];if(!e)throw new Error(`Unsupported host platform: ${process.platform}. Supported: ${Object.keys(Uc).join(", ")}`);let t=zc[process.arch];if(!t)throw new Error(`Unsupported host architecture: ${process.arch}. Supported: ${Object.keys(zc).join(", ")}`);return Vs={platform:e,arch:t},Vs}function Vg(){if(process.platform!=="linux")return"gnu";try{if(qc.readdirSync("/lib").some(n=>n.startsWith("ld-musl-")))return"musl"}catch{}return"gnu"}function Yc(e){switch(e){case"linux":return Vg();case"windows":return"msvc";case"wasi":case"emscripten":return"wasm";case"macos":case"freebsd":return}}function Ng(e,t,n){return n?`${e}-${t}-${n}`:`${e}-${t}`}function Hc(e,t,n){return{arch:e,os:t,abi:n,pointerSizeBits:Sg(e),triple:Ng(e,t,n)}}function si(){let e=xg(),t=Yc(e.platform);return Hc(e.arch,e.platform,t)}var Bc=new Set(["x86_64","aarch64","x86","arm","wasm32"]),Gc=new Set(["linux","macos","windows","freebsd","wasi","emscripten"]),Wc=new Set(["gnu","musl","msvc","none","wasm"]);function jc(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(!Bc.has(r))throw new Error(`Unknown architecture "${r}" in target triple "${e}". Supported: ${[...Bc].join(", ")}`);if(!Gc.has(i))throw new Error(`Unknown OS "${i}" in target triple "${e}". Supported: ${[...Gc].join(", ")}`);let a=r,s=i,l;if(o!==void 0)if(o==="none")l=void 0;else if(Wc.has(o))l=o;else throw new Error(`Unknown ABI "${o}" in target triple "${e}". Supported: ${[...Wc].join(", ")}`);else l=Yc(s);return Hc(a,s,l)}var xl;function oa(){return xl||(xl=si()),xl}function Wt(e){return e.os==="windows"}function Vi(e){return e.os==="linux"}function Jn(e){return e.os==="macos"}function er(e){return e.arch==="wasm32"||e.os==="wasi"||e.os==="emscripten"}function Kc(e){return e.os==="wasi"}function Xc(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 Qc(e){let t=Wt(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 Gr(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 Bn(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 Ni=[...k.__yo_op_add,...k.__yo_op_sub,...k.__yo_op_mul,...k.__yo_op_div,...k.__yo_op_mod,...k.__yo_op_neg,...k.__yo_op_eq,...k.__yo_op_neq,...k.__yo_op_lt,...k.__yo_op_lte,...k.__yo_op_gt,...k.__yo_op_gte,...k.__yo_op_not,...k.__yo_op_bit_and,...k.__yo_op_bit_or,...k.__yo_op_bit_xor,...k.__yo_op_bit_complement,...k.__yo_op_bit_left_shift,...k.__yo_op_bit_right_shift,...k.__yo_ptr_add,...k.__yo_ptr_sub,...k.__yo_ptr_diff,...k.__yo_ptr_eq,...k.__yo_ptr_neq,...k.__yo_ptr_lt,...k.__yo_ptr_lte,...k.__yo_ptr_gt,...k.__yo_ptr_gte,...k.__yo_slice_len,...k.__yo_slice_new,...k.__yo_slice_ptr,...k.__yo_as,...k.__yo_getrandom,...k.__yo_arc4random_buf,...k.__yo_bcrypt_gen_random,...k.__yo_getentropy,...k.__yo_maybe_uninit_new,...k.__yo_maybe_uninit_as_ptr,...k.__yo_maybe_uninit_assume_init,...k.__yo_array_index,...k.__yo_slice_index,...k.__yo_array_index_range,...k.__yo_array_index_range_inclusive,...k.__yo_slice_index_range,...k.__yo_slice_index_range_inclusive,...k.__yo_noop,...k.__yo_return_self,...k.__yo_ms_sleep],Zc=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 se(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 U(e,t){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 n of Object.values(t.types))if(An(n.type)&&n.type.fields.length===1&&We(n.type.fields[0].type))return n.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 i=tn(e);if(i)return U(i,t)}let n;switch(e.tag){case"Tuple":n="tuple";break;case"Struct":n="struct";break;case"Union":n="union";break;case"Enum":n="enum";break;default:throw new Error("Unreachable")}let r=t.types[e.id]?.cName;if(!r)throw new Error(`No C type name found for ${n} ${S(e)} (id=${e.id})`);return(e.tag==="Struct"||e.tag==="Enum")&&ce(e)&&e.isReferenceSemantics?`${r}*`:r}case"Function":return"void*";case"Dyn":{let n=t.types[e.id]?.cName;if(!n)throw new Error(`No C type name found for dynamic dispatch type ${S(e)}`);return n}case"Array":{let n=e,r=n.childType,i=n.length;if(ze(i)){let o=U(r,t),a=`Array_${se(o)}_${i.value}`;return t.arrayStructTypes.has(a)||t.arrayStructTypes.set(a,{childType:o,length:typeof i.value=="bigint"?Number(i.value):i.value}),a}break}case"Slice":{let n=e,i=`Slice_${se(U(n.childType,t))}`;return t.sliceStructTypes.has(i)||t.sliceStructTypes.set(i,{childType:U(n.childType,t)}),i}case"SomeType":{let n=e;if(Ae(n)){if(n.resolvedConcreteType?.isExtern)return`${U(n.resolvedConcreteType,t)}*`;let r=t.types[n.id]?.cName;if(r)return`${r}*`;if(n.resolvedConcreteType&&D(n.resolvedConcreteType)&&Ae(n.resolvedConcreteType)){let o=n.resolvedConcreteType,a=t.types[o.id]?.cName;if(a)return`${a}*`}if(n.resolvedConcreteType&&ce(n.resolvedConcreteType)){let o=n.resolvedConcreteType.id;for(let[a,s]of Object.entries(t.types))if(D(s.type)&&Ae(s.type)&&s.type.resolvedConcreteType&&ce(s.type.resolvedConcreteType)&&s.type.resolvedConcreteType.id===o)return`${s.cName}*`}let i=zt(n);if(i){let o=t.types[i.id]?.cName;if(o)return`${o}*`}throw new Error(`Impl(Future) type has no registered concrete type. SomeType ID: ${n.id}, FutureModule: ${i?.id??"none"}. Ensure async blocks are properly analyzed and their state machine types are registered.
|
|
189
|
+
${s instanceof kn||s instanceof Wn?s.toString():s instanceof Error?s.message:String(s)}`)}}getProgram(){return this.program}getTokens(){return this.tokens}evaluateProgram(t,n){let r=Ll({modulePath:this.modulePath,inputString:this.inputString});if(!Ag(this.tokens,"@skip_prelude")&&!Ig){let c="file://"+Lg.join(t,"prelude.yo"),{moduleValue:_,moduleError:f}=n(c);if(f)throw f;if(_&&$e(_.type)){r=xe(r);for(let p=0;p<_.type.fields.length;p++){let d=_.type.fields[p],h=_.fields[p],{env:g}=fe({env:r,variable:{name:d.label,type:d.type,value:h?[h]:void 0,isCompileTimeOnly:!0,initializedAtToken:d.exprs.labelExpr?.token??d.exprs.expr.token,consumedAtToken:void 0,token:d.exprs.labelExpr?.token??d.exprs.expr.token,isOwningTheRcValue:!1}});r=g}}Mc(r)}let o=gc(this.tokens),a=new Map;for(let c of o.declarations)c.declarationPosition&&a.set(Tn({position:c.declarationPosition,modulePath:c.comment.modulePath}),c.comment.content);let{moduleValue:s,env:l,partialModuleError:u}=Cs({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 eb(...e){process.env.NODE_ENV!=="production"&&process.env.DEBUG&&console.log(...e)}import{existsSync as gT}from"fs";import*as $a from"path";import*as qc from"fs";function Sg(e){switch(e){case"x86_64":case"aarch64":return 64;case"x86":case"arm":case"wasm32":return 32}}var Uc={darwin:"macos",linux:"linux",win32:"windows",freebsd:"freebsd"},zc={x64:"x86_64",arm64:"aarch64",ia32:"x86",arm:"arm"},Vs;function xg(){if(Vs)return Vs;let e=Uc[process.platform];if(!e)throw new Error(`Unsupported host platform: ${process.platform}. Supported: ${Object.keys(Uc).join(", ")}`);let t=zc[process.arch];if(!t)throw new Error(`Unsupported host architecture: ${process.arch}. Supported: ${Object.keys(zc).join(", ")}`);return Vs={platform:e,arch:t},Vs}function Vg(){if(process.platform!=="linux")return"gnu";try{if(qc.readdirSync("/lib").some(n=>n.startsWith("ld-musl-")))return"musl"}catch{}return"gnu"}function Yc(e){switch(e){case"linux":return Vg();case"windows":return"msvc";case"wasi":case"emscripten":return"wasm";case"macos":case"freebsd":return}}function Ng(e,t,n){return n?`${e}-${t}-${n}`:`${e}-${t}`}function Hc(e,t,n){return{arch:e,os:t,abi:n,pointerSizeBits:Sg(e),triple:Ng(e,t,n)}}function si(){let e=xg(),t=Yc(e.platform);return Hc(e.arch,e.platform,t)}var Bc=new Set(["x86_64","aarch64","x86","arm","wasm32"]),Gc=new Set(["linux","macos","windows","freebsd","wasi","emscripten"]),Wc=new Set(["gnu","musl","msvc","none","wasm"]);function jc(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(!Bc.has(r))throw new Error(`Unknown architecture "${r}" in target triple "${e}". Supported: ${[...Bc].join(", ")}`);if(!Gc.has(i))throw new Error(`Unknown OS "${i}" in target triple "${e}". Supported: ${[...Gc].join(", ")}`);let a=r,s=i,l;if(o!==void 0)if(o==="none")l=void 0;else if(Wc.has(o))l=o;else throw new Error(`Unknown ABI "${o}" in target triple "${e}". Supported: ${[...Wc].join(", ")}`);else l=Yc(s);return Hc(a,s,l)}var xl;function oa(){return xl||(xl=si()),xl}function Wt(e){return e.os==="windows"}function Vi(e){return e.os==="linux"}function Jn(e){return e.os==="macos"}function er(e){return e.arch==="wasm32"||e.os==="wasi"||e.os==="emscripten"}function Kc(e){return e.os==="wasi"}function Xc(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 Qc(e){let t=Wt(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 Gr(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 Bn(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 Ni=[...k.__yo_op_add,...k.__yo_op_sub,...k.__yo_op_mul,...k.__yo_op_div,...k.__yo_op_mod,...k.__yo_op_neg,...k.__yo_op_eq,...k.__yo_op_neq,...k.__yo_op_lt,...k.__yo_op_lte,...k.__yo_op_gt,...k.__yo_op_gte,...k.__yo_op_not,...k.__yo_op_bit_and,...k.__yo_op_bit_or,...k.__yo_op_bit_xor,...k.__yo_op_bit_complement,...k.__yo_op_bit_left_shift,...k.__yo_op_bit_right_shift,...k.__yo_ptr_add,...k.__yo_ptr_sub,...k.__yo_ptr_diff,...k.__yo_ptr_eq,...k.__yo_ptr_neq,...k.__yo_ptr_lt,...k.__yo_ptr_lte,...k.__yo_ptr_gt,...k.__yo_ptr_gte,...k.__yo_slice_len,...k.__yo_slice_new,...k.__yo_slice_ptr,...k.__yo_as,...k.__yo_getrandom,...k.__yo_arc4random_buf,...k.__yo_bcrypt_gen_random,...k.__yo_getentropy,...k.__yo_maybe_uninit_new,...k.__yo_maybe_uninit_as_ptr,...k.__yo_maybe_uninit_assume_init,...k.__yo_array_index,...k.__yo_slice_index,...k.__yo_array_index_range,...k.__yo_array_index_range_inclusive,...k.__yo_slice_index_range,...k.__yo_slice_index_range_inclusive,...k.__yo_noop,...k.__yo_return_self,...k.__yo_ms_sleep],Zc=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 se(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 U(e,t){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 n of Object.values(t.types))if(An(n.type)&&n.type.fields.length===1&&We(n.type.fields[0].type))return n.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 i=tn(e);if(i)return U(i,t)}let n;switch(e.tag){case"Tuple":n="tuple";break;case"Struct":n="struct";break;case"Union":n="union";break;case"Enum":n="enum";break;default:throw new Error("Unreachable")}let r=t.types[e.id]?.cName;if(!r)throw new Error(`No C type name found for ${n} ${S(e)} (id=${e.id})`);return(e.tag==="Struct"||e.tag==="Enum")&&ce(e)&&e.isReferenceSemantics?`${r}*`:r}case"Function":return"void*";case"Dyn":{let n=t.types[e.id]?.cName;if(!n)throw new Error(`No C type name found for dynamic dispatch type ${S(e)}`);return n}case"Array":{let n=e,r=n.childType,i=n.length;if(ze(i)){let o=U(r,t),a=`Array_${se(o)}_${i.value}`;return t.arrayStructTypes.has(a)||t.arrayStructTypes.set(a,{childType:o,length:typeof i.value=="bigint"?Number(i.value):i.value}),a}break}case"Slice":{let n=e,i=`Slice_${se(U(n.childType,t))}`;return t.sliceStructTypes.has(i)||t.sliceStructTypes.set(i,{childType:U(n.childType,t)}),i}case"SomeType":{let n=e;if(Ae(n)){if(n.resolvedConcreteType?.isExtern)return`${U(n.resolvedConcreteType,t)}*`;let r=t.types[n.id]?.cName;if(r)return`${r}*`;if(n.resolvedConcreteType&&D(n.resolvedConcreteType)&&Ae(n.resolvedConcreteType)){let o=n.resolvedConcreteType,a=t.types[o.id]?.cName;if(a)return`${a}*`}if(n.resolvedConcreteType&&ce(n.resolvedConcreteType)){let o=n.resolvedConcreteType.id;for(let[a,s]of Object.entries(t.types))if(D(s.type)&&Ae(s.type)&&s.type.resolvedConcreteType&&ce(s.type.resolvedConcreteType)&&s.type.resolvedConcreteType.id===o)return`${s.cName}*`}let i=zt(n);if(i){let o=t.types[i.id]?.cName;if(o)return`${o}*`}throw new Error(`Impl(Future) type has no registered concrete type. SomeType ID: ${n.id}, FutureModule: ${i?.id??"none"}. Ensure async blocks are properly analyzed and their state machine types are registered.
|
|
190
190
|
resolvedConcreteType: ${n.resolvedConcreteType?.id??"none"}
|
|
191
191
|
registered type IDs: ${Object.keys(t.types).filter(o=>o.startsWith("sometype")).join(", ")}`)}return Jt(n)&&n.resolvedConcreteType||n.resolvedConcreteType?U(n.resolvedConcreteType,t):"void*"}case"Ptr":{let r=e.childType;if(We(r)){let a=U(r.childType,t),s=`Slice_${se(a)}`;return t.sliceStructTypes.has(s)||t.sliceStructTypes.set(s,{childType:a}),`${s}*`}let i=U(r,t);return dt(r)?`${i}*`:he(r)&&tn(r)?`${i}*`:`${i}*`}case"Iso":{let n=e,r=n.childType,i=U(r,t),o=i.replace(/\*/g,"").trim(),a=`Iso_${se(o)}`;return t.isoTypes||(t.isoTypes=new Map),t.isoTypes.has(a)||t.isoTypes.set(a,{childTypeCName:i,isoType:n}),a}}return`// Unknown type: ${S(e)}`}function _t(e,t,n){let r=se(t);return`${U(e,n)} ${r}`}function Xt(e,t,n){let r=n.types[e.id]?.cName;if(!r)throw new Error(`No C type name found for enum ${e.typeName} (${S(e)})`);return`${r.toUpperCase()}_${t.toUpperCase()}`}function li(e){return e.type.return.isCompileTimeOnly}function Ir(e){let t=e.body,n=null;return F(t)&&E(t,"begin")&&t.args.length===1&&F(t.args[0])&&E(t.args[0],Ni)?n=t.args[0].func.token.value:F(t)&&E(t,Ni)&&(n=t.func.token.value),n&&k.__yo_as.includes(n)?null:n}function tn(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(Ee(i)){if(n)return null;n=r}else return null}else return null;return t&&n&&n.fields?n.fields[0].type:null}function Pn(e){for(let t of e.variants)if(t.fields&&t.fields.length>0)return!1;return e.variants.length>0}function Te(e,t){if(!t)return se(e);let n=H(t,e);if(n.length>0){let r=n[n.length-1];return se(r.name,r.type.isExtern==="c")}return se(e)}function Ns(e){if(F(e)&&e.args.length>=1){let t=e.args[0];if(t&&B(t))return t.token.value}if(F(e)&&e.args.length===0&&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])return e.func.args[0].token.value}function Nn(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)return;let t=e.args[0];if(!(!t||!B(t)))return t.token.value}function aa(e){if(e){if(Gt(e))return e;if(F(e)){let t=e;for(let n of t.args){let r=aa(n);if(r)return r}}}}var Vl;function Jc(e){Vl=e}function R(e,t,n){if(!Vl)throw new Error("Internal Error: generateExpr function is not set.");return Vl(e,t,n)}function Wr(e,t,n){let r=D(t)&&t.resolvedConcreteType?t.resolvedConcreteType:t;if(!Le(r))return"";if(we(r)){let i=r.length;if(!ze(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=Wr(`(${e}).data[i]`,r.childType,n);return a&&o.emitLine(` ${a};`),o.emitLine("}"),""}if(Ve(r)){let i=n.emitter;for(let o=0;o<r.fields.length;o++){let a=r.fields[o].type,s=D(a)&&a.resolvedConcreteType?a.resolvedConcreteType:a;if(Le(s)){let l=Wr(`(${e})._${o}`,a,n);l&&i.emitLine(`${l};`)}}return""}if(Se(r))return`__yo_decr_rc((void*)(${e}).data)`;if(gr(r))return`__yo_decr_rc_atomic((void*)(${e}))`;if(dt(r))return`__yo_decr_rc((void*)(${e}))`;if(It(r))return`__yo_decr_rc_atomic((void*)(${e}))`;if(ce(r)||he(r)){let i=tr(r,n);if(i)return`${i}(${e})`}return""}function po(e,t,n){let r=D(t)&&t.resolvedConcreteType?t.resolvedConcreteType:t;if(we(r)){let i=r.length;if(!ze(i))return"/* Error: array has non-constant length */";let o=`temp_dup_${Ue("")}`,a=`i_${Ue("")}`,s=U(r,n),l=n.emitter;l.emitLine(`${s} ${o} = ${e};`),l.emitLine(`for (size_t ${a} = 0; ${a} < ${i.value}; ${a}++) {`);let u=po(`${o}.data[${a}]`,r.childType,n);return l.emitLine(` ${o}.data[${a}] = ${u};`),l.emitLine("}"),o}if(Ve(r)){let i=n.emitter,o=`temp_dup_tuple_${Ue("")}`,a=U(r,n);i.emitLine(`${a} ${o} = ${e};`);for(let s=0;s<r.fields.length;s++){let l=r.fields[s].type,u=D(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(Le(u)){let c=po(`${o}._${s}`,l,n);i.emitLine(`${o}._${s} = ${c};`)}}return o}if(Se(r))return`((${U(r,n)}){ .data = __yo_incr_rc((void*)(${e}).data), .vtable = (${e}).vtable })`;if(gr(r))return`((${U(r,n)})__yo_incr_rc_atomic((void*)(${e})))`;if(dt(r))return`((${U(r,n)})__yo_incr_rc((void*)(${e})))`;if(It(r))return`((${U(r,n)})__yo_incr_rc_atomic((void*)(${e})))`;if(ce(r)||he(r)){let i=Cn(r,n);if(i)return`${i}(${e})`}return e}function tr(e,t){if(ce(e)||he(e)||Se(e)||D(e)||It(e)){let n=e.trait.fields.find(r=>r.label===k.___drop[0]);if(n&&n.assignedValue&&J(n.assignedValue))return t.functions[n.assignedValue.funcId]?.cName}}function Cn(e,t){if(ce(e)||he(e)||Se(e)||D(e)||It(e)){let n=e.trait.fields.find(r=>r.label===k.___dup[0]);if(n&&n.assignedValue&&J(n.assignedValue))return t.functions[n.assignedValue.funcId]?.cName}}function Ct(e,t,n){let r=n.emitter;if(e.$?.deferredDropExpressions)for(let i of e.$.deferredDropExpressions){if(n.shortCircuitHandledDropVarNames){let a=Nn(i);if(a&&n.shortCircuitHandledDropVarNames.has(a)){n.shortCircuitHandledDropVarNames.delete(a);continue}}let o=R(i,t,n);o&&r.emitLine(`${t}${o};`)}}function st(e,t,n){let r=n.emitter;if(e.$?.deferredDupExpressions){for(let i of e.$.deferredDupExpressions)if(F(i)){let o=R(i,t,n);o&&r.emitLine(`${t}${o};`)}}}function an(e,t,n){if(ze(e)){let r=(typeof e.value=="bigint",e.value.toString());return e.tag==="F32"?(r.includes(".")?r:r+".0")+"f":e.tag==="F64"||e.tag==="ComptimeFloat"?r.includes(".")?r:r+".0":e.tag==="U64"||e.tag==="Usize"?r+"ULL":e.tag==="I64"||e.tag==="Isize"?r+"LL":e.tag==="U32"?r+"U":r}else{if(qe(e))return e.value?"true":"false";if(Fe(e)){let r=n?.$?.convertedRuntimeType||n?.$?.type;if(r&&An(r)&&r.fields.length===1){let i=r.fields[0].type;if(We(i)){let o=U(r,t),a=JSON.stringify(e.value),s=Buffer.byteLength(e.value,"utf8");return`(${o}){ .data = (uint8_t*)${a}, .length = ${s} }`}}if(r&&We(r)){let i=U(r,t),o=JSON.stringify(e.value),a=Buffer.byteLength(e.value,"utf8");return`(${i}){ .data = (uint8_t*)${o}, .length = ${a} }`}if(!r||gt(r)){for(let i of Object.values(t.types))if(An(i.type)&&i.type.fields.length===1&&We(i.type.fields[0].type)){let o=JSON.stringify(e.value),a=Buffer.byteLength(e.value,"utf8");return`(${i.cName}){ .data = (uint8_t*)${o}, .length = ${a} }`}}return JSON.stringify(e.value)}else if(wt(e)){let r=e.type,i=tn(r);if(i){let l=r.variants.find(u=>u.name===e.variantName);if(!l)return`// Error: Variant ${e.variantName} not found in enum`;if(!l.fields||l.fields.length===0)return"NULL";if(l.fields.length===1&&e.fields.length===1)return an(e.fields[0],t,{$:{type:i,convertedRuntimeType:i}})}if(Pn(r))return Xt(r,e.variantName,t);let a=t.types[r.id]?.cName;if(!a)return`// Error: No C type name found for enum ${S(r)}`;let s=Xt(r,e.variantName,t);if(!e.fields||e.fields.length===0)return`(${a}){ .tag = ${s} }`;{let l=r.variants.find(c=>c.name===e.variantName);if(!l||!l.fields)return`// Error: Variant ${e.variantName} not found or has no fields`;let u=e.fields.map((c,_)=>{let f=l.fields[_];if(f&&!me(f.type)){let p=se(f.label),d=an(c,t);return`.${p} = ${d}`}return null}).filter(c=>c!==null);return u.length===0?`(${a}){ .tag = ${s} }`:`(${a}){ .tag = ${s}, .data = { .${e.variantName} = { ${u.join(", ")} } } }`}}else if(_n(e)){let r=e.type,i=t.types[r.id]?.cName;if(!i)return`// Error: No C type name found for tuple ${S(r)}
|
|
192
192
|
`;let o=e.fields.map((a,s)=>{let l=an(a,t);return`._${s} = ${l}`});return`(${i}){ ${o.join(", ")} }`}else if(Rt(e)){let r=e.type;if(r&&ce(r)){let i=t.types[r.id]?.cName;if(!i)return`// Error: No C type name found for struct ${S(r)}
|
|
@@ -11335,7 +11335,7 @@ ${w(d)}`});if(gi(h.$.type)){let g=h.$.value;Su(g)&&g.elements.every(y=>Ht(y))&&(
|
|
|
11335
11335
|
${w(d)}`})}else a.push(ga({expr:u,env:t,context:{...n}}))}return{...e,func:o,args:a}}}}function Vd({expr:e,env:t,context:n}){ve(e,V.quote,1);let r=ga({expr:e.args[0],env:t,context:{...n}}),i=sn(r);return e.$={env:t,type:i.type,value:i,pathCollection:[]},e}function Nd({expr:e,env:t,context:n}){if(e.args.length!==1&&e.args.length!==2)throw m({token:e.token,errorMessage:`"macro_expand" expects 1 or 2 arguments, but got ${e.args.length}`});let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for "macro_expand":
|
|
11336
11336
|
${r.toString()}`});if(t=i.$.env,!Dt(i.$.type))throw m({token:r.token,errorMessage:`The argument expression for "macro_expand" must be an Expr value, but got: ${S(i.$.type)}`});let o=null;if(e.args.length===2){let s=e.args[1],l=x({expr:s,env:t,context:{...n}});if(!l.$)throw m({token:s.token,errorMessage:`Failed to evaluate the level argument expression for "macro_expand":
|
|
11337
11337
|
${s.toString()}`});if(!yt(l.$.type))throw m({token:s.token,errorMessage:`The level argument for "macro_expand" must be a comptime_int value, but got: ${S(l.$.type)}`});if(!Ln(l.$.value))throw m({token:s.token,errorMessage:'The level argument for "macro_expand" must be a comptime_int value'});let u=l.$.value.value;if(o=typeof u=="bigint"?Number(u):u,o<0)throw m({token:s.token,errorMessage:`The level argument for "macro_expand" must be non-negative, but got: ${o}`})}let a=i.$.value;if(Ht(a)){let s=a.value,l=t,u=0;for(;F(s)&&(o===null||u<o);)try{let c=jn({expr:s,env:l,context:{...n},forMacroExpansion:!0});if(!c.$)break;if(l=c.$.env,Ht(c.$.value)){let _=c.$.value.value;if(w(_)===w(s))break;s=_,u++}else break}catch(c){if(c instanceof kn&&c.isAssertionError)throw c;break}s=ga({expr:s,env:l,context:{...n}}),e.$={env:l,type:jt(),value:sn(s),pathCollection:i.$.pathCollection}}else e.$={env:t,type:i.$.type,value:i.$.value,pathCollection:i.$.pathCollection};return e}function Dd({expr:e,env:t,context:n}){if(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind!=="function-body"&&n.isEvaluatingFunctionBodyOrAsyncBlock?.kind!=="test-block")throw m({token:e.token,errorMessage:"panic() can only be called inside a function body or test block"});if(n.isAnalyzingCtfeCapability)throw m({token:e.token,errorMessage:'Cannot use "panic" during compile-time function evaluation analysis. Functions containing "panic" cannot be evaluated at compile time.'});let r=n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:K.type;if(e.args.length>0){let i=e.args[0],o=x({expr:i,env:t,context:{...n}});if(!o.$)throw m({token:i.token,errorMessage:"Failed to evaluate panic message"});let a=o.$.type,s=o.$.value,l=a&&An(a)&&a.typeName==="str",u=s&&(Fe(s)||ue(s)&>(s.type));if(!l&&!u)throw m({token:i.token,errorMessage:"panic message must be a comptime_string or str"})}return e.$={env:t,type:r,value:void 0,pathCollection:[]},e}var Rd=new Set(["reg","reg_byte","reg_abcd","xmm_reg","ymm_reg","imm","mem"]),lu=new Set(["in"]),uu=new Set(["out","lateout"]),Pd=new Set(["inout","inlateout"]),Ud=new Set(["const_val","sym"]),hv=new Set([...lu,...uu,...Pd,...Ud,"clobber","clobber_abi","asm_options"]),Md=new Set(["pure","nomem","readonly","nostack","preserves_flags","att_syntax","intel_syntax","volatile","noreturn"]);function su(e){return hr(e)||vr(e)||Ee(e)||vn(e)}function vv(e){return e.tag==="Atom"&&Rd.has(e.token.value)}function Tv(e){return!F(e)||e.func.tag!=="Atom"?!1:hv.has(e.func.token.value)}function Od(e){return e.tag==="Atom"&&e.token.value==="_"}function Ev(e,t,n){if(e.tag==="Atom"&&Rd.has(e.token.value))return e.token.value;let r=x({expr:e,env:t,context:{...n}});if(r.$?.value&&Fe(r.$.value))return r.$.value.value;if(E(e,"raw",1)){let o=e.args[0],a=x({expr:o,env:t,context:{...n}});if(a.$?.value&&Fe(a.$.value))return`raw:${a.$.value.value}`}throw m({token:e.token,errorMessage:'Invalid asm constraint. Expected a register class (reg, imm, mem, ...), an explicit register name string, or raw("constraint").'})}function $v(e,t,n,r){let i=e.args;if(r==="const_val"||r==="sym")return Cv(e,t,n,r);if(i.length<1||i.length>3)throw m({token:e.token,errorMessage:`asm ${r}() expects 1 to 3 arguments, got ${i.length}.`});let o,a;if(i.length>=2){let h=i[0];if(vv(h))a=0;else if(Od(h))a=0;else{let g=x({expr:h,env:t,context:{...n}});g.$?.value&&Fe(g.$.value)?(o=g.$.value.value,a=1):a=0}}else a=0;let s=a<i.length-1,l,u;s?(l=Ev(i[a],t,n),u=a+1):(o!==void 0&&(l=o),u=a);let c=i[u];if(!c)throw m({token:e.token,errorMessage:`asm ${r}() is missing its value/type argument.`});let _=lu.has(r);if(uu.has(r)){if(Od(c))return{kind:r,name:o,constraint:l,valueExpr:void 0,outputType:void 0,targetVarName:void 0,discarded:!0};if(c.tag==="Atom"){let g=c.token.value,y=H(t,g);if(y.length>0){let v=y[y.length-1];if(!(v.value&&O(v.value[0]))){let T=v.type;if(!su(T))throw m({token:c.token,errorMessage:`asm ${r}() target variable '${g}' has type that is not valid for inline assembly. Must be a primitive numeric, pointer, or bool type.`});let $;return v.initializedAtToken?$=x({expr:c,env:t,context:{...n}}):($=c,$.$={env:t,type:T,value:void 0,pathCollection:[]}),{kind:r,name:o,constraint:l,valueExpr:$,outputType:T,targetVarName:g,discarded:!1}}}}let h=x({expr:c,env:t,context:{...n}});if(h.$?.value&&O(h.$.value)){let g=h.$.value.value;if(!su(g))throw m({token:c.token,errorMessage:`asm ${r}() output type must be a primitive numeric, pointer, or bool type.`});return{kind:r,name:o,constraint:l,valueExpr:void 0,outputType:g,targetVarName:void 0,discarded:!1}}throw m({token:c.token,errorMessage:`asm ${r}() last argument must be a type, variable, or _ (discard).`})}let p=x({expr:c,env:t,context:{...n}});if(!p.$)throw m({token:c.token,errorMessage:`Failed to evaluate asm ${r}() value expression.`});let d=p.$.type;if(!su(d))throw m({token:c.token,errorMessage:`asm ${r}() value type is not valid for inline assembly. Must be a primitive numeric, pointer, or bool type.`});return _?{kind:r,name:o,constraint:l,valueExpr:p,outputType:void 0,targetVarName:void 0,discarded:!1}:{kind:r,name:o,constraint:l,valueExpr:p,outputType:d,targetVarName:void 0,discarded:!1}}function Cv(e,t,n,r){let i=e.args;if(i.length<1||i.length>2)throw m({token:e.token,errorMessage:`asm ${r}() expects 1 or 2 arguments, got ${i.length}.`});let o,a=0;if(i.length===2){let u=x({expr:i[0],env:t,context:{...n}});u.$?.value&&Fe(u.$.value)&&(o=u.$.value.value,a=1)}let s=i[a],l=x({expr:s,env:t,context:{...n}});return{kind:r,name:o,constraint:void 0,valueExpr:l,outputType:void 0,targetVarName:void 0,discarded:!1}}function bv(e,t,n){let r={noreturn:!1};for(let i of e.args)if(i.tag==="Atom"){let o=i.token.value;if(!Md.has(o))throw m({token:i.token,errorMessage:`Unknown asm_options flag: '${o}'. Valid flags: ${[...Md].join(", ")}.`});o==="noreturn"&&(r.noreturn=!0)}else throw m({token:e.token,errorMessage:"asm_options() arguments must be flag identifiers (e.g., pure, nomem, noreturn)."});return r}function zd({expr:e,env:t,context:n}){if(n.isEvaluatingFunctionBodyOrAsyncBlock?.kind!=="function-body"&&n.isEvaluatingFunctionBodyOrAsyncBlock?.kind!=="test-block")throw m({token:e.token,errorMessage:"asm() can only be called inside a function body or test block."});if(n.isAnalyzingCtfeCapability)throw m({token:e.token,errorMessage:'Cannot use "asm" during compile-time function evaluation analysis.'});if(e.args.length===0)throw m({token:e.token,errorMessage:"asm() requires at least one argument (the assembly template string)."});let r=[],i=0;for(;i<e.args.length;){let d=e.args[i];if(Tv(d))break;let h=x({expr:d,env:t,context:{...n}});if(h.$?.value&&Fe(h.$.value))r.push(h.$.value.value),i++;else if(h.$?.value&&ue(h.$.value)&>(h.$.value.type))r.push(""),i++;else break}if(r.length===0)throw m({token:e.args[0].token,errorMessage:"First argument to asm() must be a compile-time string (the assembly template)."});let o=[],a={noreturn:!1};for(;i<e.args.length;){let d=e.args[i];if(!F(d))throw m({token:d.token,errorMessage:"asm() arguments after the template must be operand or option calls (in, out, inout, clobber, asm_options, etc.)."});let h=d.func.tag==="Atom"?d.func.token.value:void 0;if(!h)throw m({token:d.token,errorMessage:"asm() operand must be a named call like in(...), out(...), etc."});if(lu.has(h)||uu.has(h)||Pd.has(h)||Ud.has(h))o.push($v(d,t,n,h));else if(h==="clobber"||h==="clobber_abi")for(let g of d.args){if(g.tag==="Atom"&&(g.token.value==="memory"||g.token.value==="cc"))continue;let y=x({expr:g,env:t,context:{...n}});if((!y.$?.value||!Fe(y.$.value))&&!(g.tag==="Atom"&&g.token.value==="memory")&&!(g.tag==="Atom"&&g.token.value==="cc"))throw m({token:g.token,errorMessage:`${h}() arguments must be compile-time strings (e.g., "memory", "cc", "rax").`})}else if(h==="asm_options")a=bv(d,t,n);else throw m({token:d.token,errorMessage:`Unknown asm() operand or option: '${h}'. Expected: in, out, inout, lateout, inlateout, const_val, sym, clobber, clobber_abi, asm_options.`});i++}let s=t;for(let d of o){if(d.targetVarName===void 0||d.kind!=="out"&&d.kind!=="lateout")continue;let h=H(s,d.targetVarName);if(h.length>0){let g=h[h.length-1];g.initializedAtToken||(s=Ye(s,g,{...g,initializedAtToken:e.token}))}}t=s;let l=[];for(let d of o)d.discarded||d.targetVarName===void 0&&(d.kind==="const_val"||d.kind==="sym"||d.kind!=="in"&&d.outputType&&l.push(d.outputType));let u;if(a.noreturn)u=n.isEvaluatingFunctionBodyOrAsyncBlock?.kind==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:K.type;else if(l.length===0)u=K.type;else if(l.length===1)u=l[0];else{let d=l.map((h,g)=>({label:g.toString(),type:h,exprs:{expr:e,labelExpr:void 0,typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:void 0}}));u=lo(d)}let c=r.join(`
|
|
11338
|
-
`),_=/\{([^}:]+)(?::[^}]*)?\}/g,f,p=new Set;for(let d=0;d<o.length;d++)if(o[d].name){if(p.has(o[d].name))throw m({token:e.token,errorMessage:`Duplicate asm operand name: '${o[d].name}'.`});p.add(o[d].name)}for(;(f=_.exec(c))!==null;){let d=f[1];if(d==="{"||d==="}")continue;let h=parseInt(d,10);if(isNaN(h)){if(!p.has(d))throw m({token:e.token,errorMessage:`asm template references undefined operand '{${d}}'.`})}else if(h<0||h>=o.length)throw m({token:e.token,errorMessage:`asm template references positional operand {${h}} but only ${o.length} operands are defined.`})}return e.$={env:t,type:u,value:void 0,pathCollection:[]},e}function Bd({expr:e,env:t,context:n}){if(e.args.length===0)throw m({token:e.token,errorMessage:"global_asm() requires at least one argument (the assembly string)."});let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$?.value||!Fe(i.$.value)&&!(ue(i.$.value)&>(i.$.value.type)))throw m({token:r.token,errorMessage:"global_asm() argument must be a compile-time string."});return e.$={env:t,type:K.type,value:void 0,pathCollection:[]},e}function Gd({expr:e,env:t}){if(E(e,k.__yo_process_platform)){if(e.args.length!==0)throw m({token:e.token,errorMessage:`__yo_process_platform expects 0 arguments, got ${e.args.length}`});let n=oa(),r=n.os,i=Pt(r);return e.$={env:t,type:Ut(),value:i,pathCollection:[]},e}if(E(e,k.__yo_process_arch)){if(e.args.length!==0)throw m({token:e.token,errorMessage:`__yo_process_arch expects 0 arguments, got ${e.args.length}`});let n=oa(),r=n.arch,i=Pt(r);return e.$={env:t,type:Ut(),value:i,pathCollection:[]},e}if(E(e,k.__yo_pointer_size_bits)){if(e.args.length!==0)throw m({token:e.token,errorMessage:`__yo_pointer_size_bits expects 0 arguments, got ${e.args.length}`});let n=sr(),r=Xn(BigInt(n));return e.$={env:t,type:Er(),value:r,pathCollection:[]},e}throw m({token:e.token,errorMessage:`Unknown process function: ${e.func.token.value}`})}var _u=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=[]}},cu,kv,wv=new Map;function Wd(){return kv}function qd(e){return wv.get(e)}function pu(){return cu||(cu=new _u),cu}function Me(e,t,n){if(!Fe(e))throw m({token:n,errorMessage:`Build function: expected comptime_string for "${t}", got ${e?"non-string":"undefined"}`});return e.value}function hn(e,t){return e.$={env:t,type:Yn(),value:K,pathCollection:[]},e}function wo(e,t,n){return e.$={env:t,type:Ut(),value:Pt(n),pathCollection:[]},e}function Fv(e){for(let t of e.args){if(t===void 0)continue;let n=t.$?.value;if(n===void 0||ue(n))return!0}return!1}function Yd({expr:e,env:t}){if(Fv(e)){if(E(e,k.__yo_build_target_host)){let r=si();return wo(e,t,r.triple)}return E(e,k.__yo_build_option)?wo(e,t,""):hn(e,t)}let n=pu();if(E(e,k.__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 r=Me(e.args[0].$?.value,"name",e.token),i=Me(e.args[1].$?.value,"root",e.token),o=e.args.length>2?Me(e.args[2].$?.value,"target",e.token):si().triple,a=e.args.length>3?Me(e.args[3].$?.value,"optimize",e.token):"debug",s=e.args.length>4?Me(e.args[4].$?.value,"allocator",e.token):"mimalloc",l=e.args.length>5?Me(e.args[5].$?.value,"sanitize",e.token):"none";return n.registerExecutable({name:r,root:i,target:o,optimize:a,allocator:s,sanitize:l,linkLibraries:[],includePaths:[],libraryPaths:[],cSources:[],cFlags:[],defines:[],strip:!1,staticLink:!1,runtimeFiles:[],linkedArtifacts:[],linkedSystemLibraries:[],importedModules:[]}),hn(e,t)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"name",e.token),i=Me(e.args[1].$?.value,"root",e.token),o=e.args.length>2?Me(e.args[2].$?.value,"target",e.token):si().triple,a=e.args.length>3?Me(e.args[3].$?.value,"optimize",e.token):"debug";return n.registerStaticLibrary({name:r,root:i,target:o,optimize:a,allocator:"libc",sanitize:"none",linkLibraries:[],includePaths:[],libraryPaths:[],cSources:[],cFlags:[],defines:[],strip:!1,staticLink:!1,runtimeFiles:[],linkedArtifacts:[],linkedSystemLibraries:[],importedModules:[]}),hn(e,t)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"name",e.token),i=Me(e.args[1].$?.value,"root",e.token),o=e.args.length>2?Me(e.args[2].$?.value,"target",e.token):si().triple,a=e.args.length>3?Me(e.args[3].$?.value,"optimize",e.token):"debug";return n.registerSharedLibrary({name:r,root:i,target:o,optimize:a,allocator:"libc",sanitize:"none",linkLibraries:[],includePaths:[],libraryPaths:[],cSources:[],cFlags:[],defines:[],strip:!1,staticLink:!1,runtimeFiles:[],linkedArtifacts:[],linkedSystemLibraries:[],importedModules:[]}),hn(e,t)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"artifact_name",e.token),i=Me(e.args[1].$?.value,"library_name",e.token);if(n.findSystemLibrary(i)){let o=n.findArtifact(r);o&&(o.linkedSystemLibraries.includes(i)||o.linkedSystemLibraries.push(i))}else n.registerLink(r,i);return hn(e,t)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"artifact_name",e.token),i=Me(e.args[1].$?.value,"system_lib_name",e.token),o=n.findArtifact(r);return o&&(o.linkedSystemLibraries.includes(i)||o.linkedSystemLibraries.push(i)),hn(e,t)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"name",e.token),i=Me(e.args[1].$?.value,"root",e.token),o=e.args.length>2?Me(e.args[2].$?.value,"target",e.token):si().triple;return n.registerTest({name:r,root:i,target:o,verbose:!1,bail:!1,parallel:1}),hn(e,t)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"artifact_name",e.token);return n.registerRun(r,[]),hn(e,t)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"name",e.token),i=Me(e.args[1].$?.value,"description",e.token);return n.registerStep(r,i),hn(e,t)}if(E(e,k.__yo_build_doc)){if(e.args.length<9)throw m({token:e.token,errorMessage:`__yo_build_doc expects 9 arguments, got ${e.args.length}`});let r=Me(e.args[0].$?.value,"name",e.token),i=Me(e.args[1].$?.value,"root",e.token),o=Me(e.args[2].$?.value,"output",e.token),a=Me(e.args[3].$?.value,"format",e.token),s=!!e.args[4].$?.value,l=!!e.args[5].$?.value,u=Me(e.args[6].$?.value,"title",e.token),c=Me(e.args[7].$?.value,"logo",e.token),_=Me(e.args[8].$?.value,"favicon",e.token);return n.registerDocumentation({name:r,root:i,outputDir:o,format:a,includePrivate:s,includeDeps:l,title:u,logo:c,favicon:_}),hn(e,t)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"step_name",e.token),i=Me(e.args[1].$?.value,"dep_name",e.token),o=e.args[2].$?.value,a=i;return o&&wt(o)&&o.variantName==="Run"&&(a=`run:${i}`),n.addStepDependency(r,a),hn(e,t)}if(E(e,k.__yo_build_target_host)){let r=si();return wo(e,t,r.triple)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"triple",e.token),i=jc(r);return wo(e,t,i.triple)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"name",e.token),i=Me(e.args[1].$?.value,"url",e.token),o=e.args.length>2?Me(e.args[2].$?.value,"ref",e.token):"HEAD",a=e.args.length>3?Me(e.args[3].$?.value,"path",e.token):"";return n.registerDependency({name:r,url:i,ref:o,path:a}),hn(e,t)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"name",e.token),i=Me(e.args[1].$?.value,"path",e.token);return n.registerPathDependency({name:r,path:i}),hn(e,t)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"name",e.token),i=e.args.length>1?Me(e.args[1].$?.value,"fallback_include",e.token):"",o=e.args.length>2?Me(e.args[2].$?.value,"fallback_lib",e.token):"",a=e.args.length>3?Me(e.args[3].$?.value,"fallback_link",e.token):"",s=e.args.length>4?Me(e.args[4].$?.value,"defines",e.token).split(/\s+/).filter(Boolean):[];return n.registerSystemLibrary({name:r,fallbackInclude:i,fallbackLib:o,fallbackLink:a,defines:s}),hn(e,t)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"name",e.token),i=Me(e.args[1].$?.value,"description",e.token),o=Me(e.args[2].$?.value,"default",e.token);n.declaredOptions.set(r,{description:i,defaultValue:o});let a=n.cliOptions.get(r)??o;return wo(e,t,a)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"dependency_name",e.token),i=Me(e.args[1].$?.value,"artifact_name",e.token);return n.registerDependencyArtifact({dependencyName:r,artifactName:i}),hn(e,t)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"name",e.token),i=Me(e.args[1].$?.value,"root",e.token);return n.registerModule({name:r,root:i,linkedSystemLibraries:[]}),hn(e,t)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"module_name",e.token),i=Me(e.args[1].$?.value,"system_library_name",e.token);return n.registerModuleLink(r,i),hn(e,t)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"artifact_name",e.token),i=Me(e.args[1].$?.value,"import_name",e.token),o=Me(e.args[2].$?.value,"module_name",e.token),a=Me(e.args[3].$?.value,"dependency_name",e.token),s=n.findArtifact(r);if(s){let l=s.importedModules.find(u=>u.importName===i);if(l)throw m({token:e.token,errorMessage:`Duplicate import name "${i}" on artifact "${r}". Already imported from module "${l.moduleName}".`})}return n.registerImportedModule(r,{importName:i,moduleName:o,dependencyName:a}),hn(e,t)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"artifact_name",e.token),i=Me(e.args[1].$?.value,"flags",e.token),o=n.findArtifact(r);if(o){let a=i.trim().split(/\s+/).filter(s=>s.length>0);o.cFlags.push(...a)}return hn(e,t)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"dependency_name",e.token),i=Me(e.args[1].$?.value,"module_name",e.token);return wo(e,t,`${r}\0${i}`)}throw m({token:e.token,errorMessage:`Unknown build function: ${e.func.token.value}`})}function Hd({expr:e,env:t,context:n}){ve(e,k.__yo_address_of,1);let r=e.args[0],i=n.expectedType;i&&Ee(i.type)&&(i={...i,type:i.type.childType});let o=x({expr:r,env:t,context:{...n,expectedType:i}});if(!o.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for reference:
|
|
11338
|
+
`),_=/\{([^}:]+)(?::[^}]*)?\}/g,f,p=new Set;for(let d=0;d<o.length;d++)if(o[d].name){if(p.has(o[d].name))throw m({token:e.token,errorMessage:`Duplicate asm operand name: '${o[d].name}'.`});p.add(o[d].name)}for(;(f=_.exec(c))!==null;){let d=f[1];if(d==="{"||d==="}")continue;let h=parseInt(d,10);if(isNaN(h)){if(!p.has(d))throw m({token:e.token,errorMessage:`asm template references undefined operand '{${d}}'.`})}else if(h<0||h>=o.length)throw m({token:e.token,errorMessage:`asm template references positional operand {${h}} but only ${o.length} operands are defined.`})}return e.$={env:t,type:u,value:void 0,pathCollection:[]},e}function Bd({expr:e,env:t,context:n}){if(e.args.length===0)throw m({token:e.token,errorMessage:"global_asm() requires at least one argument (the assembly string)."});let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$?.value||!Fe(i.$.value)&&!(ue(i.$.value)&>(i.$.value.type)))throw m({token:r.token,errorMessage:"global_asm() argument must be a compile-time string."});return e.$={env:t,type:K.type,value:void 0,pathCollection:[]},e}function Gd({expr:e,env:t}){if(E(e,k.__yo_process_platform)){if(e.args.length!==0)throw m({token:e.token,errorMessage:`__yo_process_platform expects 0 arguments, got ${e.args.length}`});let n=oa(),r=n.os,i=Pt(r);return e.$={env:t,type:Ut(),value:i,pathCollection:[]},e}if(E(e,k.__yo_process_arch)){if(e.args.length!==0)throw m({token:e.token,errorMessage:`__yo_process_arch expects 0 arguments, got ${e.args.length}`});let n=oa(),r=n.arch,i=Pt(r);return e.$={env:t,type:Ut(),value:i,pathCollection:[]},e}if(E(e,k.__yo_pointer_size_bits)){if(e.args.length!==0)throw m({token:e.token,errorMessage:`__yo_pointer_size_bits expects 0 arguments, got ${e.args.length}`});let n=sr(),r=Xn(BigInt(n));return e.$={env:t,type:Er(),value:r,pathCollection:[]},e}throw m({token:e.token,errorMessage:`Unknown process function: ${e.func.token.value}`})}var _u=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=[]}},cu,kv,wv=new Map;function Wd(){return kv}function qd(e){return wv.get(e)}function pu(){return cu||(cu=new _u),cu}function Me(e,t,n){if(!Fe(e))throw m({token:n,errorMessage:`Build function: expected comptime_string for "${t}", got ${e?"non-string":"undefined"}`});return e.value}function hn(e,t){return e.$={env:t,type:Yn(),value:K,pathCollection:[]},e}function wo(e,t,n){return e.$={env:t,type:Ut(),value:Pt(n),pathCollection:[]},e}function Fv(e){for(let t of e.args){if(t===void 0)continue;let n=t.$?.value;if(n===void 0||ue(n))return!0}return!1}function Yd({expr:e,env:t}){if(Fv(e)){if(E(e,k.__yo_build_target_host)){let r=si();return wo(e,t,r.triple)}return E(e,k.__yo_build_option)?wo(e,t,""):hn(e,t)}let n=pu();if(E(e,k.__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 r=Me(e.args[0].$?.value,"name",e.token),i=Me(e.args[1].$?.value,"root",e.token),o=e.args.length>2?Me(e.args[2].$?.value,"target",e.token):si().triple,a=e.args.length>3?Me(e.args[3].$?.value,"optimize",e.token):"debug",s=e.args.length>4?Me(e.args[4].$?.value,"allocator",e.token):"mimalloc",l=e.args.length>5?Me(e.args[5].$?.value,"sanitize",e.token):"none";return n.registerExecutable({name:r,root:i,target:o,optimize:a,allocator:s,sanitize:l,linkLibraries:[],includePaths:[],libraryPaths:[],cSources:[],cFlags:[],defines:[],strip:!1,staticLink:!1,runtimeFiles:[],linkedArtifacts:[],linkedSystemLibraries:[],importedModules:[]}),hn(e,t)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"name",e.token),i=Me(e.args[1].$?.value,"root",e.token),o=e.args.length>2?Me(e.args[2].$?.value,"target",e.token):si().triple,a=e.args.length>3?Me(e.args[3].$?.value,"optimize",e.token):"debug";return n.registerStaticLibrary({name:r,root:i,target:o,optimize:a,allocator:"libc",sanitize:"none",linkLibraries:[],includePaths:[],libraryPaths:[],cSources:[],cFlags:[],defines:[],strip:!1,staticLink:!1,runtimeFiles:[],linkedArtifacts:[],linkedSystemLibraries:[],importedModules:[]}),hn(e,t)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"name",e.token),i=Me(e.args[1].$?.value,"root",e.token),o=e.args.length>2?Me(e.args[2].$?.value,"target",e.token):si().triple,a=e.args.length>3?Me(e.args[3].$?.value,"optimize",e.token):"debug";return n.registerSharedLibrary({name:r,root:i,target:o,optimize:a,allocator:"libc",sanitize:"none",linkLibraries:[],includePaths:[],libraryPaths:[],cSources:[],cFlags:[],defines:[],strip:!1,staticLink:!1,runtimeFiles:[],linkedArtifacts:[],linkedSystemLibraries:[],importedModules:[]}),hn(e,t)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"artifact_name",e.token),i=Me(e.args[1].$?.value,"library_name",e.token);if(n.findSystemLibrary(i)){let o=n.findArtifact(r);o&&(o.linkedSystemLibraries.includes(i)||o.linkedSystemLibraries.push(i))}else n.registerLink(r,i);return hn(e,t)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"artifact_name",e.token),i=Me(e.args[1].$?.value,"system_lib_name",e.token),o=n.findArtifact(r);return o&&(o.linkedSystemLibraries.includes(i)||o.linkedSystemLibraries.push(i)),hn(e,t)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"name",e.token),i=Me(e.args[1].$?.value,"root",e.token),o=e.args.length>2?Me(e.args[2].$?.value,"target",e.token):si().triple;return n.registerTest({name:r,root:i,target:o,verbose:!1,bail:!1,parallel:1}),hn(e,t)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"artifact_name",e.token);return n.registerRun(r,[]),hn(e,t)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"name",e.token),i=Me(e.args[1].$?.value,"description",e.token);return n.registerStep(r,i),hn(e,t)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"name",e.token),i=Me(e.args[1].$?.value,"root",e.token),o=Me(e.args[2].$?.value,"output",e.token),a=Me(e.args[3].$?.value,"format",e.token),s=!!e.args[4].$?.value,l=!!e.args[5].$?.value,u=Me(e.args[6].$?.value,"title",e.token),c=Me(e.args[7].$?.value,"logo",e.token),_=Me(e.args[8].$?.value,"favicon",e.token),f=Me(e.args[9].$?.value,"version",e.token);return n.registerDocumentation({name:r,root:i,outputDir:o,format:a,includePrivate:s,includeDeps:l,title:u,logo:c,favicon:_,version:f}),hn(e,t)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"step_name",e.token),i=Me(e.args[1].$?.value,"dep_name",e.token),o=e.args[2].$?.value,a=i;return o&&wt(o)&&o.variantName==="Run"&&(a=`run:${i}`),n.addStepDependency(r,a),hn(e,t)}if(E(e,k.__yo_build_target_host)){let r=si();return wo(e,t,r.triple)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"triple",e.token),i=jc(r);return wo(e,t,i.triple)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"name",e.token),i=Me(e.args[1].$?.value,"url",e.token),o=e.args.length>2?Me(e.args[2].$?.value,"ref",e.token):"HEAD",a=e.args.length>3?Me(e.args[3].$?.value,"path",e.token):"";return n.registerDependency({name:r,url:i,ref:o,path:a}),hn(e,t)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"name",e.token),i=Me(e.args[1].$?.value,"path",e.token);return n.registerPathDependency({name:r,path:i}),hn(e,t)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"name",e.token),i=e.args.length>1?Me(e.args[1].$?.value,"fallback_include",e.token):"",o=e.args.length>2?Me(e.args[2].$?.value,"fallback_lib",e.token):"",a=e.args.length>3?Me(e.args[3].$?.value,"fallback_link",e.token):"",s=e.args.length>4?Me(e.args[4].$?.value,"defines",e.token).split(/\s+/).filter(Boolean):[];return n.registerSystemLibrary({name:r,fallbackInclude:i,fallbackLib:o,fallbackLink:a,defines:s}),hn(e,t)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"name",e.token),i=Me(e.args[1].$?.value,"description",e.token),o=Me(e.args[2].$?.value,"default",e.token);n.declaredOptions.set(r,{description:i,defaultValue:o});let a=n.cliOptions.get(r)??o;return wo(e,t,a)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"dependency_name",e.token),i=Me(e.args[1].$?.value,"artifact_name",e.token);return n.registerDependencyArtifact({dependencyName:r,artifactName:i}),hn(e,t)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"name",e.token),i=Me(e.args[1].$?.value,"root",e.token);return n.registerModule({name:r,root:i,linkedSystemLibraries:[]}),hn(e,t)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"module_name",e.token),i=Me(e.args[1].$?.value,"system_library_name",e.token);return n.registerModuleLink(r,i),hn(e,t)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"artifact_name",e.token),i=Me(e.args[1].$?.value,"import_name",e.token),o=Me(e.args[2].$?.value,"module_name",e.token),a=Me(e.args[3].$?.value,"dependency_name",e.token),s=n.findArtifact(r);if(s){let l=s.importedModules.find(u=>u.importName===i);if(l)throw m({token:e.token,errorMessage:`Duplicate import name "${i}" on artifact "${r}". Already imported from module "${l.moduleName}".`})}return n.registerImportedModule(r,{importName:i,moduleName:o,dependencyName:a}),hn(e,t)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"artifact_name",e.token),i=Me(e.args[1].$?.value,"flags",e.token),o=n.findArtifact(r);if(o){let a=i.trim().split(/\s+/).filter(s=>s.length>0);o.cFlags.push(...a)}return hn(e,t)}if(E(e,k.__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 r=Me(e.args[0].$?.value,"dependency_name",e.token),i=Me(e.args[1].$?.value,"module_name",e.token);return wo(e,t,`${r}\0${i}`)}throw m({token:e.token,errorMessage:`Unknown build function: ${e.func.token.value}`})}function Hd({expr:e,env:t,context:n}){ve(e,k.__yo_address_of,1);let r=e.args[0],i=n.expectedType;i&&Ee(i.type)&&(i={...i,type:i.type.childType});let o=x({expr:r,env:t,context:{...n,expectedType:i}});if(!o.$)throw m({token:r.token,errorMessage:`Failed to evaluate the argument expression for reference:
|
|
11339
11339
|
${w(r)}`});if(t=o.$.env,O(o.$.value))throw m({token:r.token,errorMessage:`Cannot create a pointer to a type. Did you mean to use "*"?
|
|
11340
11340
|
${w(r)}`});{let a=o.$.type;if(yt(a)||Nt(a)||gt(a)){let c=ht({type:a,expectedType:i?.type,expr:o,env:t});o.$.type=c,o.$.convertedRuntimeType=c,a=c}let s=Ft(a),l=o.$.sourceVariable,u=o.$.comptimeRef;if(u){let c;switch(u.kind){case"array":c=Jr(s,[u.arrayValue],u.index);break;case"comptime_list":c=Jr(s,[u.listValue],u.index);break;case"struct":c=Jr(s,[u.structValue],u.fieldIndex);break;case"tuple":c=Jr(s,[u.tupleValue],u.fieldIndex);break}e.$={env:t,type:s,value:c,pathCollection:o.$.pathCollection,comptimeRef:u}}else if(l&&l.value){let c=Jr(s,l.value);e.$={env:t,type:s,value:c,pathCollection:o.$.pathCollection}}else{let c=o.$.indexTraitPtrType;if(c)e.$={env:t,type:c,value:void 0,pathCollection:o.$.pathCollection,isIndexTraitAddressOf:!0};else if(ue(o.$.value)){let _=Y(s,{env:t,context:n});e.$={env:t,type:s,value:_,pathCollection:o.$.pathCollection}}else e.$={env:t,type:s,value:void 0,pathCollection:o.$.pathCollection}}return Ke(e,!1),e}}function jd({expr:e,env:t,context:n}){ve(e,k.rc,1);let r=e.args[0],i=x({expr:r,env:t,context:{...n}});if(!i.$)throw m({token:r.token,errorMessage:"Failed to evaluate expression."});return t=i.$.env,dn(i.$.type)?e.$={env:t,type:At(),value:void 0,pathCollection:[]}:e.$={env:t,type:At(),value:on("Usize",1),pathCollection:[]},e}function Kd({expr:e,env:t,context:n}){ve(e,k.sizeof,1);let r=e.args[0],i=x({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&&O(i.$.value)?o=i.$.value.value:o=i.$.type;let a=ri(o),s;return a===null?s=Y(At(),{env:t,context:n}):s=on("Usize",Math.ceil(a/8)),e.$={env:t,type:At(),value:s,pathCollection:[]},e}function Xr({expr:e,type:t,env:n,context:r}){if(Ve(t)&&F(e)&&E(e,V.tuple)){if(t.fields.length!==e.args.length)throw m({token:e.token,errorMessage:`Tuple size mismatch: expected ${t.fields.length} fields, got ${e.args.length}`});for(let i=0;i<t.fields.length;i++){let o=t.fields[i].type,a=e.args[i],{env:s}=Xr({expr:a,type:o,env:n,context:{...r}});n=s}return e.$={env:n,type:t,pathCollection:[]},{expr:e,type:t,env:n}}else if(F(e)&&E(e,"_"))if(ce(t)||ot(t)||$e(t)||Ie(t)){let i=jn({expr:e,env:n,givenFunc:{type:kt(t),value:te(t)},context:{...r}});if(!i.$?.type||!i.$?.env)throw m({token:e.token,errorMessage:`Failed to evaluate expr and type for struct:
|
|
11341
11341
|
${w(e)}`});return{expr:i,type:i.$?.type,env:i.$?.env}}else throw m({token:e.token,errorMessage:`Cannot use _ with type ${S(t)}. Only supported with struct types.`});else if(F(e)&&E(e,".",1))if(he(t)){let i=e.args[0];if(!B(i))throw m({token:e.token,errorMessage:`Expected identifier for enum variant, got ${w(i)}`});let o=i.token.value;if(!t.variants.find(l=>l.name===o))throw m({token:e.token,errorMessage:`Enum variant "${o}" not found in ${S(t)}`});let s={...t,selectedVariantName:o};return e.$={type:s,env:n,pathCollection:[]},{expr:e,type:s,env:n}}else throw m({token:e.token,errorMessage:`Cannot use . with type ${S(t)}. Only supported with enum types.`});else if(F(e)&&F(e.func)&&E(e.func,".",1))if(he(t)){let i=e.func,o=i.args[0];if(!B(o))throw m({token:i.token,errorMessage:`Expected identifier for enum variant, got ${w(o)}`});let a=o.token.value;if(!t.variants.find(c=>c.name===a))throw m({token:e.token,errorMessage:`Enum variant "${a}" not found in ${S(t)}`});let l={...t,selectedVariantName:a},u=jn({expr:e,env:n,givenFunc:{type:kt(l),value:te(l)},context:{...r}});if(!u.$?.type||!u.$?.env)throw m({token:e.token,errorMessage:`Failed to evaluate expr and type for enum variant:
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Token } from "../token";
|
|
2
|
+
import type { Environment } from "../env";
|
|
2
3
|
import type { ModuleValue } from "../value";
|
|
3
4
|
import type { DocExtractionResult } from "./extractor";
|
|
4
5
|
import type { DocModule } from "./model";
|
|
@@ -8,6 +9,7 @@ export interface BuildDocModuleOptions {
|
|
|
8
9
|
moduleValue: ModuleValue;
|
|
9
10
|
extraction: DocExtractionResult;
|
|
10
11
|
tokens: Token[];
|
|
12
|
+
env?: Environment;
|
|
11
13
|
includePrivate?: boolean;
|
|
12
14
|
}
|
|
13
15
|
export declare function buildDocModule(options: BuildDocModuleOptions): DocModule;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type DocItemKind = "function" | "struct" | "object" | "enum" | "newtype" | "union" | "trait" | "module" | "constant" | "type-alias" | "type-function";
|
|
1
|
+
export type DocItemKind = "function" | "struct" | "object" | "atomic object" | "enum" | "newtype" | "union" | "trait" | "module" | "constant" | "type-alias" | "type-function";
|
|
2
2
|
export interface DocParam {
|
|
3
3
|
name: string;
|
|
4
4
|
type: string;
|
|
@@ -24,6 +24,17 @@ export interface DocAssociatedType {
|
|
|
24
24
|
doc?: string;
|
|
25
25
|
constraint?: string;
|
|
26
26
|
}
|
|
27
|
+
export interface DocImplAssocType {
|
|
28
|
+
name: string;
|
|
29
|
+
type: string;
|
|
30
|
+
doc?: string;
|
|
31
|
+
}
|
|
32
|
+
export interface DocImpl {
|
|
33
|
+
signature: string;
|
|
34
|
+
traitName?: string;
|
|
35
|
+
methodNames: string[];
|
|
36
|
+
associatedTypes?: DocImplAssocType[];
|
|
37
|
+
}
|
|
27
38
|
export interface DocFunction {
|
|
28
39
|
name: string;
|
|
29
40
|
doc?: string;
|
|
@@ -49,6 +60,7 @@ export interface DocType {
|
|
|
49
60
|
variants?: DocVariant[];
|
|
50
61
|
methods: DocFunction[];
|
|
51
62
|
traitImpls: string[];
|
|
63
|
+
impls?: DocImpl[];
|
|
52
64
|
deprecated?: string;
|
|
53
65
|
examples?: string;
|
|
54
66
|
}
|
|
@@ -84,4 +96,5 @@ export interface DocModule {
|
|
|
84
96
|
export interface DocModel {
|
|
85
97
|
name: string;
|
|
86
98
|
modules: DocModule[];
|
|
99
|
+
version?: string;
|
|
87
100
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export type DocFormat = "html" | "markdown" | "json";
|
|
2
|
+
export declare function detectGitVersion(cwd?: string): string | undefined;
|
|
2
3
|
export interface DocCommandOptions {
|
|
3
4
|
input: string;
|
|
4
5
|
outputDir: string;
|
|
@@ -6,5 +7,6 @@ export interface DocCommandOptions {
|
|
|
6
7
|
verbose: boolean;
|
|
7
8
|
title?: string;
|
|
8
9
|
format?: DocFormat;
|
|
10
|
+
version?: string;
|
|
9
11
|
}
|
|
10
12
|
export declare function runDoc(options: DocCommandOptions): Promise<void>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type Environment } from "../env";
|
|
1
2
|
import type { Expr } from "../expr";
|
|
2
3
|
import { type Token } from "../token";
|
|
3
4
|
import type { ModuleValue } from "../value";
|
|
@@ -12,6 +13,7 @@ export default class Evaluator {
|
|
|
12
13
|
private tokens;
|
|
13
14
|
private moduleValue;
|
|
14
15
|
private moduleError;
|
|
16
|
+
private env;
|
|
15
17
|
private allowPartialModule;
|
|
16
18
|
private registerPartialModule;
|
|
17
19
|
constructor({ modulePath, stdPath, loadModule, inputString, allowPartialModule, registerPartialModule, }: {
|
|
@@ -27,4 +29,5 @@ export default class Evaluator {
|
|
|
27
29
|
private evaluateProgram;
|
|
28
30
|
getModuleValue(): ModuleValue;
|
|
29
31
|
getModuleError(): Error | undefined;
|
|
32
|
+
getEnv(): Environment;
|
|
30
33
|
}
|
|
@@ -51,6 +51,20 @@ export declare function enumerateMethodNamesFromGenericImpls({ concreteType, env
|
|
|
51
51
|
name: string;
|
|
52
52
|
type: FunctionType;
|
|
53
53
|
}[];
|
|
54
|
+
export interface GenericImplDocEntry {
|
|
55
|
+
signature: string;
|
|
56
|
+
traitName?: string;
|
|
57
|
+
methodNames: string[];
|
|
58
|
+
methods: {
|
|
59
|
+
name: string;
|
|
60
|
+
type: FunctionType;
|
|
61
|
+
}[];
|
|
62
|
+
}
|
|
63
|
+
export declare function getGenericImplDocEntries({ concreteType, env, receiverTypeName, }: {
|
|
64
|
+
concreteType: Type;
|
|
65
|
+
env: Environment;
|
|
66
|
+
receiverTypeName?: string;
|
|
67
|
+
}): GenericImplDocEntry[];
|
|
54
68
|
export declare function findAssociatedTypeFromGenericImpls({ concreteType, propertyName, env, }: {
|
|
55
69
|
concreteType: Type;
|
|
56
70
|
propertyName: string;
|