mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-27 13:59:08 +00:00
one more shrinkage
This commit is contained in:
parent
892447b08c
commit
54198d7da1
8 changed files with 18 additions and 16 deletions
|
@ -173,7 +173,7 @@ fn jit_to_ast_help<'a>(
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
Content::Structure(FlatType::FunctionOrTagUnion(tag_name, _, _)) => Ok(
|
Content::Structure(FlatType::FunctionOrTagUnion(tag_name, _, _)) => Ok(
|
||||||
single_tag_union_to_ast(env, ptr, field_layouts, tag_name.clone(), &[]),
|
single_tag_union_to_ast(env, ptr, field_layouts, *tag_name.clone(), &[]),
|
||||||
),
|
),
|
||||||
Content::Structure(FlatType::Func(_, _, _)) => {
|
Content::Structure(FlatType::Func(_, _, _)) => {
|
||||||
// a function with a struct as the closure environment
|
// a function with a struct as the closure environment
|
||||||
|
@ -435,7 +435,7 @@ fn ptr_to_ast<'a>(
|
||||||
single_tag_union_to_ast(env, ptr, field_layouts, tag_name.clone(), payload_vars)
|
single_tag_union_to_ast(env, ptr, field_layouts, tag_name.clone(), payload_vars)
|
||||||
}
|
}
|
||||||
Content::Structure(FlatType::FunctionOrTagUnion(tag_name, _, _)) => {
|
Content::Structure(FlatType::FunctionOrTagUnion(tag_name, _, _)) => {
|
||||||
single_tag_union_to_ast(env, ptr, field_layouts, tag_name.clone(), &[])
|
single_tag_union_to_ast(env, ptr, field_layouts, *tag_name.clone(), &[])
|
||||||
}
|
}
|
||||||
Content::Structure(FlatType::EmptyRecord) => {
|
Content::Structure(FlatType::EmptyRecord) => {
|
||||||
struct_to_ast(env, ptr, &[], &RecordFields::with_capacity(0))
|
struct_to_ast(env, ptr, &[], &RecordFields::with_capacity(0))
|
||||||
|
|
|
@ -1235,7 +1235,7 @@ fn layout_from_flat_type<'a>(
|
||||||
debug_assert!(ext_var_is_empty_tag_union(subs, ext_var));
|
debug_assert!(ext_var_is_empty_tag_union(subs, ext_var));
|
||||||
|
|
||||||
let mut tags = MutMap::default();
|
let mut tags = MutMap::default();
|
||||||
tags.insert(tag_name, vec![]);
|
tags.insert(*tag_name, vec![]);
|
||||||
|
|
||||||
Ok(layout_from_tag_union(arena, tags, subs))
|
Ok(layout_from_tag_union(arena, tags, subs))
|
||||||
}
|
}
|
||||||
|
|
|
@ -737,7 +737,7 @@ fn type_to_variable(
|
||||||
debug_assert!(ext_tag_vec.is_empty());
|
debug_assert!(ext_tag_vec.is_empty());
|
||||||
|
|
||||||
let content = Content::Structure(FlatType::FunctionOrTagUnion(
|
let content = Content::Structure(FlatType::FunctionOrTagUnion(
|
||||||
tag_name.clone(),
|
Box::new(tag_name.clone()),
|
||||||
*symbol,
|
*symbol,
|
||||||
new_ext_var,
|
new_ext_var,
|
||||||
));
|
));
|
||||||
|
|
|
@ -4499,6 +4499,6 @@ mod solve_expr {
|
||||||
std::mem::size_of::<roc_types::types::Problem>(),
|
std::mem::size_of::<roc_types::types::Problem>(),
|
||||||
);
|
);
|
||||||
|
|
||||||
assert_eq!(query, (40, 80, 64, 56, 64))
|
assert_eq!((40, 72, 56, 48, 64), query)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -494,8 +494,8 @@ fn write_flat_type(env: &Env, flat_type: &FlatType, subs: &Subs, buf: &mut Strin
|
||||||
FunctionOrTagUnion(tag_name, _, ext_var) => {
|
FunctionOrTagUnion(tag_name, _, ext_var) => {
|
||||||
buf.push_str("[ ");
|
buf.push_str("[ ");
|
||||||
|
|
||||||
let mut tags = MutMap::default();
|
let mut tags: MutMap<TagName, _> = MutMap::default();
|
||||||
tags.insert(tag_name.clone(), vec![]);
|
tags.insert(*tag_name.clone(), vec![]);
|
||||||
let ext_content = write_sorted_tags(env, subs, buf, &tags, *ext_var);
|
let ext_content = write_sorted_tags(env, subs, buf, &tags, *ext_var);
|
||||||
|
|
||||||
buf.push_str(" ]");
|
buf.push_str(" ]");
|
||||||
|
@ -558,7 +558,7 @@ pub fn chase_ext_tag_union<'a>(
|
||||||
chase_ext_tag_union(subs, *ext_var, fields)
|
chase_ext_tag_union(subs, *ext_var, fields)
|
||||||
}
|
}
|
||||||
Content::Structure(FunctionOrTagUnion(tag_name, _, ext_var)) => {
|
Content::Structure(FunctionOrTagUnion(tag_name, _, ext_var)) => {
|
||||||
fields.push((tag_name.clone(), vec![]));
|
fields.push((*tag_name.clone(), vec![]));
|
||||||
|
|
||||||
chase_ext_tag_union(subs, *ext_var, fields)
|
chase_ext_tag_union(subs, *ext_var, fields)
|
||||||
}
|
}
|
||||||
|
|
|
@ -433,7 +433,7 @@ impl SolvedType {
|
||||||
FunctionOrTagUnion(tag_name, symbol, ext_var) => {
|
FunctionOrTagUnion(tag_name, symbol, ext_var) => {
|
||||||
let ext = Self::from_var_help(subs, recursion_vars, *ext_var);
|
let ext = Self::from_var_help(subs, recursion_vars, *ext_var);
|
||||||
|
|
||||||
SolvedType::FunctionOrTagUnion(tag_name.clone(), *symbol, Box::new(ext))
|
SolvedType::FunctionOrTagUnion(*tag_name.clone(), *symbol, Box::new(ext))
|
||||||
}
|
}
|
||||||
RecursiveTagUnion(rec_var, tags, ext_var) => {
|
RecursiveTagUnion(rec_var, tags, ext_var) => {
|
||||||
recursion_vars.insert(subs, *rec_var);
|
recursion_vars.insert(subs, *rec_var);
|
||||||
|
|
|
@ -626,7 +626,7 @@ pub enum FlatType {
|
||||||
Func(Vec<Variable>, Variable, Variable),
|
Func(Vec<Variable>, Variable, Variable),
|
||||||
Record(RecordFields, Variable),
|
Record(RecordFields, Variable),
|
||||||
TagUnion(MutMap<TagName, Vec<Variable>>, Variable),
|
TagUnion(MutMap<TagName, Vec<Variable>>, Variable),
|
||||||
FunctionOrTagUnion(TagName, Symbol, Variable),
|
FunctionOrTagUnion(Box<TagName>, Symbol, Variable),
|
||||||
RecursiveTagUnion(Variable, MutMap<TagName, Vec<Variable>>, Variable),
|
RecursiveTagUnion(Variable, MutMap<TagName, Vec<Variable>>, Variable),
|
||||||
Erroneous(Box<Problem>),
|
Erroneous(Box<Problem>),
|
||||||
EmptyRecord,
|
EmptyRecord,
|
||||||
|
@ -1389,6 +1389,8 @@ fn flat_type_to_err_type(
|
||||||
}
|
}
|
||||||
|
|
||||||
FunctionOrTagUnion(tag_name, _, ext_var) => {
|
FunctionOrTagUnion(tag_name, _, ext_var) => {
|
||||||
|
let tag_name = *tag_name;
|
||||||
|
|
||||||
let mut err_tags = SendMap::default();
|
let mut err_tags = SendMap::default();
|
||||||
|
|
||||||
err_tags.insert(tag_name, vec![]);
|
err_tags.insert(tag_name, vec![]);
|
||||||
|
|
|
@ -1122,11 +1122,11 @@ fn unify_flat_type(
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
let mut tags1 = MutMap::default();
|
let mut tags1 = MutMap::default();
|
||||||
tags1.insert(tag_name_1.clone(), vec![]);
|
tags1.insert(*tag_name_1.clone(), vec![]);
|
||||||
let union1 = gather_tags(subs, tags1, *ext_1);
|
let union1 = gather_tags(subs, tags1, *ext_1);
|
||||||
|
|
||||||
let mut tags2 = MutMap::default();
|
let mut tags2 = MutMap::default();
|
||||||
tags2.insert(tag_name_2.clone(), vec![]);
|
tags2.insert(*tag_name_2.clone(), vec![]);
|
||||||
let union2 = gather_tags(subs, tags2, *ext_2);
|
let union2 = gather_tags(subs, tags2, *ext_2);
|
||||||
|
|
||||||
unify_tag_union(subs, pool, ctx, union1, union2, (None, None))
|
unify_tag_union(subs, pool, ctx, union1, union2, (None, None))
|
||||||
|
@ -1136,14 +1136,14 @@ fn unify_flat_type(
|
||||||
let union1 = gather_tags(subs, tags1.clone(), *ext1);
|
let union1 = gather_tags(subs, tags1.clone(), *ext1);
|
||||||
|
|
||||||
let mut tags2 = MutMap::default();
|
let mut tags2 = MutMap::default();
|
||||||
tags2.insert(tag_name.clone(), vec![]);
|
tags2.insert(*tag_name.clone(), vec![]);
|
||||||
let union2 = gather_tags(subs, tags2, *ext2);
|
let union2 = gather_tags(subs, tags2, *ext2);
|
||||||
|
|
||||||
unify_tag_union(subs, pool, ctx, union1, union2, (None, None))
|
unify_tag_union(subs, pool, ctx, union1, union2, (None, None))
|
||||||
}
|
}
|
||||||
(FunctionOrTagUnion(tag_name, _, ext1), TagUnion(tags2, ext2)) => {
|
(FunctionOrTagUnion(tag_name, _, ext1), TagUnion(tags2, ext2)) => {
|
||||||
let mut tags1 = MutMap::default();
|
let mut tags1 = MutMap::default();
|
||||||
tags1.insert(tag_name.clone(), vec![]);
|
tags1.insert(*tag_name.clone(), vec![]);
|
||||||
let union1 = gather_tags(subs, tags1, *ext1);
|
let union1 = gather_tags(subs, tags1, *ext1);
|
||||||
|
|
||||||
let union2 = gather_tags(subs, tags2.clone(), *ext2);
|
let union2 = gather_tags(subs, tags2.clone(), *ext2);
|
||||||
|
@ -1156,7 +1156,7 @@ fn unify_flat_type(
|
||||||
debug_assert!(is_recursion_var(subs, *recursion_var));
|
debug_assert!(is_recursion_var(subs, *recursion_var));
|
||||||
|
|
||||||
let mut tags2 = MutMap::default();
|
let mut tags2 = MutMap::default();
|
||||||
tags2.insert(tag_name.clone(), vec![]);
|
tags2.insert(*tag_name.clone(), vec![]);
|
||||||
|
|
||||||
let union1 = gather_tags(subs, tags1.clone(), *ext1);
|
let union1 = gather_tags(subs, tags1.clone(), *ext1);
|
||||||
let union2 = gather_tags(subs, tags2, *ext2);
|
let union2 = gather_tags(subs, tags2, *ext2);
|
||||||
|
@ -1175,7 +1175,7 @@ fn unify_flat_type(
|
||||||
debug_assert!(is_recursion_var(subs, *recursion_var));
|
debug_assert!(is_recursion_var(subs, *recursion_var));
|
||||||
|
|
||||||
let mut tags1 = MutMap::default();
|
let mut tags1 = MutMap::default();
|
||||||
tags1.insert(tag_name.clone(), vec![]);
|
tags1.insert(*tag_name.clone(), vec![]);
|
||||||
|
|
||||||
let union1 = gather_tags(subs, tags1, *ext1);
|
let union1 = gather_tags(subs, tags1, *ext1);
|
||||||
let union2 = gather_tags(subs, tags2.clone(), *ext2);
|
let union2 = gather_tags(subs, tags2.clone(), *ext2);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue