@shd101wyy/yo 0.1.13 → 0.1.14

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/esm/index.mjs CHANGED
@@ -194,7 +194,7 @@ Typeof "${a.name}": ${A(a.type)}`})));if(o.length>0)throw pt(o.map(a=>({token:a.
194
194
  `)}function Mc(e){let t={moduleDoc:null,declarations:[]},n=[],r=null,i="",o=0;for(;o<e.length;){let a=e[o];if(xg(a))if(r===null&&(r=a.position,i=a.modulePath),a.type==="inner_doc_line_comment"){for(n.push(bl(a.value)),o++;o<e.length&&e[o].type==="whitespace";){if(e[o].value.includes(`
195
195
  `)){let s=o+1;for(;s<e.length&&e[s].type==="whitespace";)s++;if(s<e.length&&e[s].type==="inner_doc_line_comment"){o=s;break}else break}o++}continue}else{n.push(Nc(a.value)),o++;continue}if(a.type==="doc_line_comment"){let s=[],l=a.position,u=a.modulePath;for(s.push(bl(a.value)),o++;o<e.length;){let p=o;for(;p<e.length&&e[p].type==="whitespace";)p++;if(p<e.length&&e[p].type==="doc_line_comment")s.push(bl(e[p].value)),o=p+1;else break}let c={content:s.join(`
196
196
  `),inner:!1,position:l,modulePath:u},{name:_,position:f}=Dc(e,o);t.declarations.push({comment:c,declarationName:_,declarationPosition:f});continue}if(a.type==="doc_block_comment"){let s={content:Nc(a.value),inner:!1,position:a.position,modulePath:a.modulePath};o++;let{name:l,position:u}=Dc(e,o);t.declarations.push({comment:s,declarationName:l,declarationPosition:u});continue}o++}return n.length>0&&r!==null&&(t.moduleDoc={content:n.join(`
197
- `),inner:!0,position:r,modulePath:i}),t}function Dc(e,t){let n=t;for(;n<e.length;){let r=e[n];if(Sg(r)||Ag(r)){n++;continue}return r.type==="identifier"?{name:r.value,position:r.position}:{name:"",position:null}}return{name:"",position:null}}var Dg=process.env.YO_SKIP_PRELUDE==="1"||process.env.YO_SKIP_PRELUDE==="true";function Mg(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 na=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??Vg(t.replace(/^file:\/\//,""),"utf-8"),this.parser=new fi({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}":
197
+ `),inner:!0,position:r,modulePath:i}),t}function Dc(e,t){let n=t;for(;n<e.length;){let r=e[n];if(Sg(r)||Ag(r)){n++;continue}if(r.type==="identifier")return{name:r.value,position:r.position};if(r.type==="("){n++;continue}return{name:"",position:null}}return{name:"",position:null}}var Dg=process.env.YO_SKIP_PRELUDE==="1"||process.env.YO_SKIP_PRELUDE==="true";function Mg(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 na=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??Vg(t.replace(/^file:\/\//,""),"utf-8"),this.parser=new fi({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}":
198
198
  ${s instanceof kn||s instanceof qn?s.toString():s instanceof Error?s.message:String(s)}`)}}getProgram(){return this.program}getTokens(){return this.tokens}evaluateProgram(t,n){let r=El({modulePath:this.modulePath,inputString:this.inputString});if(!Mg(this.tokens,"@skip_prelude")&&!Dg){let c="file://"+Ng.join(t,"prelude.yo"),{moduleValue:_,moduleError:f}=n(c);if(f)throw f;if(_&&Ce(_.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}}Ic(r)}let o=Mc(this.tokens),a=new Map;for(let c of o.declarations)c.declarationName&&a.set(c.declarationName,c.comment.content);let{moduleValue:s,env:l,partialModuleError:u}=Ga({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 ab(...e){process.env.NODE_ENV!=="production"&&process.env.DEBUG&&console.log(...e)}import{existsSync as bT}from"fs";import*as Ta from"path";import*as Bc from"fs";function Og(e){switch(e){case"x86_64":case"aarch64":return 64;case"x86":case"arm":case"wasm32":return 32}}var Oc={darwin:"macos",linux:"linux",win32:"windows",freebsd:"freebsd"},Rc={x64:"x86_64",arm64:"aarch64",ia32:"x86",arm:"arm"},Qa;function Rg(){if(Qa)return Qa;let e=Oc[process.platform];if(!e)throw new Error(`Unsupported host platform: ${process.platform}. Supported: ${Object.keys(Oc).join(", ")}`);let t=Rc[process.arch];if(!t)throw new Error(`Unsupported host architecture: ${process.arch}. Supported: ${Object.keys(Rc).join(", ")}`);return Qa={platform:e,arch:t},Qa}function Pg(){if(process.platform!=="linux")return"gnu";try{if(Bc.readdirSync("/lib").some(n=>n.startsWith("ld-musl-")))return"musl"}catch{}return"gnu"}function Gc(e){switch(e){case"linux":return Pg();case"windows":return"msvc";case"wasi":case"emscripten":return"wasm";case"macos":case"freebsd":return}}function Ug(e,t,n){return n?`${e}-${t}-${n}`:`${e}-${t}`}function Wc(e,t,n){return{arch:e,os:t,abi:n,pointerSizeBits:Og(e),triple:Ug(e,t,n)}}function ii(){let e=Rg(),t=Gc(e.platform);return Wc(e.arch,e.platform,t)}var Pc=new Set(["x86_64","aarch64","x86","arm","wasm32"]),Uc=new Set(["linux","macos","windows","freebsd","wasi","emscripten"]),zc=new Set(["gnu","musl","msvc","none","wasm"]);function qc(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(!Pc.has(r))throw new Error(`Unknown architecture "${r}" in target triple "${e}". Supported: ${[...Pc].join(", ")}`);if(!Uc.has(i))throw new Error(`Unknown OS "${i}" in target triple "${e}". Supported: ${[...Uc].join(", ")}`);let a=r,s=i,l;if(o!==void 0)if(o==="none")l=void 0;else if(zc.has(o))l=o;else throw new Error(`Unknown ABI "${o}" in target triple "${e}". Supported: ${[...zc].join(", ")}`);else l=Gc(s);return Wc(a,s,l)}var kl;function ra(){return kl||(kl=ii()),kl}function Ht(e){return e.os==="windows"}function xi(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 Yc(e){return e.os==="wasi"}function Hc(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 jc(e){let t=Ht(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 Br(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 Wn(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 Si=[...b.__yo_op_add,...b.__yo_op_sub,...b.__yo_op_mul,...b.__yo_op_div,...b.__yo_op_mod,...b.__yo_op_neg,...b.__yo_op_eq,...b.__yo_op_neq,...b.__yo_op_lt,...b.__yo_op_lte,...b.__yo_op_gt,...b.__yo_op_gte,...b.__yo_op_not,...b.__yo_op_bit_and,...b.__yo_op_bit_or,...b.__yo_op_bit_xor,...b.__yo_op_bit_complement,...b.__yo_op_bit_left_shift,...b.__yo_op_bit_right_shift,...b.__yo_ptr_add,...b.__yo_ptr_sub,...b.__yo_ptr_diff,...b.__yo_ptr_eq,...b.__yo_ptr_neq,...b.__yo_ptr_lt,...b.__yo_ptr_lte,...b.__yo_ptr_gt,...b.__yo_ptr_gte,...b.__yo_slice_len,...b.__yo_slice_new,...b.__yo_slice_ptr,...b.__yo_as,...b.__yo_getrandom,...b.__yo_arc4random_buf,...b.__yo_bcrypt_gen_random,...b.__yo_getentropy,...b.__yo_maybe_uninit_new,...b.__yo_maybe_uninit_as_ptr,...b.__yo_maybe_uninit_assume_init,...b.__yo_array_index,...b.__yo_slice_index,...b.__yo_array_index_range,...b.__yo_array_index_range_inclusive,...b.__yo_slice_index_range,...b.__yo_slice_index_range_inclusive,...b.__yo_noop,...b.__yo_return_self,...b.__yo_ms_sleep],Kc=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 oe(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&&Ge(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=nn(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} ${A(e)}`);return(e.tag==="Struct"||e.tag==="Enum")&&pe(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 ${A(e)}`);return n}case"Array":{let n=e,r=n.childType,i=n.length;if(ze(i)){let o=U(r,t),a=`Array_${oe(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_${oe(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(Ie(n)){if(n.resolvedConcreteType?.isExtern)return`${U(n.resolvedConcreteType,t)}*`;let r=t.types[n.id]?.cName;if(r)return`${r}*`;if(n.resolvedConcreteType&&M(n.resolvedConcreteType)&&Ie(n.resolvedConcreteType)){let o=n.resolvedConcreteType,a=t.types[o.id]?.cName;if(a)return`${a}*`}if(n.resolvedConcreteType&&pe(n.resolvedConcreteType)){let o=n.resolvedConcreteType.id;for(let[a,s]of Object.entries(t.types))if(M(s.type)&&Ie(s.type)&&s.type.resolvedConcreteType&&pe(s.type.resolvedConcreteType)&&s.type.resolvedConcreteType.id===o)return`${s.cName}*`}let i=Bt(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.
199
199
  resolvedConcreteType: ${n.resolvedConcreteType?.id??"none"}
200
200
  registered type IDs: ${Object.keys(t.types).filter(o=>o.startsWith("sometype")).join(", ")}`)}return en(n)&&n.resolvedConcreteType||n.resolvedConcreteType?U(n.resolvedConcreteType,t):"void*"}case"Ptr":{let r=e.childType;if(Ge(r)){let a=U(r.childType,t),s=`Slice_${oe(a)}`;return t.sliceStructTypes.has(s)||t.sliceStructTypes.set(s,{childType:a}),`${s}*`}let i=U(r,t);return dt(r)?`${i}*`:ge(r)&&nn(r)?`${i}*`:`${i}*`}case"Iso":{let n=e,r=n.childType,i=U(r,t),o=i.replace(/\*/g,"").trim(),a=`Iso_${oe(o)}`;return t.isoTypes||(t.isoTypes=new Map),t.isoTypes.has(a)||t.isoTypes.set(a,{childTypeCName:i,isoType:n}),a}case"Arc":{let n=e,r=n.childType,i=U(r,t),o=i.replace(/\*/g,"").trim(),a=`Arc_${oe(o)}`;return t.arcTypes||(t.arcTypes=new Map),t.arcTypes.has(a)||t.arcTypes.set(a,{childTypeCName:i,arcType:n}),a}}return`// Unknown type: ${A(e)}`}function _t(e,t,n){let r=oe(t);return`${U(e,n)} ${r}`}function Qt(e,t,n){let r=n.types[e.id]?.cName;if(!r)throw new Error(`No C type name found for enum ${e.typeName} (${A(e)})`);return`${r.toUpperCase()}_${t.toUpperCase()}`}function oi(e){return e.type.return.isCompileTimeOnly}function Fr(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],Si)?n=t.args[0].func.token.value:F(t)&&E(t,Si)&&(n=t.func.token.value),n&&b.__yo_as.includes(n)?null:n}function nn(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 oe(e);let n=Y(t,e);if(n.length>0){let r=n[n.length-1];return oe(r.name,r.type.isExtern==="c")}return oe(e)}function Za(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===b.___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===b.___drop[0]&&B(e.func.args[0]))return e.func.args[0].token.value;if(!F(e)||!E(e,b.___drop)||e.args.length<1)return;let t=e.args[0];if(!(!t||!B(t)))return t.token.value}function ia(e){if(e){if(Yt(e))return e;if(F(e)){let t=e;for(let n of t.args){let r=ia(n);if(r)return r}}}}var wl;function Xc(e){wl=e}function P(e,t,n){if(!wl)throw new Error("Internal Error: generateExpr function is not set.");return wl(e,t,n)}function Gr(e,t,n){let r=M(t)&&t.resolvedConcreteType?t.resolvedConcreteType:t;if(!Ve(r))return"";if(ke(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=Gr(`(${e}).data[i]`,r.childType,n);return a&&o.emitLine(` ${a};`),o.emitLine("}"),""}if(Se(r)){let i=n.emitter;for(let o=0;o<r.fields.length;o++){let a=r.fields[o].type,s=M(a)&&a.resolvedConcreteType?a.resolvedConcreteType:a;if(Ve(s)){let l=Gr(`(${e})._${o}`,a,n);l&&i.emitLine(`${l};`)}}return""}if(Ae(r))return`__yo_decr_rc((void*)(${e}).data)`;if(dt(r))return`__yo_decr_rc((void*)(${e}))`;if(xt(r))return`__yo_decr_rc_atomic((void*)(${e}))`;if(wt(r))return`__yo_decr_rc_atomic((void*)(${e}))`;if(pe(r)||ge(r)){let i=Lr(r,n);if(i)return`${i}(${e})`}return""}function co(e,t,n){let r=M(t)&&t.resolvedConcreteType?t.resolvedConcreteType:t;if(ke(r)){let i=r.length;if(!ze(i))return"/* Error: array has non-constant length */";let o=`temp_dup_${Pe("")}`,a=`i_${Pe("")}`,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=co(`${o}.data[${a}]`,r.childType,n);return l.emitLine(` ${o}.data[${a}] = ${u};`),l.emitLine("}"),o}if(Se(r)){let i=n.emitter,o=`temp_dup_tuple_${Pe("")}`,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=M(l)&&l.resolvedConcreteType?l.resolvedConcreteType:l;if(Ve(u)){let c=co(`${o}._${s}`,l,n);i.emitLine(`${o}._${s} = ${c};`)}}return o}if(Ae(r))return`((${U(r,n)}){ .data = __yo_incr_rc((void*)(${e}).data), .vtable = (${e}).vtable })`;if(dt(r))return`((${U(r,n)})__yo_incr_rc((void*)(${e})))`;if(xt(r))return`((${U(r,n)})__yo_incr_rc_atomic((void*)(${e})))`;if(wt(r))return`((${U(r,n)})__yo_incr_rc_atomic((void*)(${e})))`;if(pe(r)||ge(r)){let i=Un(r,n);if(i)return`${i}(${e})`}return e}function Lr(e,t){if(pe(e)||ge(e)||Ae(e)||M(e)||xt(e)||wt(e)){let n=e.trait.fields.find(r=>r.label===b.___drop[0]);if(n&&n.assignedValue&&ee(n.assignedValue))return t.functions[n.assignedValue.funcId]?.cName}}function Un(e,t){if(pe(e)||ge(e)||Ae(e)||M(e)||xt(e)||wt(e)){let n=e.trait.fields.find(r=>r.label===b.___dup[0]);if(n&&n.assignedValue&&ee(n.assignedValue))return t.functions[n.assignedValue.funcId]?.cName}}function bt(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=P(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=P(i,t,n);o&&r.emitLine(`${t}${o};`)}}}function sn(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(We(e))return e.value?"true":"false";if(we(e)){let r=n?.$?.convertedRuntimeType||n?.$?.type;if(r&&An(r)&&r.fields.length===1){let i=r.fields[0].type;if(Ge(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&&Ge(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||ht(r)){for(let i of Object.values(t.types))if(An(i.type)&&i.type.fields.length===1&&Ge(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(Lt(e)){let r=e.type,i=nn(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 sn(e.fields[0],t,{$:{type:i,convertedRuntimeType:i}})}if(Pn(r))return Qt(r,e.variantName,t);let a=t.types[r.id]?.cName;if(!a)return`// Error: No C type name found for enum ${A(r)}`;let s=Qt(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&&!de(f.type)){let p=oe(f.label),d=sn(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(pn(e)){let r=e.type,i=t.types[r.id]?.cName;if(!i)return`// Error: No C type name found for tuple ${A(r)}
@@ -4,8 +4,12 @@ declare function escapeHtml(text: string): string;
4
4
  declare function moduleToFilename(name: string): string;
5
5
  declare function moduleDisplayName(name: string): string;
6
6
  declare function moduleGroup(name: string): string;
7
+ type SymbolLinks = Map<string, string>;
8
+ declare function buildSymbolLinks(model: DocModel): SymbolLinks;
9
+ declare function linkifyType(typeStr: string, symbolLinks: SymbolLinks, currentModuleFilename?: string): string;
7
10
  declare function generateCSS(): string;
8
11
  declare function generateSearchJS(): string;
12
+ declare function generateHighlightJS(): string;
9
13
  interface SearchEntry {
10
14
  name: string;
11
15
  kind: string;
@@ -20,4 +24,4 @@ export interface RenderHtmlOptions {
20
24
  outputDir: string;
21
25
  }
22
26
  export declare function renderDocSite(options: RenderHtmlOptions): Promise<void>;
23
- export { escapeHtml, buildSearchIndex, firstSentence, generateCSS, generateSearchJS, moduleToFilename, moduleDisplayName, moduleGroup, };
27
+ export { escapeHtml, buildSearchIndex, buildSymbolLinks, linkifyType, firstSentence, generateCSS, generateSearchJS, generateHighlightJS, moduleToFilename, moduleDisplayName, moduleGroup, };