Files
hakorune/src/mir/builder/metadata/propagate.rs
nyash-codex dd65cf7e4c builder+vm: unify method calls via emit_unified_call; add RouterPolicy trace; finalize LocalSSA/BlockSchedule guards; docs + selfhost quickstart
- Unify standard method calls to emit_unified_call; route via RouterPolicy and apply rewrite::{special,known} at a single entry.\n- Stabilize emit-time invariants: LocalSSA finalize + BlockSchedule PHI→Copy→Call ordering; metadata propagation on copies.\n- Known rewrite default ON (userbox only, strict guards) with opt-out flag NYASH_REWRITE_KNOWN_DEFAULT=0.\n- Expand TypeAnnotation whitelist (is_digit_char/is_hex_digit_char/is_alpha_char/Map.has).\n- Docs: unified-method-resolution design note; Quick Reference normalization note; selfhosting/quickstart.\n- Tools: add tools/selfhost_smoke.sh (dev-only).\n- Keep behavior unchanged for Unknown/core/user-instance via BoxCall fallback; all tests green (quick/integration).
2025-09-28 20:38:09 +09:00

25 lines
970 B
Rust
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//! MetadataPropagationBox — MIR のメタデータ(型/起源)の伝播
//! 仕様不変・小粒。各所のコピペを置換するための薄い関数郡。
use crate::mir::{MirType, ValueId};
use crate::mir::builder::MirBuilder;
/// src から dst へ builder 内メタデータvalue_types / value_origin_newboxを伝播する。
#[inline]
pub fn propagate(builder: &mut MirBuilder, src: ValueId, dst: ValueId) {
if let Some(t) = builder.value_types.get(&src).cloned() {
builder.value_types.insert(dst, t);
}
if let Some(cls) = builder.value_origin_newbox.get(&src).cloned() {
builder.value_origin_newbox.insert(dst, cls);
}
}
/// dst に型注釈を明示的に設定し、必要ならば起源情報を消去/維持する。
/// 現状は型のみ設定(挙動不変)。
#[inline]
pub fn propagate_with_override(builder: &mut MirBuilder, dst: ValueId, ty: MirType) {
builder.value_types.insert(dst, ty);
}