Convert over Subs to use the new soa crate

This commit is contained in:
Richard Feldman 2024-10-10 00:17:59 -04:00
parent 586959780b
commit 2567c8b545
No known key found for this signature in database
GPG key ID: 5DE4EE30BB738EDF
17 changed files with 240 additions and 401 deletions

View file

@ -71,8 +71,7 @@ pub(crate) fn derive_to_encoder(
let flex_tag_labels = tags
.into_iter()
.map(|(label, arity)| {
let variables_slice =
VariableSubsSlice::reserve_into_subs(env.subs, arity.into());
let variables_slice = env.subs.reserve_into_vars(arity.into());
for var_index in variables_slice {
env.subs[var_index] = env.subs.fresh_unnamed_flex_var();
}
@ -114,7 +113,7 @@ fn to_encoder_list(env: &mut Env<'_>, fn_name: Symbol) -> (Expr, Variable) {
// List elem
let elem_var = env.subs.fresh_unnamed_flex_var();
let elem_var_slice = SubsSlice::insert_into_subs(env.subs, [elem_var]);
let elem_var_slice = env.subs.insert_into_vars([elem_var]);
let list_var = synth_var(
env.subs,
Content::Structure(FlatType::Apply(Symbol::LIST_LIST, elem_var_slice)),
@ -205,8 +204,9 @@ fn to_encoder_list(env: &mut Env<'_>, fn_name: Symbol) -> (Expr, Variable) {
let encode_list_fn_var = env.import_builtin_symbol_var(Symbol::ENCODE_LIST);
// List elem, to_elem_encoder_fn_var -[clos]-> t1
let this_encode_list_args_slice =
VariableSubsSlice::insert_into_subs(env.subs, [list_var, to_elem_encoder_fn_var]);
let this_encode_list_args_slice = env
.subs
.insert_into_vars([list_var, to_elem_encoder_fn_var]);
let this_encode_list_clos_var = env.subs.fresh_unnamed_flex_var(); // clos
let this_list_encoder_var = env.subs.fresh_unnamed_flex_var(); // t1
let this_encode_list_fn_var = synth_var(
@ -266,7 +266,7 @@ fn to_encoder_list(env: &mut Env<'_>, fn_name: Symbol) -> (Expr, Variable) {
}),
);
// List elem -[fn_name]-> Encoder fmt
let list_var_slice = SubsSlice::insert_into_subs(env.subs, once(list_var));
let list_var_slice = env.subs.insert_into_vars(once(list_var));
env.subs.set_content(
fn_var,
Content::Structure(FlatType::Func(
@ -407,7 +407,7 @@ fn to_encoder_record(
.collect::<Vec<_>>();
// typeof [ { key: .., value: .. }, { key: .., value: .. } ]
let fields_rcd_var_slice = VariableSubsSlice::insert_into_subs(env.subs, once(whole_rcd_var));
let fields_rcd_var_slice = env.subs.insert_into_vars(once(whole_rcd_var));
let fields_list_var = synth_var(
env.subs,
Content::Structure(FlatType::Apply(Symbol::LIST_LIST, fields_rcd_var_slice)),
@ -424,8 +424,7 @@ fn to_encoder_record(
let encode_record_fn_var = env.import_builtin_symbol_var(Symbol::ENCODE_RECORD);
// fields_list_var -[clos]-> t1
let fields_list_var_slice =
VariableSubsSlice::insert_into_subs(env.subs, once(fields_list_var));
let fields_list_var_slice = env.subs.insert_into_vars(once(fields_list_var));
let encode_record_clos_var = env.subs.fresh_unnamed_flex_var(); // clos
let encoder_var = env.subs.fresh_unnamed_flex_var(); // t1
let this_encode_record_fn_var = synth_var(
@ -476,7 +475,7 @@ fn to_encoder_record(
}),
);
// typeof rcd -[fn_name]-> (typeof Encode.record [ .. ] = Encoder fmt)
let record_var_slice = SubsSlice::insert_into_subs(env.subs, once(record_var));
let record_var_slice = env.subs.insert_into_vars(once(record_var));
env.subs.set_content(
fn_var,
Content::Structure(FlatType::Func(
@ -587,7 +586,7 @@ fn to_encoder_tuple(
// typeof [ toEncoder tup.0, toEncoder tup.1 ]
let whole_encoder_in_list_var_slice =
VariableSubsSlice::insert_into_subs(env.subs, once(whole_encoder_in_list_var));
env.subs.insert_into_vars(once(whole_encoder_in_list_var));
let elem_encoders_list_var = synth_var(
env.subs,
Content::Structure(FlatType::Apply(
@ -607,8 +606,7 @@ fn to_encoder_tuple(
let encode_tuple_fn_var = env.import_builtin_symbol_var(Symbol::ENCODE_TUPLE);
// elem_encoders_list_var -[clos]-> t1
let elem_encoders_list_var_slice =
VariableSubsSlice::insert_into_subs(env.subs, once(elem_encoders_list_var));
let elem_encoders_list_var_slice = env.subs.insert_into_vars(once(elem_encoders_list_var));
let encode_tuple_clos_var = env.subs.fresh_unnamed_flex_var(); // clos
let encoder_var = env.subs.fresh_unnamed_flex_var(); // t1
let this_encode_tuple_fn_var = synth_var(
@ -659,7 +657,7 @@ fn to_encoder_tuple(
}),
);
// typeof tup -[fn_name]-> (typeof Encode.tuple [ .. ] = Encoder fmt)
let tuple_var_slice = SubsSlice::insert_into_subs(env.subs, once(tuple_var));
let tuple_var_slice = env.subs.insert_into_vars(once(tuple_var));
env.subs.set_content(
fn_var,
Content::Structure(FlatType::Func(
@ -746,8 +744,7 @@ fn to_encoder_tag_union(
env.import_builtin_symbol_var(Symbol::ENCODE_TO_ENCODER);
// wanted: t1 -[clos]-> t'
let var_slice_of_sym_var =
VariableSubsSlice::insert_into_subs(env.subs, [sym_var]); // [ t1 ]
let var_slice_of_sym_var = env.subs.insert_into_vars([sym_var]); // [ t1 ]
let to_encoder_clos_var = env.subs.fresh_unnamed_flex_var(); // clos
let encoder_var = env.subs.fresh_unnamed_flex_var(); // t'
let this_to_encoder_fn_var = synth_var(
@ -788,8 +785,7 @@ fn to_encoder_tag_union(
.collect();
// typeof [ Encode.toEncoder v1, Encode.toEncoder v2 ]
let whole_encoders_var_slice =
VariableSubsSlice::insert_into_subs(env.subs, [whole_payload_encoders_var]);
let whole_encoders_var_slice = env.subs.insert_into_vars([whole_payload_encoders_var]);
let payload_encoders_list_var = synth_var(
env.subs,
Content::Structure(FlatType::Apply(Symbol::LIST_LIST, whole_encoders_var_slice)),
@ -806,10 +802,9 @@ fn to_encoder_tag_union(
let encode_tag_fn_var = env.import_builtin_symbol_var(Symbol::ENCODE_TAG);
// wanted: Str, List whole_encoders_var -[clos]-> t'
let this_encode_tag_args_var_slice = VariableSubsSlice::insert_into_subs(
env.subs,
[Variable::STR, payload_encoders_list_var],
);
let this_encode_tag_args_var_slice = env
.subs
.insert_into_vars([Variable::STR, payload_encoders_list_var]);
let this_encode_tag_clos_var = env.subs.fresh_unnamed_flex_var(); // -[clos]->
let this_encoder_var = env.subs.fresh_unnamed_flex_var(); // t'
let this_encode_tag_fn_var = synth_var(
@ -899,7 +894,7 @@ fn to_encoder_tag_union(
}),
);
// tag_union_var -[fn_name]-> whole_tag_encoders_var
let tag_union_var_slice = SubsSlice::insert_into_subs(env.subs, once(tag_union_var));
let tag_union_var_slice = env.subs.insert_into_vars(once(tag_union_var));
env.subs.set_content(
fn_var,
Content::Structure(FlatType::Func(
@ -964,7 +959,8 @@ fn wrap_in_encode_custom(
// wanted: Encode.appendWith : List U8, encoder_var, fmt -[clos]-> List U8 where fmt implements EncoderFormatting
let this_append_with_args_var_slice =
VariableSubsSlice::insert_into_subs(env.subs, [Variable::LIST_U8, encoder_var, fmt_var]);
env.subs
.insert_into_vars([Variable::LIST_U8, encoder_var, fmt_var]);
let this_append_with_clos_var = env.subs.fresh_unnamed_flex_var(); // -[clos]->
let this_append_with_fn_var = synth_var(
env.subs,
@ -1018,7 +1014,7 @@ fn wrap_in_encode_custom(
);
// bytes, fmt -[[FN_name captured_var]]-> Encode.appendWith bytes encoder fmt
let args_slice = SubsSlice::insert_into_subs(env.subs, vec![bytes_var, fmt_var]);
let args_slice = env.subs.insert_into_vars(vec![bytes_var, fmt_var]);
env.subs.set_content(
fn_var,
Content::Structure(FlatType::Func(args_slice, fn_clos_var, Variable::LIST_U8)),
@ -1054,7 +1050,7 @@ fn wrap_in_encode_custom(
let custom_fn_var = env.import_builtin_symbol_var(Symbol::ENCODE_CUSTOM);
// wanted: Encode.custom : fn_var -[clos]-> t'
let this_custom_args_var_slice = VariableSubsSlice::insert_into_subs(env.subs, [fn_var]);
let this_custom_args_var_slice = env.subs.insert_into_vars([fn_var]);
let this_custom_clos_var = env.subs.fresh_unnamed_flex_var(); // -[clos]->
let this_custom_encoder_var = env.subs.fresh_unnamed_flex_var(); // t'
let this_custom_fn_var = synth_var(