Unify functions fx vars

This commit is contained in:
Agus Zubiaga 2024-10-08 20:59:10 -03:00
parent 5a5abe3bc5
commit 7776883262
No known key found for this signature in database
26 changed files with 222 additions and 70 deletions

View file

@ -65,6 +65,7 @@ pub(crate) fn decoder(env: &mut Env<'_>, _def_symbol: Symbol) -> (Expr, Variable
elem_decoder_var_slice,
this_decode_list_clos_var,
this_decode_list_ret_var,
Variable::PURE,
)),
);

View file

@ -112,6 +112,7 @@ pub(crate) fn decoder(
.insert_into_vars([initial_state_var, step_var, finalizer_var]),
decode_record_lambda_set,
record_decoder_var,
Variable::PURE,
);
synth_var(env.subs, Content::Structure(flat_type))
@ -343,7 +344,12 @@ pub(super) fn step_field(
env.subs.set_content(
function_type,
Content::Structure(FlatType::Func(args_slice, closure_type, keep_or_skip_var)),
Content::Structure(FlatType::Func(
args_slice,
closure_type,
keep_or_skip_var,
Variable::PURE,
)),
)
};
@ -408,8 +414,12 @@ fn custom_decoder(env: &mut Env<'_>, args: DecodingFieldArgs) -> (Variable, Expr
let decode_custom_closure_var = env.subs.fresh_unnamed_flex_var();
let this_decode_custom_var = {
let subs_slice = env.subs.insert_into_vars([this_custom_callback_var]);
let flat_type =
FlatType::Func(subs_slice, decode_custom_closure_var, decode_custom_ret_var);
let flat_type = FlatType::Func(
subs_slice,
decode_custom_closure_var,
decode_custom_ret_var,
Variable::PURE,
);
synth_var(env.subs, Content::Structure(flat_type))
};
@ -579,6 +589,7 @@ fn custom_decoder_lambda(env: &mut Env<'_>, args: DecodingFieldArgs) -> (Variabl
subs_slice,
custom_callback_lambda_set_var,
custom_callback_ret_var,
Variable::PURE,
)),
);
@ -989,6 +1000,7 @@ pub(super) fn finalizer(
env.subs.insert_into_vars([state_record_var, fmt_arg_var]),
closure_type,
return_type_var,
Variable::PURE,
);
// Fix up function_var so it's not Content::Error anymore
@ -1280,7 +1292,12 @@ fn make_decode_with_vars(
.insert_into_vars([bytes_arg_var, decoder_var, fmt_arg_var]);
let this_decode_with_var = synth_var(
env.subs,
Content::Structure(FlatType::Func(subs_slice, lambda_set_var, rec_var)),
Content::Structure(FlatType::Func(
subs_slice,
lambda_set_var,
rec_var,
Variable::PURE,
)),
);
env.unify(decode_with_var, this_decode_with_var);

View file

@ -102,6 +102,7 @@ pub(crate) fn decoder(env: &mut Env, _def_symbol: Symbol, arity: u32) -> (Expr,
.insert_into_vars([state_var, step_var, finalizer_var]),
decode_record_lambda_set,
tuple_decoder_var,
Variable::PURE,
);
synth_var(env.subs, Content::Structure(flat_type))
@ -277,7 +278,12 @@ fn step_elem(
.insert_into_vars([bytes_arg_var, decoder_var, fmt_arg_var]);
let this_decode_with_var = synth_var(
env.subs,
Content::Structure(FlatType::Func(subs_slice, lambda_set_var, rec_var)),
Content::Structure(FlatType::Func(
subs_slice,
lambda_set_var,
rec_var,
Variable::PURE,
)),
);
env.unify(decode_with_var, this_decode_with_var);
@ -547,6 +553,7 @@ fn step_elem(
subs_slice,
custom_callback_lambda_set_var,
custom_callback_ret_var,
Variable::PURE,
)),
);
@ -585,8 +592,12 @@ fn step_elem(
let decode_custom_closure_var = env.subs.fresh_unnamed_flex_var();
let this_decode_custom_var = {
let subs_slice = env.subs.insert_into_vars([this_custom_callback_var]);
let flat_type =
FlatType::Func(subs_slice, decode_custom_closure_var, decode_custom_ret_var);
let flat_type = FlatType::Func(
subs_slice,
decode_custom_closure_var,
decode_custom_ret_var,
Variable::PURE,
);
synth_var(env.subs, Content::Structure(flat_type))
};
@ -707,7 +718,12 @@ fn step_elem(
env.subs.set_content(
function_type,
Content::Structure(FlatType::Func(args_slice, closure_type, keep_or_skip_var)),
Content::Structure(FlatType::Func(
args_slice,
closure_type,
keep_or_skip_var,
Variable::PURE,
)),
)
};
@ -893,6 +909,7 @@ fn finalizer(
env.subs.insert_into_vars([state_record_var]),
closure_type,
return_type_var,
Variable::PURE,
);
// Fix up function_var so it's not Content::Error anymore