Rename variant_var to tag_union_var

This commit is contained in:
Richard Feldman 2022-08-10 14:37:15 -04:00 committed by Ayaz Hafiz
parent c81eecd644
commit 7e12bcff1d
No known key found for this signature in database
GPG key ID: 0E2A37416A25EF58
8 changed files with 53 additions and 33 deletions

View file

@ -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

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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(),

View file

@ -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,

View file

@ -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]