feat(llvm): Implement Context Boxing pattern for cleaner APIs
Major improvement to reduce parameter explosion (15+ args → 3-4 contexts): - Add LowerFnCtx/BlockCtx for grouping related parameters - Add lightweight StrHandle/StrPtr newtypes for string safety - Implement boxed API wrappers for boxcall/fields/invoke - Add dev checks infrastructure (NYASH_DEV_CHECK_DISPATCH_ONLY_PHI) Key achievements: - lower_boxcall: 16 args → 7 args via boxed API - fields/invoke: Similar parameter reduction - BuilderCursor discipline enforced throughout - String handle invariant: i64 across blocks, i8* only at call sites Status: - Internal migration in progress (fields → invoke → marshal) - Full cutover pending due to borrow checker constraints - dep_tree_min_string.o generation successful (sealed=ON) Next: Complete internal migration before flipping to boxed APIs 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -73,7 +73,6 @@ pub(in super::super) fn emit_jump<'ctx, 'b>(
|
||||
BasicBlockId,
|
||||
Vec<(ValueId, PhiValue<'ctx>, Vec<(BasicBlockId, ValueId)>)>,
|
||||
>,
|
||||
vmap: &HashMap<ValueId, BasicValueEnum<'ctx>>,
|
||||
) -> Result<(), String> {
|
||||
// Non-sealed incoming wiring removed: rely on sealed snapshots and resolver-driven PHIs.
|
||||
let tbb = *bb_map.get(target).ok_or("target bb missing")?;
|
||||
@ -193,8 +192,6 @@ pub(in super::super) fn seal_block<'ctx, 'b>(
|
||||
>,
|
||||
// Snapshot of value map at end of each predecessor block
|
||||
block_end_values: &HashMap<BasicBlockId, HashMap<ValueId, BasicValueEnum<'ctx>>>,
|
||||
// Fallback: current vmap (used only if snapshot missing)
|
||||
vmap: &HashMap<ValueId, BasicValueEnum<'ctx>>,
|
||||
) -> Result<(), String> {
|
||||
if let Some(slist) = succs.get(&bid) {
|
||||
for sb in slist {
|
||||
|
||||
Reference in New Issue
Block a user