MCPcopy Create free account
hub / github.com/argumentcomputer/ix / preseed_expr_tables

Function preseed_expr_tables

crates/compile/src/compile.rs:545–585  ·  view source on GitHub ↗
(
  exprs: &[(&LeanExpr, &[Name])],
  mut_ctx: &MutCtx,
  cache: &mut BlockCache,
  stt: &CompileState,
  caller: &str,
)

Source from the content-addressed store, hash-verified

543}
544
545fn univ_params_key(univ_params: &[Name]) -> Address {
546 let mut hasher = blake3::Hasher::new();
547 for name in univ_params {
548 hasher.update(name.get_hash().as_bytes());
549 }
550 Address::from_blake3_hash(hasher.finalize())
551}
552
553fn collect_expr_tables(
554 expr: &LeanExpr,
555 univ_params: &[Name],
556 mut_ctx: &MutCtx,
557 cache: &mut BlockCache,
558 stt: &CompileState,
559 refs: &mut Vec<Address>,
560 univs: &mut Vec<Arc<Univ>>,
561 seen_exprs: &mut FxHashMap<(Address, Address), ()>,
562 caller: &str,
563) -> Result<(), CompileError> {
564 let ctx_key = univ_params_key(univ_params);
565 let mut stack = vec![expr];
566 while let Some(e) = stack.pop() {
567 let key = Address::from_blake3_hash(*e.get_hash());
568 if seen_exprs.insert((key, ctx_key.clone()), ()).is_some() {
569 continue;
570 }
571
572 match e.as_data() {
573 ExprData::Bvar(..) => {},
574 ExprData::Sort(level, _) => {
575 univs.push(compile_univ(level, univ_params, cache)?);
576 },
577 ExprData::Const(name, levels, _) => {
578 for level in levels {
579 univs.push(compile_univ(level, univ_params, cache)?);
580 }
581 if !mut_ctx.contains_key(name) {
582 let const_addr = stt.resolve_addr(name).ok_or_else(|| {
583 CompileError::MissingConstant {
584 name: name.pretty(),
585 caller: format!("{caller} @ preseed(Const)"),
586 }
587 })?;
588 refs.push(const_addr);

Callers 4

compile_single_defFunction · 0.85
compile_const_innerFunction · 0.85
compile_mutualFunction · 0.85

Calls 4

collect_expr_tablesFunction · 0.85
univ_sort_keyFunction · 0.85
sortMethod · 0.45
cmpMethod · 0.45

Tested by

no test coverage detected