mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-15 08:15:07 +00:00
Rename variant_var to tag_union_var
This commit is contained in:
parent
c81eecd644
commit
7e12bcff1d
8 changed files with 53 additions and 33 deletions
|
@ -444,7 +444,7 @@ fn no_region<T>(value: T) -> Loc<T> {
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
fn tag(name: &'static str, args: Vec<Expr>, var_store: &mut VarStore) -> Expr {
|
fn tag(name: &'static str, args: Vec<Expr>, var_store: &mut VarStore) -> Expr {
|
||||||
Expr::Tag {
|
Expr::Tag {
|
||||||
variant_var: var_store.fresh(),
|
tag_union_var: var_store.fresh(),
|
||||||
ext_var: var_store.fresh(),
|
ext_var: var_store.fresh(),
|
||||||
name: TagName(name.into()),
|
name: TagName(name.into()),
|
||||||
arguments: args
|
arguments: args
|
||||||
|
|
|
@ -535,12 +535,12 @@ fn deep_copy_expr_help<C: CopyEnv>(env: &mut C, copied: &mut Vec<Variable>, expr
|
||||||
},
|
},
|
||||||
|
|
||||||
Tag {
|
Tag {
|
||||||
variant_var,
|
tag_union_var: variant_var,
|
||||||
ext_var,
|
ext_var,
|
||||||
name,
|
name,
|
||||||
arguments,
|
arguments,
|
||||||
} => Tag {
|
} => Tag {
|
||||||
variant_var: sub!(*variant_var),
|
tag_union_var: sub!(*variant_var),
|
||||||
ext_var: sub!(*ext_var),
|
ext_var: sub!(*ext_var),
|
||||||
name: name.clone(),
|
name: name.clone(),
|
||||||
arguments: arguments
|
arguments: arguments
|
||||||
|
@ -1154,13 +1154,13 @@ mod test {
|
||||||
let var2 = new_var(&mut subs, FlexVar(Some(b)));
|
let var2 = new_var(&mut subs, FlexVar(Some(b)));
|
||||||
|
|
||||||
let expr = Expr::Tag {
|
let expr = Expr::Tag {
|
||||||
variant_var: var1,
|
tag_union_var: var1,
|
||||||
ext_var: Variable::EMPTY_TAG_UNION,
|
ext_var: Variable::EMPTY_TAG_UNION,
|
||||||
name: TagName("F".into()),
|
name: TagName("F".into()),
|
||||||
arguments: vec![(
|
arguments: vec![(
|
||||||
var2,
|
var2,
|
||||||
Loc::at_zero(Expr::Tag {
|
Loc::at_zero(Expr::Tag {
|
||||||
variant_var: var2,
|
tag_union_var: var2,
|
||||||
ext_var: Variable::EMPTY_TAG_UNION,
|
ext_var: Variable::EMPTY_TAG_UNION,
|
||||||
name: TagName("G".into()),
|
name: TagName("G".into()),
|
||||||
arguments: vec![],
|
arguments: vec![],
|
||||||
|
@ -1175,7 +1175,7 @@ mod test {
|
||||||
|
|
||||||
match expr {
|
match expr {
|
||||||
Expr::Tag {
|
Expr::Tag {
|
||||||
variant_var,
|
tag_union_var: variant_var,
|
||||||
ext_var,
|
ext_var,
|
||||||
name,
|
name,
|
||||||
mut arguments,
|
mut arguments,
|
||||||
|
@ -1209,7 +1209,7 @@ mod test {
|
||||||
|
|
||||||
match arg.value {
|
match arg.value {
|
||||||
Expr::Tag {
|
Expr::Tag {
|
||||||
variant_var,
|
tag_union_var: variant_var,
|
||||||
ext_var,
|
ext_var,
|
||||||
name,
|
name,
|
||||||
arguments,
|
arguments,
|
||||||
|
@ -1240,13 +1240,13 @@ mod test {
|
||||||
let var2 = new_var(&mut source, FlexVar(Some(b)));
|
let var2 = new_var(&mut source, FlexVar(Some(b)));
|
||||||
|
|
||||||
let expr = Expr::Tag {
|
let expr = Expr::Tag {
|
||||||
variant_var: var1,
|
tag_union_var: var1,
|
||||||
ext_var: Variable::EMPTY_TAG_UNION,
|
ext_var: Variable::EMPTY_TAG_UNION,
|
||||||
name: TagName("F".into()),
|
name: TagName("F".into()),
|
||||||
arguments: vec![(
|
arguments: vec![(
|
||||||
var2,
|
var2,
|
||||||
Loc::at_zero(Expr::Tag {
|
Loc::at_zero(Expr::Tag {
|
||||||
variant_var: var2,
|
tag_union_var: var2,
|
||||||
ext_var: Variable::EMPTY_TAG_UNION,
|
ext_var: Variable::EMPTY_TAG_UNION,
|
||||||
name: TagName("G".into()),
|
name: TagName("G".into()),
|
||||||
arguments: vec![],
|
arguments: vec![],
|
||||||
|
@ -1261,7 +1261,7 @@ mod test {
|
||||||
|
|
||||||
match expr {
|
match expr {
|
||||||
Expr::Tag {
|
Expr::Tag {
|
||||||
variant_var,
|
tag_union_var: variant_var,
|
||||||
ext_var,
|
ext_var,
|
||||||
name,
|
name,
|
||||||
mut arguments,
|
mut arguments,
|
||||||
|
@ -1290,7 +1290,7 @@ mod test {
|
||||||
|
|
||||||
match arg.value {
|
match arg.value {
|
||||||
Expr::Tag {
|
Expr::Tag {
|
||||||
variant_var,
|
tag_union_var: variant_var,
|
||||||
ext_var,
|
ext_var,
|
||||||
name,
|
name,
|
||||||
arguments,
|
arguments,
|
||||||
|
|
|
@ -184,7 +184,7 @@ pub enum Expr {
|
||||||
|
|
||||||
// Sum Types
|
// Sum Types
|
||||||
Tag {
|
Tag {
|
||||||
variant_var: Variable,
|
tag_union_var: Variable,
|
||||||
ext_var: Variable,
|
ext_var: Variable,
|
||||||
name: TagName,
|
name: TagName,
|
||||||
arguments: Vec<(Variable, Loc<Expr>)>,
|
arguments: Vec<(Variable, Loc<Expr>)>,
|
||||||
|
@ -772,12 +772,12 @@ pub fn canonicalize_expr<'a>(
|
||||||
return (fn_expr, output);
|
return (fn_expr, output);
|
||||||
}
|
}
|
||||||
Tag {
|
Tag {
|
||||||
variant_var,
|
tag_union_var: variant_var,
|
||||||
ext_var,
|
ext_var,
|
||||||
name,
|
name,
|
||||||
..
|
..
|
||||||
} => Tag {
|
} => Tag {
|
||||||
variant_var,
|
tag_union_var: variant_var,
|
||||||
ext_var,
|
ext_var,
|
||||||
name,
|
name,
|
||||||
arguments: args,
|
arguments: args,
|
||||||
|
@ -788,7 +788,7 @@ pub fn canonicalize_expr<'a>(
|
||||||
name,
|
name,
|
||||||
..
|
..
|
||||||
} => Tag {
|
} => Tag {
|
||||||
variant_var,
|
tag_union_var: variant_var,
|
||||||
ext_var,
|
ext_var,
|
||||||
name,
|
name,
|
||||||
arguments: args,
|
arguments: args,
|
||||||
|
@ -1863,7 +1863,7 @@ pub fn inline_calls(var_store: &mut VarStore, scope: &mut Scope, expr: Expr) ->
|
||||||
}
|
}
|
||||||
|
|
||||||
Tag {
|
Tag {
|
||||||
variant_var,
|
tag_union_var: variant_var,
|
||||||
ext_var,
|
ext_var,
|
||||||
name,
|
name,
|
||||||
arguments,
|
arguments,
|
||||||
|
|
|
@ -244,7 +244,7 @@ pub fn walk_expr<V: Visitor>(visitor: &mut V, expr: &Expr, var: Variable) {
|
||||||
walk_record_fields(visitor, updates.iter());
|
walk_record_fields(visitor, updates.iter());
|
||||||
}
|
}
|
||||||
Expr::Tag {
|
Expr::Tag {
|
||||||
variant_var: _,
|
tag_union_var: _,
|
||||||
ext_var: _,
|
ext_var: _,
|
||||||
name: _,
|
name: _,
|
||||||
arguments,
|
arguments,
|
||||||
|
|
|
@ -993,7 +993,7 @@ pub fn constrain_expr(
|
||||||
body_con
|
body_con
|
||||||
}
|
}
|
||||||
Tag {
|
Tag {
|
||||||
variant_var,
|
tag_union_var: variant_var,
|
||||||
ext_var,
|
ext_var,
|
||||||
name,
|
name,
|
||||||
arguments,
|
arguments,
|
||||||
|
|
|
@ -261,8 +261,8 @@ fn decoder_step_field(env: &mut Env, fields: Vec<Lowercase>) -> Expr {
|
||||||
var: Variable::NULL, // TODO
|
var: Variable::NULL, // TODO
|
||||||
region: Region::zero(),
|
region: Region::zero(),
|
||||||
loc_expr: Box::new(Loc::at_zero(Expr::Tag {
|
loc_expr: Box::new(Loc::at_zero(Expr::Tag {
|
||||||
variant_var: Variable::NULL, // TODO
|
tag_union_var: Variable::NULL, // TODO
|
||||||
ext_var: Variable::NULL, // TODO
|
ext_var: Variable::NULL, // TODO
|
||||||
name: "Ok".into(),
|
name: "Ok".into(),
|
||||||
arguments: vec![(
|
arguments: vec![(
|
||||||
Variable::NULL, // TODO
|
Variable::NULL, // TODO
|
||||||
|
@ -280,8 +280,8 @@ fn decoder_step_field(env: &mut Env, fields: Vec<Lowercase>) -> Expr {
|
||||||
};
|
};
|
||||||
|
|
||||||
Expr::Tag {
|
Expr::Tag {
|
||||||
variant_var: Variable::NULL, // TODO
|
tag_union_var: Variable::NULL, // TODO
|
||||||
ext_var: Variable::NULL, // TODO
|
ext_var: Variable::NULL, // TODO
|
||||||
name: "Ok".into(),
|
name: "Ok".into(),
|
||||||
arguments: vec![(
|
arguments: vec![(
|
||||||
Variable::NULL, // TODO
|
Variable::NULL, // TODO
|
||||||
|
@ -324,8 +324,8 @@ fn decoder_step_field(env: &mut Env, fields: Vec<Lowercase>) -> Expr {
|
||||||
degenerate: false,
|
degenerate: false,
|
||||||
}],
|
}],
|
||||||
value: Loc::at_zero(Expr::Tag {
|
value: Loc::at_zero(Expr::Tag {
|
||||||
variant_var: Variable::NULL, // TODO
|
tag_union_var: Variable::NULL, // TODO
|
||||||
ext_var: Variable::NULL, // TODO
|
ext_var: Variable::NULL, // TODO
|
||||||
name: "Err".into(),
|
name: "Err".into(),
|
||||||
arguments: vec![(
|
arguments: vec![(
|
||||||
Variable::NULL, // TODO
|
Variable::NULL, // TODO
|
||||||
|
@ -484,7 +484,7 @@ fn decoder_step_field(env: &mut Env, fields: Vec<Lowercase>) -> Expr {
|
||||||
// }
|
// }
|
||||||
// )
|
// )
|
||||||
Expr::Tag {
|
Expr::Tag {
|
||||||
variant_var: Variable::NULL, // TODO
|
tag_union_var: Variable::NULL, // TODO
|
||||||
ext_var: Variable::EMPTY_TAG_UNION,
|
ext_var: Variable::EMPTY_TAG_UNION,
|
||||||
name: "Keep".into(),
|
name: "Keep".into(),
|
||||||
arguments: vec![(
|
arguments: vec![(
|
||||||
|
@ -529,7 +529,7 @@ fn decoder_step_field(env: &mut Env, fields: Vec<Lowercase>) -> Expr {
|
||||||
degenerate: false,
|
degenerate: false,
|
||||||
}],
|
}],
|
||||||
value: Loc::at_zero(Expr::Tag {
|
value: Loc::at_zero(Expr::Tag {
|
||||||
variant_var: Variable::NULL, // TODO
|
tag_union_var: Variable::NULL, // TODO
|
||||||
ext_var: Variable::EMPTY_TAG_UNION,
|
ext_var: Variable::EMPTY_TAG_UNION,
|
||||||
name: "Skip".into(),
|
name: "Skip".into(),
|
||||||
arguments: Vec::new(),
|
arguments: Vec::new(),
|
||||||
|
@ -611,7 +611,7 @@ fn decoder_finalizer(env: &mut Env, fields: &[Lowercase]) -> Expr {
|
||||||
let done_var = Variable::NULL; // TODO
|
let done_var = Variable::NULL; // TODO
|
||||||
|
|
||||||
Expr::Tag {
|
Expr::Tag {
|
||||||
variant_var,
|
tag_union_var: variant_var,
|
||||||
ext_var: Variable::EMPTY_TAG_UNION,
|
ext_var: Variable::EMPTY_TAG_UNION,
|
||||||
name: "Ok".into(),
|
name: "Ok".into(),
|
||||||
arguments: vec![(done_var, Loc::at_zero(done_record))],
|
arguments: vec![(done_var, Loc::at_zero(done_record))],
|
||||||
|
@ -653,13 +653,13 @@ fn decoder_finalizer(env: &mut Env, fields: &[Lowercase]) -> Expr {
|
||||||
degenerate: false,
|
degenerate: false,
|
||||||
}],
|
}],
|
||||||
value: Loc::at_zero(Expr::Tag {
|
value: Loc::at_zero(Expr::Tag {
|
||||||
variant_var: Variable::NULL, // TODO
|
tag_union_var: Variable::NULL, // TODO
|
||||||
ext_var: Variable::EMPTY_TAG_UNION,
|
ext_var: Variable::EMPTY_TAG_UNION,
|
||||||
name: "Err".into(),
|
name: "Err".into(),
|
||||||
arguments: vec![(
|
arguments: vec![(
|
||||||
Variable::NULL, // TODO
|
Variable::NULL, // TODO
|
||||||
Loc::at_zero(Expr::Tag {
|
Loc::at_zero(Expr::Tag {
|
||||||
variant_var: Variable::NULL, // TODO
|
tag_union_var: Variable::NULL, // TODO
|
||||||
ext_var: Variable::EMPTY_TAG_UNION,
|
ext_var: Variable::EMPTY_TAG_UNION,
|
||||||
name: "TooShort".into(),
|
name: "TooShort".into(),
|
||||||
arguments: Vec::new(),
|
arguments: Vec::new(),
|
||||||
|
|
|
@ -3857,7 +3857,7 @@ pub fn with_hole<'a>(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
Tag {
|
Tag {
|
||||||
variant_var,
|
tag_union_var: variant_var,
|
||||||
name: tag_name,
|
name: tag_name,
|
||||||
arguments: args,
|
arguments: args,
|
||||||
..
|
..
|
||||||
|
@ -5679,7 +5679,7 @@ fn tag_union_to_function<'a>(
|
||||||
}
|
}
|
||||||
|
|
||||||
let loc_body = Loc::at_zero(roc_can::expr::Expr::Tag {
|
let loc_body = Loc::at_zero(roc_can::expr::Expr::Tag {
|
||||||
variant_var: return_variable,
|
tag_union_var: return_variable,
|
||||||
name: tag_name,
|
name: tag_name,
|
||||||
arguments: loc_expr_args,
|
arguments: loc_expr_args,
|
||||||
ext_var,
|
ext_var,
|
||||||
|
|
|
@ -2261,13 +2261,13 @@ pub struct LambdaSet {
|
||||||
///
|
///
|
||||||
/// ```text
|
/// ```text
|
||||||
/// XEffect : A -> B
|
/// XEffect : A -> B
|
||||||
///
|
///
|
||||||
/// after : ({} -> XEffect) -> XEffect
|
/// after : ({} -> XEffect) -> XEffect
|
||||||
/// after =
|
/// after =
|
||||||
/// \cont ->
|
/// \cont ->
|
||||||
/// f = \A -[`f (typeof cont)]-> when cont {} is A -> B
|
/// f = \A -[`f (typeof cont)]-> when cont {} is A -> B
|
||||||
/// f
|
/// f
|
||||||
///
|
///
|
||||||
/// nestForever : {} -> XEffect
|
/// nestForever : {} -> XEffect
|
||||||
/// nestForever = \{} -[`nestForever]-> after nestForever
|
/// nestForever = \{} -[`nestForever]-> after nestForever
|
||||||
/// ^^^^^^^^^^^ {} -[`nestForever]-> A -[`f ({} -[`nestForever]-> A -[`f ...]-> B)]-> B
|
/// ^^^^^^^^^^^ {} -[`nestForever]-> A -[`f ({} -[`nestForever]-> A -[`f ...]-> B)]-> B
|
||||||
|
@ -2485,6 +2485,26 @@ pub trait Label: Sized + Clone {
|
||||||
pub type UnionTags = UnionLabels<TagName>;
|
pub type UnionTags = UnionLabels<TagName>;
|
||||||
pub type UnionLambdas = UnionLabels<Symbol>;
|
pub type UnionLambdas = UnionLabels<Symbol>;
|
||||||
|
|
||||||
|
impl UnionTags {
|
||||||
|
pub fn for_result(subs: &mut Subs, ok_payload: Variable, err_payload: Variable) -> Self {
|
||||||
|
let ok_tuple = {
|
||||||
|
let variables_slice = VariableSubsSlice::reserve_into_subs(subs, 1);
|
||||||
|
VariableSubsSlice::insert_into_subs(subs, std::iter::once(ok_payload));
|
||||||
|
|
||||||
|
("Ok".into(), variables_slice)
|
||||||
|
};
|
||||||
|
|
||||||
|
let err_tuple = {
|
||||||
|
let variables_slice = VariableSubsSlice::reserve_into_subs(subs, 1);
|
||||||
|
VariableSubsSlice::insert_into_subs(subs, std::iter::once(err_payload));
|
||||||
|
|
||||||
|
("Err".into(), variables_slice)
|
||||||
|
};
|
||||||
|
|
||||||
|
UnionTags::insert_slices_into_subs(subs, [err_tuple, ok_tuple])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Label for TagName {
|
impl Label for TagName {
|
||||||
fn index_subs(subs: &Subs, idx: SubsIndex<Self>) -> &Self {
|
fn index_subs(subs: &Subs, idx: SubsIndex<Self>) -> &Self {
|
||||||
&subs[idx]
|
&subs[idx]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue