mirror of
https://github.com/roc-lang/roc.git
synced 2025-08-02 03:12:20 +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)]
|
||||
fn tag(name: &'static str, args: Vec<Expr>, var_store: &mut VarStore) -> Expr {
|
||||
Expr::Tag {
|
||||
variant_var: var_store.fresh(),
|
||||
tag_union_var: var_store.fresh(),
|
||||
ext_var: var_store.fresh(),
|
||||
name: TagName(name.into()),
|
||||
arguments: args
|
||||
|
|
|
@ -535,12 +535,12 @@ fn deep_copy_expr_help<C: CopyEnv>(env: &mut C, copied: &mut Vec<Variable>, expr
|
|||
},
|
||||
|
||||
Tag {
|
||||
variant_var,
|
||||
tag_union_var: variant_var,
|
||||
ext_var,
|
||||
name,
|
||||
arguments,
|
||||
} => Tag {
|
||||
variant_var: sub!(*variant_var),
|
||||
tag_union_var: sub!(*variant_var),
|
||||
ext_var: sub!(*ext_var),
|
||||
name: name.clone(),
|
||||
arguments: arguments
|
||||
|
@ -1154,13 +1154,13 @@ mod test {
|
|||
let var2 = new_var(&mut subs, FlexVar(Some(b)));
|
||||
|
||||
let expr = Expr::Tag {
|
||||
variant_var: var1,
|
||||
tag_union_var: var1,
|
||||
ext_var: Variable::EMPTY_TAG_UNION,
|
||||
name: TagName("F".into()),
|
||||
arguments: vec![(
|
||||
var2,
|
||||
Loc::at_zero(Expr::Tag {
|
||||
variant_var: var2,
|
||||
tag_union_var: var2,
|
||||
ext_var: Variable::EMPTY_TAG_UNION,
|
||||
name: TagName("G".into()),
|
||||
arguments: vec![],
|
||||
|
@ -1175,7 +1175,7 @@ mod test {
|
|||
|
||||
match expr {
|
||||
Expr::Tag {
|
||||
variant_var,
|
||||
tag_union_var: variant_var,
|
||||
ext_var,
|
||||
name,
|
||||
mut arguments,
|
||||
|
@ -1209,7 +1209,7 @@ mod test {
|
|||
|
||||
match arg.value {
|
||||
Expr::Tag {
|
||||
variant_var,
|
||||
tag_union_var: variant_var,
|
||||
ext_var,
|
||||
name,
|
||||
arguments,
|
||||
|
@ -1240,13 +1240,13 @@ mod test {
|
|||
let var2 = new_var(&mut source, FlexVar(Some(b)));
|
||||
|
||||
let expr = Expr::Tag {
|
||||
variant_var: var1,
|
||||
tag_union_var: var1,
|
||||
ext_var: Variable::EMPTY_TAG_UNION,
|
||||
name: TagName("F".into()),
|
||||
arguments: vec![(
|
||||
var2,
|
||||
Loc::at_zero(Expr::Tag {
|
||||
variant_var: var2,
|
||||
tag_union_var: var2,
|
||||
ext_var: Variable::EMPTY_TAG_UNION,
|
||||
name: TagName("G".into()),
|
||||
arguments: vec![],
|
||||
|
@ -1261,7 +1261,7 @@ mod test {
|
|||
|
||||
match expr {
|
||||
Expr::Tag {
|
||||
variant_var,
|
||||
tag_union_var: variant_var,
|
||||
ext_var,
|
||||
name,
|
||||
mut arguments,
|
||||
|
@ -1290,7 +1290,7 @@ mod test {
|
|||
|
||||
match arg.value {
|
||||
Expr::Tag {
|
||||
variant_var,
|
||||
tag_union_var: variant_var,
|
||||
ext_var,
|
||||
name,
|
||||
arguments,
|
||||
|
|
|
@ -184,7 +184,7 @@ pub enum Expr {
|
|||
|
||||
// Sum Types
|
||||
Tag {
|
||||
variant_var: Variable,
|
||||
tag_union_var: Variable,
|
||||
ext_var: Variable,
|
||||
name: TagName,
|
||||
arguments: Vec<(Variable, Loc<Expr>)>,
|
||||
|
@ -772,12 +772,12 @@ pub fn canonicalize_expr<'a>(
|
|||
return (fn_expr, output);
|
||||
}
|
||||
Tag {
|
||||
variant_var,
|
||||
tag_union_var: variant_var,
|
||||
ext_var,
|
||||
name,
|
||||
..
|
||||
} => Tag {
|
||||
variant_var,
|
||||
tag_union_var: variant_var,
|
||||
ext_var,
|
||||
name,
|
||||
arguments: args,
|
||||
|
@ -788,7 +788,7 @@ pub fn canonicalize_expr<'a>(
|
|||
name,
|
||||
..
|
||||
} => Tag {
|
||||
variant_var,
|
||||
tag_union_var: variant_var,
|
||||
ext_var,
|
||||
name,
|
||||
arguments: args,
|
||||
|
@ -1863,7 +1863,7 @@ pub fn inline_calls(var_store: &mut VarStore, scope: &mut Scope, expr: Expr) ->
|
|||
}
|
||||
|
||||
Tag {
|
||||
variant_var,
|
||||
tag_union_var: variant_var,
|
||||
ext_var,
|
||||
name,
|
||||
arguments,
|
||||
|
|
|
@ -244,7 +244,7 @@ pub fn walk_expr<V: Visitor>(visitor: &mut V, expr: &Expr, var: Variable) {
|
|||
walk_record_fields(visitor, updates.iter());
|
||||
}
|
||||
Expr::Tag {
|
||||
variant_var: _,
|
||||
tag_union_var: _,
|
||||
ext_var: _,
|
||||
name: _,
|
||||
arguments,
|
||||
|
|
|
@ -993,7 +993,7 @@ pub fn constrain_expr(
|
|||
body_con
|
||||
}
|
||||
Tag {
|
||||
variant_var,
|
||||
tag_union_var: variant_var,
|
||||
ext_var,
|
||||
name,
|
||||
arguments,
|
||||
|
|
|
@ -261,7 +261,7 @@ fn decoder_step_field(env: &mut Env, fields: Vec<Lowercase>) -> Expr {
|
|||
var: Variable::NULL, // TODO
|
||||
region: Region::zero(),
|
||||
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
|
||||
name: "Ok".into(),
|
||||
arguments: vec![(
|
||||
|
@ -280,7 +280,7 @@ fn decoder_step_field(env: &mut Env, fields: Vec<Lowercase>) -> Expr {
|
|||
};
|
||||
|
||||
Expr::Tag {
|
||||
variant_var: Variable::NULL, // TODO
|
||||
tag_union_var: Variable::NULL, // TODO
|
||||
ext_var: Variable::NULL, // TODO
|
||||
name: "Ok".into(),
|
||||
arguments: vec![(
|
||||
|
@ -324,7 +324,7 @@ fn decoder_step_field(env: &mut Env, fields: Vec<Lowercase>) -> Expr {
|
|||
degenerate: false,
|
||||
}],
|
||||
value: Loc::at_zero(Expr::Tag {
|
||||
variant_var: Variable::NULL, // TODO
|
||||
tag_union_var: Variable::NULL, // TODO
|
||||
ext_var: Variable::NULL, // TODO
|
||||
name: "Err".into(),
|
||||
arguments: vec![(
|
||||
|
@ -484,7 +484,7 @@ fn decoder_step_field(env: &mut Env, fields: Vec<Lowercase>) -> Expr {
|
|||
// }
|
||||
// )
|
||||
Expr::Tag {
|
||||
variant_var: Variable::NULL, // TODO
|
||||
tag_union_var: Variable::NULL, // TODO
|
||||
ext_var: Variable::EMPTY_TAG_UNION,
|
||||
name: "Keep".into(),
|
||||
arguments: vec![(
|
||||
|
@ -529,7 +529,7 @@ fn decoder_step_field(env: &mut Env, fields: Vec<Lowercase>) -> Expr {
|
|||
degenerate: false,
|
||||
}],
|
||||
value: Loc::at_zero(Expr::Tag {
|
||||
variant_var: Variable::NULL, // TODO
|
||||
tag_union_var: Variable::NULL, // TODO
|
||||
ext_var: Variable::EMPTY_TAG_UNION,
|
||||
name: "Skip".into(),
|
||||
arguments: Vec::new(),
|
||||
|
@ -611,7 +611,7 @@ fn decoder_finalizer(env: &mut Env, fields: &[Lowercase]) -> Expr {
|
|||
let done_var = Variable::NULL; // TODO
|
||||
|
||||
Expr::Tag {
|
||||
variant_var,
|
||||
tag_union_var: variant_var,
|
||||
ext_var: Variable::EMPTY_TAG_UNION,
|
||||
name: "Ok".into(),
|
||||
arguments: vec![(done_var, Loc::at_zero(done_record))],
|
||||
|
@ -653,13 +653,13 @@ fn decoder_finalizer(env: &mut Env, fields: &[Lowercase]) -> Expr {
|
|||
degenerate: false,
|
||||
}],
|
||||
value: Loc::at_zero(Expr::Tag {
|
||||
variant_var: Variable::NULL, // TODO
|
||||
tag_union_var: Variable::NULL, // TODO
|
||||
ext_var: Variable::EMPTY_TAG_UNION,
|
||||
name: "Err".into(),
|
||||
arguments: vec![(
|
||||
Variable::NULL, // TODO
|
||||
Loc::at_zero(Expr::Tag {
|
||||
variant_var: Variable::NULL, // TODO
|
||||
tag_union_var: Variable::NULL, // TODO
|
||||
ext_var: Variable::EMPTY_TAG_UNION,
|
||||
name: "TooShort".into(),
|
||||
arguments: Vec::new(),
|
||||
|
|
|
@ -3857,7 +3857,7 @@ pub fn with_hole<'a>(
|
|||
)
|
||||
}
|
||||
Tag {
|
||||
variant_var,
|
||||
tag_union_var: variant_var,
|
||||
name: tag_name,
|
||||
arguments: args,
|
||||
..
|
||||
|
@ -5679,7 +5679,7 @@ fn tag_union_to_function<'a>(
|
|||
}
|
||||
|
||||
let loc_body = Loc::at_zero(roc_can::expr::Expr::Tag {
|
||||
variant_var: return_variable,
|
||||
tag_union_var: return_variable,
|
||||
name: tag_name,
|
||||
arguments: loc_expr_args,
|
||||
ext_var,
|
||||
|
|
|
@ -2485,6 +2485,26 @@ pub trait Label: Sized + Clone {
|
|||
pub type UnionTags = UnionLabels<TagName>;
|
||||
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 {
|
||||
fn index_subs(subs: &Subs, idx: SubsIndex<Self>) -> &Self {
|
||||
&subs[idx]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue