@shd101wyy/yo 0.1.17 → 0.1.18

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.
@@ -11601,7 +11601,7 @@ ${O(p.$.type)}`});let d=p.$.value===void 0;if(t=p.$.env,o){let v=U({expr:o,env:t
11601
11601
  ${A(o)}`});t=v.$.env}if(Rt(l)&&l.value===!0&&d){let v=Et(i),h=(c=Tn({expr:v,env:t,context:{...n},variablesToAdd:[]}).$)==null?void 0:c.value;if(Rt(h)){let g=[a],T=t,E=h.value;for(let $=1;E&&$<uy;$++){let k=Et(a),C=Tn({expr:k,env:T,context:{...n,isEvaluatingLoopBody:{kind:"while",env:T}},variablesToAdd:[]});if(!C.$)break;if(g.push(k),T=C.$.env,o){let x=Et(o),V=U({expr:x,env:T,context:{...n}});if(!V.$)break;T=V.$.env}let w=Et(i),L=(f=Tn({expr:w,env:T,context:{...n},variablesToAdd:[]}).$)==null?void 0:f.value;if(Rt(L)&&L.value===!1)E=!1;else if(Rt(L)&&L.value===!0)E=!0;else return e.$={env:T,pathCollection:[],type:ke.type,value:void 0,comptimeUnrolledBodies:g},e}if(!E)return e.$={env:T,pathCollection:[],type:ke.type,value:void 0,comptimeUnrolledBodies:g},e}ly(e,a,p.$.controlFlow)}if(Rt(l)&&l.value===!0){let v=r+1;return v>=uy&&ly(e,a,p.$.controlFlow),Ap({expr:e,env:t,context:{...n},_comptimeIterationCount:v})}else return e.$={env:t,pathCollection:[],type:ke.type,value:u?ke:void 0},e}}function qF(e){let t=process.env[e];return t==="1"||(t==null?void 0:t.toLowerCase())==="true"}var CN=qF("YO_DEBUG_EVAL")||qF("YO_DEBUG_EVAL_PROFILE"),WF=globalThis,gl=WF.__yoEvalProfilerState??(WF.__yoEvalProfilerState={evalCount:0,evalStart:0});function ba({expr:e,env:t,context:n}){if(CN&&(gl.evalStart||(gl.evalStart=Date.now()),gl.evalCount++,gl.evalCount%1e5===0&&console.log(`[EVAL] ${gl.evalCount} calls, ${Date.now()-gl.evalStart}ms elapsed`)),Q(e))switch(e.token.type){case"identifier":case"operator":return Ip({expr:e,env:t,context:{...n},throwErrorOnUndefined:!0});case"integer":return bF(e,t,{...n});case"float":return $F(e,t,{...n});case"string":return CF(e,t);case"char":return hF(e,t);case"bool":return gF(e,t);default:throw m({token:e.token,errorMessage:`(1) Evaluating the expression (tag: ${e.tag}, token: ${e.token.type}) below is not implemented:
11602
11602
  ${A(e)}`})}else if(b(e,":",2)){let{expr:r}=Lp({expr:e,env:t,context:n});return r}else{if(b(e,":=",2)||b(e,"::",2))return NF({expr:e,env:t,context:n});if(b(e,"=",2))return wF({expr:e,env:t,context:n});if(b(e,"->",2))return S(e.args[0])&&(b(e.args[0],B.fn)||b(e.args[0],B.unsafe_fn))?gp({expr:e,env:t,context:{...n,isUnsafeFunctionType:b(e.args[0],B.unsafe_fn)}}):S(e.args[0])&&b(e.args[0],B.Fn)?aF({expr:e,env:t,context:{...n}}):Fp({expr:e,env:t,context:{...n}});if(b(e,"=>",2))return S(e.args[0])&&b(e.args[0],B.fn)?tF({expr:e,env:t,context:{...n}}):Fp({expr:e,env:t,context:{...n}});if(b(e,"=>>",2))return Fp({expr:e,env:t,context:{...n}});if(b(e,B.recur))return OF({expr:e,env:t,context:{...n}});if(b(e,B.runtime))return PF({expr:e,env:t,context:{...n}});if(b(e,B.extern))return SF({expr:e,env:t,context:{...n}});if(b(e,B.c_include))return FF({expr:e,env:t,context:{...n}});if(b(e,B.test))return zF({expr:e,env:t,context:{...n}});if(b(e,B.cond))return LF({expr:e,env:t,context:{...n}});if(b(e,B.match))return VF({expr:e,env:t,context:{...n}});if(b(e,B.tuple))return kF({expr:e,env:t,context:{...n}});if(b(e,B.array))return yF({expr:e,env:t,context:{...n}});if(b(e,B.comptime_list))return vF({expr:e,env:t,context:{...n}});if(b(e,B.dyn))return EF({expr:e,env:t,context:{...n}});if(b(e,B.atomic)){if(e.args.length!==1)throw m({token:e.token,errorMessage:'"atomic" expects exactly one argument: atomic object(...)'});let r=e.args[0];if(!S(r)||!b(r,B.object))throw m({token:r.token,errorMessage:`"atomic" modifier is only valid before "object(...)". Got:
11603
11603
  ${A(r)}`});let i=ry({expr:r,env:t,context:{...n},isAtomicRc:!0});return e.$=i.$,e.func.$=i.$,e}else{if(b(e,B.struct))return yl({expr:e,env:t,context:{...n}});if(b(e,B.object))return ry({expr:e,env:t,context:{...n}});if(b(e,B.newtype))return uF({expr:e,env:t,context:{...n}});if(b(e,B.enum))return oF({expr:e,env:t,context:{...n}});if(b(e,B.union))return mF({expr:e,env:t,context:{...n}});if(b(e,"."))return RF({expr:e,env:t,context:{...n}});if(b(e,B.begin))return Tn({expr:e,env:t,context:{...n},variablesToAdd:[]});if(b(e,B.module))return lF({expr:e,env:t,context:{...n}});if(b(e,B.trait))return _F({expr:e,env:t,context:{...n}});if(b(e,B.Impl))return dw({expr:e,env:t,context:{...n}});if(b(e,B.impl))return KE({expr:e,env:t,context:{...n}});if(b(e,F.typeof))return BF({expr:e,env:t,context:{...n}});if(b(e,F.sizeof))return Lw({expr:e,env:t,context:{...n}});if(b(e,F.alignof))return UC({expr:e,env:t,context:{...n}});if(b(e,F.typeid))return Yw({expr:e,env:t,context:{...n}});if(b(e,F.downcast))return Lk({expr:e,env:t,context:{...n}});if(b(e,F.rc))return Fw({expr:e,env:t,context:{...n}});if(b(e,"<:"))return UF({expr:e,env:t,context:{...n}});if(b(e,F.the))return Iw({expr:e,env:t,context:{...n}});if(b(e,B.import))return AF({expr:e,env:t,context:{...n},stdPath:n.stdPath});if(b(e,B.open))return MF({expr:e,env:t,context:{...n}});if(b(e,B.Ptr,1))return Zw({expr:e,env:t,context:{...n}});if(b(e,B.Iso,1))return Jk({expr:e,env:t,context:{...n}});if(b(e,F.__yo_address_of,1))return ww({expr:e,env:t,context:{...n}});if(b(e,B.Tuple))return dF({expr:e,env:t,context:{...n}});if(b(e,B.Array))return eF({expr:e,env:t,context:{...n}});if(b(e,F.__yo_array_fill,2))return BC({expr:e,env:t,context:{...n}});if(b(e,B.Slice))return cF({expr:e,env:t,context:{...n}});if(b(e,B.ComptimeList))return nF({expr:e,env:t,context:{...n}});if(b(e,B.Future))return sF({expr:e,env:t,context:{...n}});if(b(e,B.Concrete))return rF({expr:e,env:t,context:{...n}});if(b(e,B.Dyn))return iF({expr:e,env:t,context:{...n}});if(b(e,F.comptime_expect_error))return WC({expr:e,env:t,context:{...n}});if(b(e,F.comptime_assert))return GC({expr:e,env:t,context:{...n}});if(b(e,F.comptime_fn))return jC({expr:e,env:t,context:{...n}});if(b(e,F.comptime_print))return rk({expr:e,env:t,context:{...n}});if(b(e,F.panic))return gw({expr:e,env:t,context:{...n}});if(b(e,F.asm))return bw({expr:e,env:t,context:{...n}});if(b(e,F.global_asm))return Cw({expr:e,env:t,context:{...n}});if(b(e,F.macro_expand))return yw({expr:e,env:t,context:{...n}});if(b(e,B.op_and)||b(e,B.op_or))return zC({expr:e,env:t,context:{...n}});if(b(e,B.escape))return IF({expr:e,env:t,context:{...n}});if(b(e,F.consume))return pk({expr:e,env:t,context:{...n}});if(b(e,F.___drop))return iw({expr:e,env:t,context:{...n}});if(b(e,F.___dup))return ow({expr:e,env:t,context:{...n}});if(b(e,F.__yo_decr_rc))return _k({expr:e,env:t,context:{...n}});if(b(e,F.__yo_incr_rc))return dk({expr:e,env:t,context:{...n}});if(b(e,F.__yo_decr_rc_atomic))return yk({expr:e,env:t,context:{...n}});if(b(e,F.__yo_incr_rc_atomic))return mk({expr:e,env:t,context:{...n}});if(b(e,F.__yo_iso_extract))return $k({expr:e,env:t,context:{...n}});if(b(e,F.__yo_iso_dispose))return bk({expr:e,env:t,context:{...n}});if(b(e,F.__yo_drop_array_element))return Ck({expr:e,env:t,context:{...n}});if(b(e,F.__yo_dup_array_element))return kk({expr:e,env:t,context:{...n}});if(b(e,F.__yo_drop_tuple_element))return wk({expr:e,env:t,context:{...n}});if(b(e,F.__yo_dup_tuple_element))return Fk({expr:e,env:t,context:{...n}});if(b(e,F.__yo_rc_own))return gk({expr:e,env:t,context:{...n}});if(b(e,F.__yo_dyn_drop))return hk({expr:e,env:t,context:{...n}});if(b(e,F.__yo_dyn_dup))return vk({expr:e,env:t,context:{...n}});if(b(e,F.__yo_sometype_drop))return Tk({expr:e,env:t,context:{...n}});if(b(e,F.__yo_sometype_dup))return Ek({expr:e,env:t,context:{...n}});if(b(e,F.__yo_gc_collect))return pw({expr:e,env:t,context:{...n}});if(b(e,B.quote))return mw({expr:e,env:t,context:{...n}});if(b(e,B.gensym))return _w({expr:e,env:t,context:{...n}});if(b(e,F.__yo_expr_is_atom))return aw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_expr_is_fn_call))return sw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_expr_get_callee))return lw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_expr_get_args))return uw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_expr_to_string))return cw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_expr_eq))return fw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_comptime_list_car))return HC({expr:e,env:t,context:{...n}});if(b(e,F.__yo_comptime_list_cdr))return YC({expr:e,env:t,context:{...n}});if(b(e,F.__yo_comptime_list_cons))return KC({expr:e,env:t,context:{...n}});if(b(e,F.__yo_comptime_list_append))return XC({expr:e,env:t,context:{...n}});if(b(e,F.__yo_comptime_list_length))return QC({expr:e,env:t,context:{...n}});if(b(e,F.__yo_comptime_list_element_type))return JC({expr:e,env:t,context:{...n}});if(b(e,F.__yo_comptime_list_get))return ZC({expr:e,env:t,context:{...n}});if(S(e)&&e.func.tag==="Atom"&&typeof e.func.token.value=="string"&&(e.func.token.value.startsWith("__yo_comptime_u8_")||e.func.token.value.startsWith("__yo_comptime_i8_")||e.func.token.value.startsWith("__yo_comptime_u16_")||e.func.token.value.startsWith("__yo_comptime_i16_")||e.func.token.value.startsWith("__yo_comptime_u32_")||e.func.token.value.startsWith("__yo_comptime_i32_")||e.func.token.value.startsWith("__yo_comptime_u64_")||e.func.token.value.startsWith("__yo_comptime_i64_")||e.func.token.value.startsWith("__yo_comptime_usize_")||e.func.token.value.startsWith("__yo_comptime_isize_")||e.func.token.value.startsWith("__yo_comptime_f32_")||e.func.token.value.startsWith("__yo_comptime_f64_")||e.func.token.value.startsWith("__yo_comptime_int_")||e.func.token.value.startsWith("__yo_comptime_float_")))return nk({expr:e,env:t,context:{...n}});if(b(e,F.__yo_comptime_bool_and,2)||b(e,F.__yo_comptime_bool_or,2)||b(e,F.__yo_comptime_bool_eq,2)||b(e,F.__yo_comptime_bool_neq,2)||b(e,F.__yo_comptime_bool_not,1)||b(e,F.__yo_comptime_bool_to_comptime_string,1))return qC({expr:e,env:t,context:{...n}});if(b(e,F.__yo_comptime_string_concat,2)||b(e,F.__yo_comptime_string_eq,2)||b(e,F.__yo_comptime_string_neq,2)||b(e,F.__yo_comptime_string_lt,2)||b(e,F.__yo_comptime_string_lte,2)||b(e,F.__yo_comptime_string_gt,2)||b(e,F.__yo_comptime_string_gte,2)||b(e,F.__yo_comptime_string_length,1)||b(e,F.__yo_comptime_string_to_upper,1)||b(e,F.__yo_comptime_string_to_lower,1)||b(e,F.__yo_comptime_string_slice))return ik({expr:e,env:t,context:{...n}});if(b(e,F.__yo_comptime_array_index)||b(e,F.__yo_comptime_slice_index)||b(e,F.__yo_comptime_array_index_range)||b(e,F.__yo_comptime_array_index_range_inclusive)||b(e,F.__yo_comptime_slice_index_range)||b(e,F.__yo_comptime_slice_index_range_inclusive)||b(e,F.__yo_comptime_string_index)||b(e,F.__yo_comptime_string_index_range)||b(e,F.__yo_comptime_string_index_range_inclusive)||b(e,F.__yo_comptime_list_index)||b(e,F.__yo_comptime_list_index_range)||b(e,F.__yo_comptime_list_index_range_inclusive))return ck({expr:e,env:t,context:{...n}});if(b(e,F.__yo_type_to_comptime_string,1))return Aw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_are_types_compatible,2))return xw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_are_types_equal,2))return Nw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_type_contains_rc_type,1))return Dw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_type_can_form_rc_cycle,1))return Vw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_type_impls,2))return Mw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_type_get_info,1))return Rw({expr:e,env:t,context:{...n}});if(b(e,F.comptime_eval,1))return Pw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_comptime_string_to_expr,1))return Uw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_type_join_fields,3))return Bw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_type_map_variants,2))return Gw({expr:e,env:t,context:{...n}});if(b(e,F.derive_rule,2))return Hw({expr:e,env:t,context:{...n}});if(b(e,F.derive))return jw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_var_print_info,1))return Xw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_var_is_owning_the_rc_value))return Qw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_var_has_other_aliases))return Jw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_process_platform)||b(e,F.__yo_process_arch)||b(e,F.__yo_pointer_size_bits))return kw({expr:e,env:t,context:{...n}});if(b(e,F.__yo_build_executable)||b(e,F.__yo_build_static_library)||b(e,F.__yo_build_shared_library)||b(e,F.__yo_build_test)||b(e,F.__yo_build_run)||b(e,F.__yo_build_step)||b(e,F.__yo_build_step_depend_on)||b(e,F.__yo_build_target_host)||b(e,F.__yo_build_target_parse)||b(e,F.__yo_build_dependency)||b(e,F.__yo_build_path_dependency)||b(e,F.__yo_build_system_library)||b(e,F.__yo_build_link)||b(e,F.__yo_build_link_system_library)||b(e,F.__yo_build_option)||b(e,F.__yo_build_dep_artifact)||b(e,F.__yo_build_module)||b(e,F.__yo_build_module_link)||b(e,F.__yo_build_add_import)||b(e,F.__yo_build_add_cflags)||b(e,F.__yo_build_dep_module)||b(e,F.__yo_build_doc)){for(let r=0;r<e.args.length;r++)e.args[r]=ba({expr:e.args[r],env:t,context:{...n}});return $$({expr:e,env:t,context:{...n}})}else return b(e,B.while)?Ap({expr:e,env:t,context:{...n}}):b(e,F.va_start)?Kw({expr:e,env:t,context:{...n}}):wi({expr:e,env:t,context:{...n}})}}}var jF=require("node:fs"),HF=Yn(require("path"));var kN=process.env.YO_SKIP_PRELUDE==="1"||process.env.YO_SKIP_PRELUDE==="true";function wN(e,t){return e.some(n=>(n.type==="single_line_comment"||n.type==="multi_line_comment"||n.type==="doc_line_comment"||n.type==="inner_doc_line_comment"||n.type==="doc_block_comment"||n.type==="inner_doc_block_comment")&&n.value.includes(t))}var Lu=class{constructor({modulePath:t,stdPath:n,loadModule:r,inputString:i,allowPartialModule:o=!1,registerPartialModule:a}){if(this.modulePath=t,this.allowPartialModule=o,this.registerPartialModule=a,!this.modulePath.match(/^file:\/\//))throw new Error(`Invalid file protocol: ${this.modulePath}. Only file:// is supported for now. `);try{if(this.inputString=i??(0,jF.readFileSync)(t.replace(/^file:\/\//,""),"utf-8"),this.parser=new Da({modulePath:t,inputString:this.inputString}),this.program=this.parser.getProgram(),this.tokens=this.parser.getTokens(),!this.allowPartialModule&&this.parser.getParserError())throw this.parser.getParserError();this.evaluateProgram(n,r)}catch(s){throw new Error(`Failed to import module "${t}":
11604
- ${s instanceof Lr||s instanceof oi?s.toString():s instanceof Error?s.message:String(s)}`)}}getProgram(){return this.program}getTokens(){return this.tokens}evaluateProgram(t,n){var c,f;let r=dm({modulePath:this.modulePath,inputString:this.inputString});if(!wN(this.tokens,"@skip_prelude")&&!kN){let p="file://"+HF.default.join(t,"prelude.yo"),{moduleValue:_,moduleError:d}=n(p);if(d)throw d;if(_&&it(_.type)){r=vt(r);for(let v=0;v<_.type.fields.length;v++){let y=_.type.fields[v],h=_.fields[v],{env:g}=He({env:r,variable:{name:y.label,type:y.type,value:h?[h]:void 0,isCompileTimeOnly:!0,initializedAtToken:((c=y.exprs.labelExpr)==null?void 0:c.token)??y.exprs.expr.token,consumedAtToken:void 0,token:((f=y.exprs.labelExpr)==null?void 0:f.token)??y.exprs.expr.token,isOwningTheRcValue:!1}});r=g}}i$(r)}let o=RE(this.tokens),a=new Map;for(let p of o.declarations)p.declarationPosition&&a.set(Rr({position:p.declarationPosition,modulePath:p.comment.modulePath}),p.comment.content);let{moduleValue:s,env:l,partialModuleError:u}=Kf({beginExprs:this.program,env:r,context:{isExecuting:!0,expectedType:void 0,SelfType:void 0,loadModule:n.bind(this),stdPath:t,currentModulePath:this.modulePath,docCommentLookup:a},allowPartialModule:this.allowPartialModule,registerPartialModule:this.registerPartialModule});r=l,this.env=r,this.moduleValue=s,this.moduleError=u}getModuleValue(){if(!this.moduleValue)throw new Error("Module value is not set");return this.moduleValue}getModuleError(){return this.parser.getParserError()??this.moduleError}getEnv(){if(!this.env)throw new Error("Evaluator environment is not set");return this.env}};function FN(e){let t=e;for(;;){let n=Iu.join(t,"std");if((0,YF.existsSync)(n))return n;let r=Iu.dirname(t);if(r===t)break;t=r}return Iu.join(__dirname,"../std")}var hl=class{constructor(t){this.modules=new Map;this.dependencies=new Map;this.dependents=new Map;this.loadingModules=new Map;this.allowPartialModule=(t==null?void 0:t.allowPartialModule)??!1,this.stdPath=(t==null?void 0:t.stdPath)??FN(__dirname),this.codeGenratorC=new fp,ep(),ym(),Qd(),rm(),aE(ba),M$(PC)}getRelativePath(t){let n=t.match(/\/std\/(.+)$/);if(n)return`std/${n[1]}`;let r=t.match(/\/tests\/(.+)$/);return r?`tests/${r[1]}`:null}isWorkspaceModule(t){return!t.includes("/extensions/")&&!t.includes("/.vscode/")}findExtensionDuplicates(t){if(!this.isWorkspaceModule(t))return[];let n=this.getRelativePath(t);if(!n)return[];let r=[];for(let[i]of this.modules)i!==t&&!this.isWorkspaceModule(i)&&this.getRelativePath(i)===n&&r.push(i);if(n.startsWith("std/"))for(let[i]of this.modules)!this.isWorkspaceModule(i)&&(i.endsWith("/std/prelude.yo")||i.endsWith("/prelude.yo"))&&!r.includes(i)&&r.push(i);return r}deleteModuleAndDependents(t){let n=this.getDependentModules(t);for(let r of n)su(r),ou(r),this.clearDependencies(r),rf(r),this.modules.delete(r);su(t),ou(t),this.clearDependencies(t),rf(t),this.modules.delete(t)}addDependency(t,n){this.dependencies.has(t)||this.dependencies.set(t,new Set),this.dependencies.get(t).add(n),this.dependents.has(n)||this.dependents.set(n,new Set),this.dependents.get(n).add(t)}getDependentModules(t){let n=new Set,r=[t];for(;r.length>0;){let i=r.pop(),o=this.dependents.get(i);if(o)for(let a of o)n.has(a)||(n.add(a),r.push(a))}return n}clearDependencies(t){let n=this.dependencies.get(t);if(n)for(let r of n){let i=this.dependents.get(r);i&&i.delete(t)}this.dependencies.delete(t)}resetAllState(){for(let t of this.modules.keys())su(t),ou(t),rf(t);this.modules.clear(),this.dependencies.clear(),this.dependents.clear(),this.loadingModules.clear(),ep(),ym(),Qd(),rm()}loadModule(t,n,r){if(!t.match(/^file:\/\//))throw new Error(`Invalid file protocol: ${t}. Only file:// is supported for now. `);r&&this.addDependency(r,t);let i=this.modules.get(t);if(i)return{moduleValue:i.moduleValue,moduleError:i.moduleError};let o=this.loadingModules.get(t);if(o)return{moduleValue:o,moduleError:void 0};let a=this.findExtensionDuplicates(t);for(let f of a)this.deleteModuleAndDependents(f);let s=t,l=new Lu({modulePath:t,stdPath:this.stdPath,loadModule:f=>this.loadModule(f,void 0,s),inputString:n,allowPartialModule:this.allowPartialModule,registerPartialModule:f=>{this.loadingModules.set(t,f)}});this.loadingModules.delete(t);let u=l.getModuleValue(),c=l.getModuleError();return this.modules.set(t,{moduleValue:u,moduleError:c,evaluator:l}),{moduleValue:u,moduleError:c}}deleteModule(t){if(!t.match(/^file:\/\//))throw new Error(`Invalid file protocol: ${t}. Only file:// is supported for now. `);let n=[t];if(this.isWorkspaceModule(t))for(let[i]of this.modules)!this.isWorkspaceModule(i)&&!n.includes(i)&&n.push(i);if(t.endsWith("/std/prelude.yo")||t.endsWith("/prelude.yo"))for(let[i]of this.modules)(i.endsWith("/std/prelude.yo")||i.endsWith("/prelude.yo"))&&i!==t&&!n.includes(i)&&n.push(i);for(let i of n)this.deleteModuleAndDependents(i)}compileModule(t,{emitC:n,debugGc:r,debugParallelism:i,debugAsyncAwait:o,allocator:a,isLibrary:s}={}){let{moduleValue:l,moduleError:u}=this.loadModule(t);if(u)throw u.toString();if(!this.modules.get(t))throw new Error(`Module data not found for ${t}`);let f=[];for(let[,p]of this.modules){let _=p.moduleValue;_.moduleLevelInitExprs&&_.moduleLevelInitExprs.length>0&&f.push(..._.moduleLevelInitExprs)}this.codeGenratorC.compileModule(t,l,{debugGc:r,debugParallelism:i,debugAsyncAwait:o,allocator:a,isLibrary:s,allModuleLevelInitExprs:f.length>0?f:void 0}),n&&console.log(this.codeGenratorC.print())}getGeneratedCode(){return this.codeGenratorC.print()}getExportedFunctionNames(){return this.codeGenratorC.getExportedFunctionNames()}get needsIntelAsmSyntax(){return this.codeGenratorC.needsIntelAsmSyntax}get usesParallelism(){return this.codeGenratorC.usesParallelism}};var Np=require("fs"),vl=Yn(require("path"));var KF={name:"@shd101wyy/yo",displayName:"Yo",version:"0.1.17",main:"./out/cjs/index.cjs",module:"./out/esm/index.mjs",types:"./out/types/src/index.d.ts",bin:{yo:"./out/cjs/yo-cli.cjs","yo-cli":"./out/cjs/yo-cli.cjs"},files:["out","scripts","vendor","std"],repository:"https://github.com/shd101wyy/yo",author:"Yiyi Wang <shd101wyy@gmail.com>",license:"NCSA",keywords:["yo","language","compiler","vscode-extension"],scripts:{"build:esbuild":"bun run build.js","build:typings":"tsc --project . --declaration",build:"bun run build:esbuild && bun run build:typings",dev:"bun run build.js --watch",lint:"eslint .",format:'prettier --write "**/*.*" ".github/**/*.*"',test:"jest","test:watch":"jest --watch","test:coverage":"jest --coverage",postinstall:"node scripts/print-welcome.js && node scripts/check-liburing.js",prepare:"husky"},"lint-staged":{"*.{js,jsx,ts,tsx}":["eslint --fix","prettier --write"],"*.{json,md,yml,yaml,css,html}":["prettier --write"]},dependencies:{markdown_yo:"0.0.4","vscode-languageserver":"^9.0.1","vscode-languageserver-textdocument":"^1.0.12",yargs:"^17.7.2"},devDependencies:{"@types/bun":"^1.3.8","@types/jest":"^29.5.11","@types/node":"^20.10.5","@types/yargs":"^17.0.32","@typescript-eslint/eslint-plugin":"^6.8.0","@typescript-eslint/parser":"^6.8.0",esbuild:"^0.20.0","esbuild-plugin-polyfill-node":"^0.3.0",eslint:"^8.52.0","eslint-plugin-import":"^2.32.0",glob:"^11.0.3",husky:"^9.1.7",jest:"^29.7.0","lint-staged":"^16.2.7",prettier:"^3.0.3","prettier-plugin-packagejson":"^2.4.6","ts-jest":"^29.1.1",typescript:"^5.8.3"}};var IN=".yo-version";function xp(){return KF.version}function SN(e){let t=vl.resolve(e);for(;;){let n=vl.join(t,IN);if((0,Np.existsSync)(n))return n;let r=vl.dirname(t);if(r===t)return null;t=r}}function AN(e){let t=e.trim();if(!t)throw new Error(`Empty .yo-version file. Specify a concrete version number (e.g., ${xp()}).`);if((t.startsWith("v")||t.startsWith("V"))&&(t=t.slice(1)),t.toLowerCase()==="latest")throw new Error(`Invalid version "latest" in .yo-version.
11604
+ ${s instanceof Lr||s instanceof oi?s.toString():s instanceof Error?s.message:String(s)}`)}}getProgram(){return this.program}getTokens(){return this.tokens}evaluateProgram(t,n){var c,f;let r=dm({modulePath:this.modulePath,inputString:this.inputString});if(!wN(this.tokens,"@skip_prelude")&&!kN){let p="file://"+HF.default.join(t,"prelude.yo"),{moduleValue:_,moduleError:d}=n(p);if(d)throw d;if(_&&it(_.type)){r=vt(r);for(let v=0;v<_.type.fields.length;v++){let y=_.type.fields[v],h=_.fields[v],{env:g}=He({env:r,variable:{name:y.label,type:y.type,value:h?[h]:void 0,isCompileTimeOnly:!0,initializedAtToken:((c=y.exprs.labelExpr)==null?void 0:c.token)??y.exprs.expr.token,consumedAtToken:void 0,token:((f=y.exprs.labelExpr)==null?void 0:f.token)??y.exprs.expr.token,isOwningTheRcValue:!1}});r=g}}i$(r)}let o=RE(this.tokens),a=new Map;for(let p of o.declarations)p.declarationPosition&&a.set(Rr({position:p.declarationPosition,modulePath:p.comment.modulePath}),p.comment.content);let{moduleValue:s,env:l,partialModuleError:u}=Kf({beginExprs:this.program,env:r,context:{isExecuting:!0,expectedType:void 0,SelfType:void 0,loadModule:n.bind(this),stdPath:t,currentModulePath:this.modulePath,docCommentLookup:a},allowPartialModule:this.allowPartialModule,registerPartialModule:this.registerPartialModule});r=l,this.env=r,this.moduleValue=s,this.moduleError=u}getModuleValue(){if(!this.moduleValue)throw new Error("Module value is not set");return this.moduleValue}getModuleError(){return this.parser.getParserError()??this.moduleError}getEnv(){if(!this.env)throw new Error("Evaluator environment is not set");return this.env}};function FN(e){let t=e;for(;;){let n=Iu.join(t,"std");if((0,YF.existsSync)(n))return n;let r=Iu.dirname(t);if(r===t)break;t=r}return Iu.join(__dirname,"../std")}var hl=class{constructor(t){this.modules=new Map;this.dependencies=new Map;this.dependents=new Map;this.loadingModules=new Map;this.allowPartialModule=(t==null?void 0:t.allowPartialModule)??!1,this.stdPath=(t==null?void 0:t.stdPath)??FN(__dirname),this.codeGenratorC=new fp,ep(),ym(),Qd(),rm(),aE(ba),M$(PC)}getRelativePath(t){let n=t.match(/\/std\/(.+)$/);if(n)return`std/${n[1]}`;let r=t.match(/\/tests\/(.+)$/);return r?`tests/${r[1]}`:null}isWorkspaceModule(t){return!t.includes("/extensions/")&&!t.includes("/.vscode/")}findExtensionDuplicates(t){if(!this.isWorkspaceModule(t))return[];let n=this.getRelativePath(t);if(!n)return[];let r=[];for(let[i]of this.modules)i!==t&&!this.isWorkspaceModule(i)&&this.getRelativePath(i)===n&&r.push(i);if(n.startsWith("std/"))for(let[i]of this.modules)!this.isWorkspaceModule(i)&&(i.endsWith("/std/prelude.yo")||i.endsWith("/prelude.yo"))&&!r.includes(i)&&r.push(i);return r}deleteModuleAndDependents(t){let n=this.getDependentModules(t);for(let r of n)su(r),ou(r),this.clearDependencies(r),rf(r),this.modules.delete(r);su(t),ou(t),this.clearDependencies(t),rf(t),this.modules.delete(t)}addDependency(t,n){this.dependencies.has(t)||this.dependencies.set(t,new Set),this.dependencies.get(t).add(n),this.dependents.has(n)||this.dependents.set(n,new Set),this.dependents.get(n).add(t)}getDependentModules(t){let n=new Set,r=[t];for(;r.length>0;){let i=r.pop(),o=this.dependents.get(i);if(o)for(let a of o)n.has(a)||(n.add(a),r.push(a))}return n}clearDependencies(t){let n=this.dependencies.get(t);if(n)for(let r of n){let i=this.dependents.get(r);i&&i.delete(t)}this.dependencies.delete(t)}resetAllState(){for(let t of this.modules.keys())su(t),ou(t),rf(t);this.modules.clear(),this.dependencies.clear(),this.dependents.clear(),this.loadingModules.clear(),ep(),ym(),Qd(),rm()}loadModule(t,n,r){if(!t.match(/^file:\/\//))throw new Error(`Invalid file protocol: ${t}. Only file:// is supported for now. `);r&&this.addDependency(r,t);let i=this.modules.get(t);if(i)return{moduleValue:i.moduleValue,moduleError:i.moduleError};let o=this.loadingModules.get(t);if(o)return{moduleValue:o,moduleError:void 0};let a=this.findExtensionDuplicates(t);for(let f of a)this.deleteModuleAndDependents(f);let s=t,l=new Lu({modulePath:t,stdPath:this.stdPath,loadModule:f=>this.loadModule(f,void 0,s),inputString:n,allowPartialModule:this.allowPartialModule,registerPartialModule:f=>{this.loadingModules.set(t,f)}});this.loadingModules.delete(t);let u=l.getModuleValue(),c=l.getModuleError();return this.modules.set(t,{moduleValue:u,moduleError:c,evaluator:l}),{moduleValue:u,moduleError:c}}deleteModule(t){if(!t.match(/^file:\/\//))throw new Error(`Invalid file protocol: ${t}. Only file:// is supported for now. `);let n=[t];if(this.isWorkspaceModule(t))for(let[i]of this.modules)!this.isWorkspaceModule(i)&&!n.includes(i)&&n.push(i);if(t.endsWith("/std/prelude.yo")||t.endsWith("/prelude.yo"))for(let[i]of this.modules)(i.endsWith("/std/prelude.yo")||i.endsWith("/prelude.yo"))&&i!==t&&!n.includes(i)&&n.push(i);for(let i of n)this.deleteModuleAndDependents(i)}compileModule(t,{emitC:n,debugGc:r,debugParallelism:i,debugAsyncAwait:o,allocator:a,isLibrary:s}={}){let{moduleValue:l,moduleError:u}=this.loadModule(t);if(u)throw u.toString();if(!this.modules.get(t))throw new Error(`Module data not found for ${t}`);let f=[];for(let[,p]of this.modules){let _=p.moduleValue;_.moduleLevelInitExprs&&_.moduleLevelInitExprs.length>0&&f.push(..._.moduleLevelInitExprs)}this.codeGenratorC.compileModule(t,l,{debugGc:r,debugParallelism:i,debugAsyncAwait:o,allocator:a,isLibrary:s,allModuleLevelInitExprs:f.length>0?f:void 0}),n&&console.log(this.codeGenratorC.print())}getGeneratedCode(){return this.codeGenratorC.print()}getExportedFunctionNames(){return this.codeGenratorC.getExportedFunctionNames()}get needsIntelAsmSyntax(){return this.codeGenratorC.needsIntelAsmSyntax}get usesParallelism(){return this.codeGenratorC.usesParallelism}};var Np=require("fs"),vl=Yn(require("path"));var KF={name:"@shd101wyy/yo",displayName:"Yo",version:"0.1.18",main:"./out/cjs/index.cjs",module:"./out/esm/index.mjs",types:"./out/types/src/index.d.ts",bin:{yo:"./out/cjs/yo-cli.cjs","yo-cli":"./out/cjs/yo-cli.cjs"},files:["out","scripts","vendor","std",".github/skills"],repository:"https://github.com/shd101wyy/yo",author:"Yiyi Wang <shd101wyy@gmail.com>",license:"NCSA",keywords:["yo","language","compiler","vscode-extension"],scripts:{"build:esbuild":"bun run build.js","build:typings":"tsc --project . --declaration",build:"bun run build:esbuild && bun run build:typings",dev:"bun run build.js --watch",lint:"eslint .",format:'prettier --write "**/*.*" ".github/**/*.*"',test:"jest","test:watch":"jest --watch","test:coverage":"jest --coverage",postinstall:"node scripts/print-welcome.js && node scripts/check-liburing.js",prepare:"husky"},"lint-staged":{"*.{js,jsx,ts,tsx}":["eslint --fix","prettier --write"],"*.{json,md,yml,yaml,css,html}":["prettier --write"]},dependencies:{markdown_yo:"0.0.4","vscode-languageserver":"^9.0.1","vscode-languageserver-textdocument":"^1.0.12",yargs:"^17.7.2"},devDependencies:{"@types/bun":"^1.3.8","@types/jest":"^29.5.11","@types/node":"^20.10.5","@types/yargs":"^17.0.32","@typescript-eslint/eslint-plugin":"^6.8.0","@typescript-eslint/parser":"^6.8.0",esbuild:"^0.20.0","esbuild-plugin-polyfill-node":"^0.3.0",eslint:"^8.52.0","eslint-plugin-import":"^2.32.0",glob:"^11.0.3",husky:"^9.1.7",jest:"^29.7.0","lint-staged":"^16.2.7",prettier:"^3.0.3","prettier-plugin-packagejson":"^2.4.6","ts-jest":"^29.1.1",typescript:"^5.8.3"}};var IN=".yo-version";function xp(){return KF.version}function SN(e){let t=vl.resolve(e);for(;;){let n=vl.join(t,IN);if((0,Np.existsSync)(n))return n;let r=vl.dirname(t);if(r===t)return null;t=r}}function AN(e){let t=e.trim();if(!t)throw new Error(`Empty .yo-version file. Specify a concrete version number (e.g., ${xp()}).`);if((t.startsWith("v")||t.startsWith("V"))&&(t=t.slice(1)),t.toLowerCase()==="latest")throw new Error(`Invalid version "latest" in .yo-version.
11605
11605
  Specify a concrete version number (e.g., ${xp()}).`);if(!/^\d+\.\d+\.\d+(-[a-zA-Z0-9.]+)?(\+[a-zA-Z0-9.]+)?$/.test(t))throw new Error(`Invalid version "${t}" in .yo-version.
11606
11606
  Expected a semver version like "0.1.12" or "v0.1.12".`);return t}function XF(e){let t=SN(e);if(!t)return null;let n=(0,Np.readFileSync)(t,"utf-8");return AN(n)}var xN=require("child_process"),vi=Yn(require("fs"));var NN=Yn(require("os")),Dp=Yn(require("path"));function QF(e){let t=ap(e);if(!vi.existsSync(t)||!vi.existsSync(Dp.join(t,"package.json")))return!1;try{let n=JSON.parse(vi.readFileSync(Dp.join(t,"package.json"),"utf-8"));if(n.dependencies&&Object.keys(n.dependencies).length>0&&!vi.existsSync(Dp.join(t,"node_modules")))return!1}catch{return!1}return!0}function io(e,t,n){return e.find(r=>r.position.row===t&&n>=r.position.column&&n<r.position.column+r.value.length&&r.type!=="whitespace"&&r.type!=="single_line_comment"&&r.type!=="multi_line_comment")||null}function DN(e,t,n){let r=i=>{if(Q(i))i.token.value===t.value&&i.token.position.row===t.position.row&&i.token.position.column===t.position.column&&n.push(i);else if(S(i)){let o=i;r(o.func);for(let a of o.args)r(a)}};for(let i of e)r(i)}function Vp(e,t,n){let r=[];return DN(e,t,r),r.length===0?null:r.length===1?r[0]:(r.sort((i,o)=>{let a=i.$?1:0,s=o.$?1:0;if(a!==s)return s-a;let l=i.token.position.row>=5,u=o.token.position.row>=5;if(l!==u)return u?-1:1;let c=i.token.position.row<=n,f=o.token.position.row<=n;return c&&f?o.token.position.row-i.token.position.row:c!==f?c?-1:1:0}),r[0]??null)}function cy(e,t){let n=e.initializedAtToken,r=t.initializedAtToken;return!n&&!r?0:n?r?n.position.row!==r.position.row?r.position.row-n.position.row:r.position.column-n.position.column:-1:1}function VN(e,t){let n=e.initializedAtToken;return!n||n.modulePath!==t.modulePath?!1:n.position.row<t.position.row?!0:n.position.row===t.position.row&&n.position.column<=t.position.column}function jo(e,t){let n=e.filter(o=>{let a=o.initializedAtToken;return a!==void 0&&a.modulePath===t.modulePath&&a.position.row===t.position.row&&a.position.column===t.position.column});if(n.length>0)return[...n].sort(cy)[0];let r=e.filter(o=>VN(o,t));if(r.length>0)return[...r].sort(cy)[0];let i=e.filter(o=>{var a;return((a=o.initializedAtToken)==null?void 0:a.modulePath)===t.modulePath});return i.length>0?[...i].sort(cy)[0]:e[e.length-1]}function ni(e){return e.startsWith("file://")?`file://${e.replace("file://","")}`:`file://${e}`}function ri(e){return e.startsWith("file://")?e:`file://${e}`}var Mp=class{constructor(t){this.moduleManagerStdPath=null;this.evaluatedBuildProjects=new Map;this.lastAnalyzedTextByUri=new Map;this.analyzeGenerationByUri=new Map;this.lastGoodModules=new Map;this.moduleManager=new hl({allowPartialModule:!0,stdPath:t??void 0}),this.moduleManagerStdPath=this.moduleManager.stdPath}getStdPath(){return this.moduleManagerStdPath}attachToDocuments(t,n){t.onDidChangeContent(r=>{this.analyzeDocument(r.document,n)}),t.onDidClose(r=>{let i=r.document.uri,o=ri(i);this.moduleManager.deleteModule(o),this.lastAnalyzedTextByUri.delete(i),this.analyzeGenerationByUri.delete(i),this.lastGoodModules.delete(o)})}analyzeDocument(t,n){let r=t.uri,i=t.getText();if(this.lastAnalyzedTextByUri.get(r)===i)return;this.lastAnalyzedTextByUri.set(r,i);let o=(this.analyzeGenerationByUri.get(r)??0)+1;this.analyzeGenerationByUri.set(r,o),this.ensureStdPathForUri(r),this.ensureBuildImportsResolved(r);let a=ri(r),s=this.moduleManager.modules.get(a);if(s)try{if(s.evaluator.getProgram().length>0){let u=YE();this.lastGoodModules.set(a,{module:s,traitFieldSnapshots:u})}}catch{}this.moduleManager.deleteModule(a),this.moduleManager.loadModule(a,i),this.analyzeGenerationByUri.get(r)===o&&n(r)}getModule(t){let n=ri(t);return this.moduleManager.modules.get(n)}getModuleForCompletion(t){let n=ri(t),r=this.moduleManager.modules.get(n);return r||this.getLastGoodModule(t)}getLastGoodModule(t){let n=ri(t),r=this.lastGoodModules.get(n);if(r){for(let[i,o]of r.traitFieldSnapshots)i.fields=o;return r.module}}getModuleManager(){return this.moduleManager}ensureStdPathForUri(t){let n=t.replace("file://",""),r=this.findStdPath(n);r&&this.moduleManagerStdPath!==r&&(this.moduleManager.resetAllState(),this.moduleManager.stdPath=r,this.moduleManagerStdPath=r,this.evaluatedBuildProjects.clear(),this.lastGoodModules.clear(),T$())}findStdPath(t){let n=ii.dirname(t),r=XF(n);if(r&&r!==xp()&&QF(r)){let o=ii.join(ap(r),"std");if((0,Ho.existsSync)(o))return o}let i=n;for(;;){let o=ii.join(i,"std");if((0,Ho.existsSync)(o))return o;let a=ii.dirname(i);if(a===i)return null;i=a}}findBuildYoForUri(t){let n=t.replace("file://",""),r=ii.dirname(n),i=ii.parse(r).root;for(;r!==i;){let o=ii.join(r,"build.yo");if((0,Ho.existsSync)(o))return{buildFile:o,projectDir:r};r=ii.dirname(r)}return null}ensureBuildImportsResolved(t){let n=this.findBuildYoForUri(t);if(!n||this.evaluatedBuildProjects.has(n.projectDir))return;this.evaluatedBuildProjects.set(n.projectDir,!0);let r=new hl;try{Em();let i=`file://${(0,Ho.realpathSync)(n.buildFile)}`;r.loadModule(i);let o=tl();for(let a of o.artifacts)for(let s of a.importedModules){let l=s.dependencyName;if(l){let u=this.findDependencyDir(o,n.projectDir,l);u&&this.resolveDepModuleRoot(u,s)}else{let u=o.modules.find(c=>c.name===s.moduleName);u&&Tm(s.importName,ii.resolve(n.projectDir,u.root))}}Em()}catch{}finally{r.resetAllState()}}findDependencyDir(t,n,r){let i=t.pathDependencies.find(o=>o.name===r);if(i){let o=ii.resolve(n,i.path);if((0,Ho.existsSync)(o))return o}try{return sp(n,r)}catch{return}}resolveDepModuleRoot(t,n){let r=ii.join(t,"build.yo");if(!(0,Ho.existsSync)(r))return;let i=$m(new fu),o=new hl;try{o.loadModule(`file://${(0,Ho.realpathSync)(r)}`);let a=tl(),s=n.moduleName===""?a.modules[0]:a.modules.find(l=>l.name===n.moduleName);s&&Tm(n.importName,ii.resolve(t,s.root))}catch{}finally{o.resetAllState(),$m(i)}}};var Su=Yn(Na());function JF(e,t,n){let r=ri(e),i=t.getModuleManager().modules.get(r);if(!i)return[];let o=i.moduleError;return o?MN(o,n):[]}function MN(e,t){let n=[];if(e instanceof Lr)for(let{token:r,errorMessage:i}of e.tokenAndErrorList){let{row:o,column:a}=r.position;n.push({range:{start:{line:o,character:a},end:{line:o,character:a+r.value.length}},message:i,severity:Su.DiagnosticSeverity.Error,source:"yo"})}else e instanceof oi?t?n.push(RN(e,t)):n.push({range:{start:{line:0,character:0},end:{line:0,character:1}},message:e.message,severity:Su.DiagnosticSeverity.Error,source:"yo"}):n.push({range:{start:{line:0,character:0},end:{line:0,character:1}},message:String(e),severity:Su.DiagnosticSeverity.Error,source:"yo"});return n}function RN(e,t){let{characterIndex:n,message:r}=e,i=0,o=0;for(let a=0;a<n&&a<t.length;a++)t[a]===`
11607
11607
  `?(i++,o=0):o++;return{range:{start:{line:i,character:o},end:{line:i,character:o+1}},message:r,severity:Su.DiagnosticSeverity.Error,source:"yo"}}var ZF=Yn(Na());function eL(e,t,n,r){var C,w,I,L,x;let i=r.getModule(e),o=r.getLastGoodModule(e),a=i??o;if(!a)return null;let s=i??o;if(!s)return null;let l=s.evaluator.getTokens(),u=io(l,t,n);if(!u)return null;let c=[i,o].filter(V=>V!=null),f=null;for(let V of c){let M=V.evaluator.getProgram();if(f=Vp(M,u,t),f&&Q(f)||u.type==="identifier"&&(f=ON(M,u),f&&Q(f)))break;f=null}if(!f&&u.type==="identifier"&&o){let V=o.evaluator.getProgram();f=PN(V,u.value,u)}if(!f||!Q(f))return null;let p=a.evaluator.getProgram(),_=f,d=A(_);mi(d)&&(d=`(${d})`);let v=(C=_.$)==null?void 0:C.type,y=(w=_.$)==null?void 0:w.value,h=!1,g=!1,T=!1,E;if((I=_.$)!=null&&I.env){let V=ge(_.$.env,_.token.value),M=V&&V.length>0?jo(V,u):void 0;g=M!==void 0,M&&(v=M.type,y=(L=M.value)==null?void 0:L[0],T=M.isCompileTimeOnly,h=!M.initializedAtToken,E=M.docComment)}if(!v){let V=UN(p,_);V&&(v=V.type,y=V.value,E=V.docComment,g=!0,T=!0)}T&&(d=`comptime(${d})`);let $="```\n"+d;if(v){let V=O(v);$+=`
@@ -0,0 +1,4 @@
1
+ export interface SkillsInstallOptions {
2
+ cwd?: string;
3
+ }
4
+ export declare function runSkillsInstall(options?: SkillsInstallOptions): Promise<void>;