mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-27 13:59:08 +00:00
remove Boxed layout
This commit is contained in:
parent
d64930c17f
commit
6d2d65bb1e
24 changed files with 52 additions and 1377 deletions
|
@ -538,20 +538,6 @@ fn jit_to_ast_help<'a, A: ReplApp<'a>>(
|
|||
unreachable!("Ptr will never be visible to users")
|
||||
}
|
||||
LayoutRepr::LambdaSet(_) => OPAQUE_FUNCTION,
|
||||
LayoutRepr::Boxed(_) => {
|
||||
let size = env.layout_cache.interner.stack_size(layout);
|
||||
|
||||
app.call_function_dynamic_size(main_fn_name, size as usize, |mem: &A::Memory, addr| {
|
||||
addr_to_ast(
|
||||
env,
|
||||
mem,
|
||||
addr,
|
||||
env.layout_cache.get_repr(layout),
|
||||
WhenRecursive::Unreachable,
|
||||
env.subs.get_root_key_without_compacting(raw_var),
|
||||
)
|
||||
})
|
||||
}
|
||||
};
|
||||
|
||||
apply_newtypes(env, newtype_containers.into_bump_slice(), expr)
|
||||
|
@ -776,6 +762,34 @@ fn addr_to_ast<'a, M: ReplAppMemory>(
|
|||
when_recursive,
|
||||
)
|
||||
}
|
||||
(
|
||||
Content::Structure(FlatType::Apply(Symbol::BOX_BOX_TYPE, args)),
|
||||
LayoutRepr::Union(UnionLayout::NonNullableUnwrapped([inner_layout])),
|
||||
) => {
|
||||
debug_assert_eq!(args.len(), 1);
|
||||
|
||||
let inner_var_index = args.into_iter().next().unwrap();
|
||||
let inner_var = env.subs[inner_var_index];
|
||||
|
||||
let addr_of_inner = mem.deref_usize(addr);
|
||||
let inner_expr = addr_to_ast(
|
||||
env,
|
||||
mem,
|
||||
addr_of_inner,
|
||||
env.layout_cache.get_repr(*inner_layout),
|
||||
WhenRecursive::Unreachable,
|
||||
inner_var,
|
||||
);
|
||||
|
||||
let box_box = env.arena.alloc(Loc::at_zero(Expr::Var {
|
||||
module_name: "Box",
|
||||
ident: "box",
|
||||
}));
|
||||
let box_box_arg = &*env.arena.alloc(Loc::at_zero(inner_expr));
|
||||
let box_box_args = env.arena.alloc([box_box_arg]);
|
||||
|
||||
Expr::Apply(box_box, box_box_args, CalledVia::Space)
|
||||
}
|
||||
(_, LayoutRepr::Union(UnionLayout::NonNullableUnwrapped(_))) => {
|
||||
let (rec_var, tags) = match unroll_recursion_var(env, raw_content) {
|
||||
Content::Structure(FlatType::RecursiveTagUnion(rec_var, tags, _)) => {
|
||||
|
@ -890,37 +904,6 @@ fn addr_to_ast<'a, M: ReplAppMemory>(
|
|||
)
|
||||
}
|
||||
}
|
||||
(
|
||||
Content::Structure(FlatType::Apply(Symbol::BOX_BOX_TYPE, args)),
|
||||
LayoutRepr::Boxed(inner_layout),
|
||||
) => {
|
||||
debug_assert_eq!(args.len(), 1);
|
||||
|
||||
let inner_var_index = args.into_iter().next().unwrap();
|
||||
let inner_var = env.subs[inner_var_index];
|
||||
|
||||
let addr_of_inner = mem.deref_usize(addr);
|
||||
let inner_expr = addr_to_ast(
|
||||
env,
|
||||
mem,
|
||||
addr_of_inner,
|
||||
env.layout_cache.get_repr(inner_layout),
|
||||
WhenRecursive::Unreachable,
|
||||
inner_var,
|
||||
);
|
||||
|
||||
let box_box = env.arena.alloc(Loc::at_zero(Expr::Var {
|
||||
module_name: "Box",
|
||||
ident: "box",
|
||||
}));
|
||||
let box_box_arg = &*env.arena.alloc(Loc::at_zero(inner_expr));
|
||||
let box_box_args = env.arena.alloc([box_box_arg]);
|
||||
|
||||
Expr::Apply(box_box, box_box_args, CalledVia::Space)
|
||||
}
|
||||
(_, LayoutRepr::Boxed(_)) => {
|
||||
unreachable!("Box layouts can only be behind a `Box.Box` application")
|
||||
}
|
||||
(_, LayoutRepr::Ptr(_)) => {
|
||||
unreachable!("Ptr layouts are never available in user code")
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue