mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-27 05:49:08 +00:00
Convert over Subs to use the new soa crate
This commit is contained in:
parent
586959780b
commit
2567c8b545
17 changed files with 240 additions and 401 deletions
|
@ -71,8 +71,7 @@ pub(crate) fn derive_to_inspector(
|
|||
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();
|
||||
}
|
||||
|
@ -119,7 +118,7 @@ fn to_inspector_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)),
|
||||
|
@ -212,10 +211,9 @@ fn to_inspector_list(env: &mut Env<'_>, fn_name: Symbol) -> (Expr, Variable) {
|
|||
|
||||
// List elem, List.walk, to_elem_inspector_fn_var -[clos]-> t1
|
||||
let list_walk_fn_var = env.import_builtin_symbol_var(Symbol::LIST_WALK);
|
||||
let this_inspect_list_args_slice = VariableSubsSlice::insert_into_subs(
|
||||
env.subs,
|
||||
[list_var, list_walk_fn_var, to_elem_inspector_fn_var],
|
||||
);
|
||||
let this_inspect_list_args_slice =
|
||||
env.subs
|
||||
.insert_into_vars([list_var, list_walk_fn_var, to_elem_inspector_fn_var]);
|
||||
let this_inspect_list_clos_var = env.subs.fresh_unnamed_flex_var(); // clos
|
||||
let this_list_inspector_var = env.subs.fresh_unnamed_flex_var(); // t1
|
||||
let this_inspect_list_fn_var = synth_var(
|
||||
|
@ -279,7 +277,7 @@ fn to_inspector_list(env: &mut Env<'_>, fn_name: Symbol) -> (Expr, Variable) {
|
|||
}),
|
||||
);
|
||||
// List elem -[fn_name]-> Inspector 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(
|
||||
|
@ -421,7 +419,7 @@ fn to_inspector_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)),
|
||||
|
@ -438,8 +436,7 @@ fn to_inspector_record(
|
|||
let inspect_record_fn_var = env.import_builtin_symbol_var(Symbol::INSPECT_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 inspect_record_clos_var = env.subs.fresh_unnamed_flex_var(); // clos
|
||||
let inspector_var = env.subs.fresh_unnamed_flex_var(); // t1
|
||||
let this_inspect_record_fn_var = synth_var(
|
||||
|
@ -490,7 +487,7 @@ fn to_inspector_record(
|
|||
}),
|
||||
);
|
||||
// typeof rcd -[fn_name]-> (typeof Inspect.record [ .. ] = Inspector 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(
|
||||
|
@ -602,7 +599,7 @@ fn to_inspector_tuple(
|
|||
|
||||
// typeof [ toInspector tup.0, toInspector tup.1 ]
|
||||
let whole_inspector_in_list_var_slice =
|
||||
VariableSubsSlice::insert_into_subs(env.subs, once(whole_inspector_in_list_var));
|
||||
env.subs.insert_into_vars(once(whole_inspector_in_list_var));
|
||||
let elem_inspectors_list_var = synth_var(
|
||||
env.subs,
|
||||
Content::Structure(FlatType::Apply(
|
||||
|
@ -622,8 +619,7 @@ fn to_inspector_tuple(
|
|||
let inspect_tuple_fn_var = env.import_builtin_symbol_var(Symbol::INSPECT_TUPLE);
|
||||
|
||||
// elem_inspectors_list_var -[clos]-> t1
|
||||
let elem_inspectors_list_var_slice =
|
||||
VariableSubsSlice::insert_into_subs(env.subs, once(elem_inspectors_list_var));
|
||||
let elem_inspectors_list_var_slice = env.subs.insert_into_vars(once(elem_inspectors_list_var));
|
||||
let inspect_tuple_clos_var = env.subs.fresh_unnamed_flex_var(); // clos
|
||||
let inspector_var = env.subs.fresh_unnamed_flex_var(); // t1
|
||||
let this_inspect_tuple_fn_var = synth_var(
|
||||
|
@ -674,7 +670,7 @@ fn to_inspector_tuple(
|
|||
}),
|
||||
);
|
||||
// typeof tup -[fn_name]-> (typeof Inspect.tuple [ .. ] = Inspector 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(
|
||||
|
@ -761,8 +757,7 @@ fn to_inspector_tag_union(
|
|||
env.import_builtin_symbol_var(Symbol::INSPECT_TO_INSPECTOR);
|
||||
|
||||
// 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_inspector_clos_var = env.subs.fresh_unnamed_flex_var(); // clos
|
||||
let inspector_var = env.subs.fresh_unnamed_flex_var(); // t'
|
||||
let this_to_inspector_fn_var = synth_var(
|
||||
|
@ -804,7 +799,7 @@ fn to_inspector_tag_union(
|
|||
|
||||
// typeof [ Inspect.toInspector v1, Inspect.toInspector v2 ]
|
||||
let whole_inspectors_var_slice =
|
||||
VariableSubsSlice::insert_into_subs(env.subs, [whole_payload_inspectors_var]);
|
||||
env.subs.insert_into_vars([whole_payload_inspectors_var]);
|
||||
let payload_inspectors_list_var = synth_var(
|
||||
env.subs,
|
||||
Content::Structure(FlatType::Apply(
|
||||
|
@ -824,10 +819,9 @@ fn to_inspector_tag_union(
|
|||
let inspect_tag_fn_var = env.import_builtin_symbol_var(Symbol::INSPECT_TAG);
|
||||
|
||||
// wanted: Str, List whole_inspectors_var -[clos]-> t'
|
||||
let this_inspect_tag_args_var_slice = VariableSubsSlice::insert_into_subs(
|
||||
env.subs,
|
||||
[Variable::STR, payload_inspectors_list_var],
|
||||
);
|
||||
let this_inspect_tag_args_var_slice = env
|
||||
.subs
|
||||
.insert_into_vars([Variable::STR, payload_inspectors_list_var]);
|
||||
let this_inspect_tag_clos_var = env.subs.fresh_unnamed_flex_var(); // -[clos]->
|
||||
let this_inspector_var = env.subs.fresh_unnamed_flex_var(); // t'
|
||||
let this_inspect_tag_fn_var = synth_var(
|
||||
|
@ -917,7 +911,7 @@ fn to_inspector_tag_union(
|
|||
}),
|
||||
);
|
||||
// tag_union_var -[fn_name]-> whole_tag_inspectors_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(
|
||||
|
@ -972,8 +966,7 @@ fn wrap_in_inspect_custom(
|
|||
let apply_fn_var = env.import_builtin_symbol_var(Symbol::INSPECT_APPLY);
|
||||
|
||||
// wanted: Inspect.apply : inspector_var, fmt -[clos]-> fmt where fmt implements InspectorFormatter
|
||||
let this_apply_args_var_slice =
|
||||
VariableSubsSlice::insert_into_subs(env.subs, [inspector_var, fmt_var]);
|
||||
let this_apply_args_var_slice = env.subs.insert_into_vars([inspector_var, fmt_var]);
|
||||
let this_apply_clos_var = env.subs.fresh_unnamed_flex_var(); // -[clos]->
|
||||
let this_apply_fn_var = synth_var(
|
||||
env.subs,
|
||||
|
@ -1025,7 +1018,7 @@ fn wrap_in_inspect_custom(
|
|||
);
|
||||
|
||||
// fmt -[[FN_name captured_var]]-> Inspect.apply inspector fmt
|
||||
let args_slice = SubsSlice::insert_into_subs(env.subs, vec![fmt_var]);
|
||||
let args_slice = env.subs.insert_into_vars(vec![fmt_var]);
|
||||
env.subs.set_content(
|
||||
fn_var,
|
||||
Content::Structure(FlatType::Func(args_slice, fn_clos_var, fmt_var)),
|
||||
|
@ -1054,7 +1047,7 @@ fn wrap_in_inspect_custom(
|
|||
let custom_fn_var = env.import_builtin_symbol_var(Symbol::INSPECT_CUSTOM);
|
||||
|
||||
// wanted: Inspect.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_inspector_var = env.subs.fresh_unnamed_flex_var(); // t'
|
||||
let this_custom_fn_var = synth_var(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue