mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-17 09:15:16 +00:00
List takes interned element
This commit is contained in:
parent
f2a42affd1
commit
e4b5252e51
16 changed files with 173 additions and 83 deletions
|
@ -136,7 +136,7 @@ fn bytes_as_ascii(bytes: &[u8]) -> String {
|
|||
|
||||
pub fn spec_program<'a, I>(
|
||||
arena: &'a Bump,
|
||||
interner: &STLayoutInterner<'a>,
|
||||
interner: &mut STLayoutInterner<'a>,
|
||||
opt_level: OptLevel,
|
||||
entry_point: roc_mono::ir::EntryPoint<'a>,
|
||||
procs: I,
|
||||
|
@ -449,7 +449,7 @@ fn build_entry_point<'a>(
|
|||
|
||||
fn proc_spec<'a>(
|
||||
arena: &'a Bump,
|
||||
interner: &STLayoutInterner<'a>,
|
||||
interner: &mut STLayoutInterner<'a>,
|
||||
proc: &Proc<'a>,
|
||||
) -> Result<(FuncDef, MutSet<UnionLayout<'a>>)> {
|
||||
let mut builder = FuncDefBuilder::new();
|
||||
|
@ -546,7 +546,7 @@ fn apply_refcount_operation<'a>(
|
|||
|
||||
fn stmt_spec<'a>(
|
||||
builder: &mut FuncDefBuilder,
|
||||
interner: &STLayoutInterner<'a>,
|
||||
interner: &mut STLayoutInterner<'a>,
|
||||
env: &mut Env<'a>,
|
||||
block: BlockId,
|
||||
layout: &Layout<'a>,
|
||||
|
@ -788,7 +788,7 @@ fn add_loop(
|
|||
|
||||
fn call_spec<'a>(
|
||||
builder: &mut FuncDefBuilder,
|
||||
interner: &STLayoutInterner<'a>,
|
||||
interner: &mut STLayoutInterner<'a>,
|
||||
env: &mut Env<'a>,
|
||||
block: BlockId,
|
||||
layout: &Layout<'a>,
|
||||
|
@ -909,6 +909,8 @@ fn call_spec<'a>(
|
|||
&WhenRecursive::Unreachable,
|
||||
)?;
|
||||
|
||||
let return_layout = interner.insert(return_layout);
|
||||
|
||||
let state_layout = Layout::Builtin(Builtin::List(return_layout));
|
||||
let state_type = layout_spec(
|
||||
env,
|
||||
|
@ -940,7 +942,9 @@ fn call_spec<'a>(
|
|||
with_new_heap_cell(builder, block, bag)
|
||||
};
|
||||
|
||||
let state_layout = Layout::Builtin(Builtin::List(&argument_layouts[0]));
|
||||
let arg0_layout = interner.insert(&argument_layouts[0]);
|
||||
|
||||
let state_layout = Layout::Builtin(Builtin::List(arg0_layout));
|
||||
let state_type = layout_spec(
|
||||
env,
|
||||
builder,
|
||||
|
@ -979,6 +983,8 @@ fn call_spec<'a>(
|
|||
&WhenRecursive::Unreachable,
|
||||
)?;
|
||||
|
||||
let return_layout = interner.insert(return_layout);
|
||||
|
||||
let state_layout = Layout::Builtin(Builtin::List(return_layout));
|
||||
let state_type = layout_spec(
|
||||
env,
|
||||
|
@ -1024,6 +1030,8 @@ fn call_spec<'a>(
|
|||
&WhenRecursive::Unreachable,
|
||||
)?;
|
||||
|
||||
let return_layout = interner.insert(return_layout);
|
||||
|
||||
let state_layout = Layout::Builtin(Builtin::List(return_layout));
|
||||
let state_type = layout_spec(
|
||||
env,
|
||||
|
@ -1075,6 +1083,8 @@ fn call_spec<'a>(
|
|||
&WhenRecursive::Unreachable,
|
||||
)?;
|
||||
|
||||
let return_layout = interner.insert(return_layout);
|
||||
|
||||
let state_layout = Layout::Builtin(Builtin::List(return_layout));
|
||||
let state_type = layout_spec(
|
||||
env,
|
||||
|
@ -1245,6 +1255,7 @@ fn lowlevel_spec<'a>(
|
|||
|
||||
match layout {
|
||||
Layout::Builtin(Builtin::List(element_layout)) => {
|
||||
let element_layout = interner.get(*element_layout);
|
||||
let type_id = layout_spec(
|
||||
env,
|
||||
builder,
|
||||
|
@ -1413,7 +1424,7 @@ fn worst_case_type(context: &mut impl TypeContext) -> Result<TypeId> {
|
|||
|
||||
fn expr_spec<'a>(
|
||||
builder: &mut FuncDefBuilder,
|
||||
interner: &STLayoutInterner<'a>,
|
||||
interner: &mut STLayoutInterner<'a>,
|
||||
env: &mut Env<'a>,
|
||||
block: BlockId,
|
||||
layout: &Layout<'a>,
|
||||
|
@ -1583,6 +1594,7 @@ fn expr_spec<'a>(
|
|||
|
||||
EmptyArray => match layout {
|
||||
Layout::Builtin(Builtin::List(element_layout)) => {
|
||||
let element_layout = interner.get(*element_layout);
|
||||
let type_id = layout_spec(
|
||||
env,
|
||||
builder,
|
||||
|
@ -1772,6 +1784,7 @@ fn builtin_spec<'a>(
|
|||
Decimal | Float(_) => builder.add_tuple_type(&[]),
|
||||
Str => str_type(builder),
|
||||
List(element_layout) => {
|
||||
let element_layout = interner.get(*element_layout);
|
||||
let element_type =
|
||||
layout_spec_help(env, builder, interner, element_layout, when_recursive)?;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue