Remove imported_builtins from load

This commit is contained in:
Ayaz Hafiz 2022-07-10 10:41:06 -04:00
parent f06c2af4f1
commit 98287e7670
No known key found for this signature in database
GPG key ID: 0E2A37416A25EF58
4 changed files with 50 additions and 65 deletions

View file

@ -5,7 +5,6 @@ use crossbeam::deque::{Injector, Stealer, Worker};
use crossbeam::thread;
use parking_lot::Mutex;
use roc_builtins::roc::module_source;
use roc_builtins::std::borrow_stdlib;
use roc_can::abilities::{AbilitiesStore, PendingAbilitiesStore, ResolvedSpecializations};
use roc_can::constraint::{Constraint as ConstraintSoa, Constraints};
use roc_can::expr::Declarations;
@ -14,7 +13,7 @@ use roc_can::module::{
canonicalize_module_defs, ExposedByModule, ExposedForModule, ExposedModuleTypes, Module,
};
use roc_collections::{default_hasher, BumpMap, MutMap, MutSet, VecMap, VecSet};
use roc_constrain::module::{constrain_builtin_imports, constrain_module};
use roc_constrain::module::constrain_module;
use roc_debug_flags::dbg_do;
#[cfg(debug_assertions)]
use roc_debug_flags::{
@ -977,7 +976,6 @@ enum BuildTask<'a> {
Solve {
module: Module,
ident_ids: IdentIds,
imported_builtins: Vec<Symbol>,
exposed_for_module: ExposedForModule,
module_timing: ModuleTiming,
constraints: Constraints,
@ -3758,18 +3756,10 @@ impl<'a> BuildTask<'a> {
let exposed_for_module =
ExposedForModule::new(module.referenced_values.iter(), exposed_by_module);
let imported_builtins = module
.referenced_values
.iter()
.filter(|s| s.is_builtin())
.copied()
.collect();
// Next, solve this module in the background.
Self::Solve {
module,
ident_ids,
imported_builtins,
exposed_for_module,
constraints,
constraint,
@ -3903,12 +3893,11 @@ pub fn add_imports(
#[allow(clippy::complexity)]
fn run_solve_solve(
imported_builtins: Vec<Symbol>,
exposed_for_module: ExposedForModule,
mut constraints: Constraints,
constraint: ConstraintSoa,
pending_derives: PendingDerives,
mut var_store: VarStore,
var_store: VarStore,
module: Module,
derived_symbols: GlobalDerivedSymbols,
) -> (
@ -3926,8 +3915,8 @@ fn run_solve_solve(
..
} = module;
let (mut rigid_vars, mut def_types) =
constrain_builtin_imports(borrow_stdlib(), imported_builtins, &mut var_store);
let mut rigid_vars: Vec<Variable> = Vec::new();
let mut def_types: Vec<(Symbol, Loc<roc_types::types::Type>)> = Vec::new();
let mut subs = Subs::new_from_varstore(var_store);
@ -4006,7 +3995,6 @@ fn run_solve<'a>(
module: Module,
ident_ids: IdentIds,
mut module_timing: ModuleTiming,
imported_builtins: Vec<Symbol>,
exposed_for_module: ExposedForModule,
constraints: Constraints,
constraint: ConstraintSoa,
@ -4028,7 +4016,6 @@ fn run_solve<'a>(
if module_id.is_builtin() {
match cached_subs.lock().remove(&module_id) {
None => run_solve_solve(
imported_builtins,
exposed_for_module,
constraints,
constraint,
@ -4051,7 +4038,6 @@ fn run_solve<'a>(
}
} else {
run_solve_solve(
imported_builtins,
exposed_for_module,
constraints,
constraint,
@ -4863,7 +4849,6 @@ fn run_task<'a>(
Solve {
module,
module_timing,
imported_builtins,
exposed_for_module,
constraints,
constraint,
@ -4878,7 +4863,6 @@ fn run_task<'a>(
module,
ident_ids,
module_timing,
imported_builtins,
exposed_for_module,
constraints,
constraint,

View file

@ -2142,6 +2142,7 @@ fn compact_lambda_set<P: Phase>(
);
}
(_, Some(specialization)) => {
dbg!(opaque_home);
let specialized_lambda_set = *specialization
.specialization_lambda_sets
.get(&r)

View file

@ -3434,7 +3434,7 @@ mod solve_expr {
Dict.insert
"#
),
"Dict a b, a, b -> Dict a b",
"Dict k v, k, v -> Dict k v",
);
}
@ -3446,7 +3446,7 @@ mod solve_expr {
Num.toFrac
"#
),
"Num * -> Float *",
"Num * -> Float a",
);
}
@ -3470,7 +3470,7 @@ mod solve_expr {
Num.ceiling
"#
),
"Float * -> Int *",
"Float * -> Int a",
);
}
@ -3482,7 +3482,7 @@ mod solve_expr {
Num.floor
"#
),
"Float * -> Int *",
"Float * -> Int a",
);
}
@ -4037,7 +4037,7 @@ mod solve_expr {
List.walkBackwards
"#
),
"List a, b, (b, a -> b) -> b",
"List elem, state, (state, elem -> state) -> state",
);
}
@ -4065,7 +4065,7 @@ mod solve_expr {
List.dropAt
"#
),
"List a, Nat -> List a",
"List elem, Nat -> List elem",
);
}
@ -4101,7 +4101,7 @@ mod solve_expr {
List.takeFirst
"#
),
"List a, Nat -> List a",
"List elem, Nat -> List elem",
);
}
@ -4113,7 +4113,7 @@ mod solve_expr {
List.takeLast
"#
),
"List a, Nat -> List a",
"List elem, Nat -> List elem",
);
}
@ -4125,7 +4125,7 @@ mod solve_expr {
List.sublist
"#
),
"List a, { len : Nat, start : Nat } -> List a",
"List elem, { len : Nat, start : Nat } -> List elem",
);
}
@ -4133,7 +4133,7 @@ mod solve_expr {
fn list_split() {
infer_eq_without_problem(
indoc!("List.split"),
"List a, Nat -> { before : List a, others : List a }",
"List elem, Nat -> { before : List elem, others : List elem }",
);
}
@ -4145,7 +4145,7 @@ mod solve_expr {
List.dropLast
"#
),
"List a -> List a",
"List elem -> List elem",
);
}
@ -4157,7 +4157,7 @@ mod solve_expr {
List.intersperse
"#
),
"List a, a -> List a",
"List elem, elem -> List elem",
);
}
#[test]
@ -5517,7 +5517,7 @@ mod solve_expr {
}
"#
),
r#"{ toI128 : Int * -> I128, toI16 : Int * -> I16, toI32 : Int * -> I32, toI64 : Int * -> I64, toI8 : Int * -> I8, toNat : Int * -> Nat, toU128 : Int * -> U128, toU16 : Int * -> U16, toU32 : Int * -> U32, toU64 : Int * -> U64, toU8 : Int * -> U8 }"#,
r#"{ toI128 : Int * -> I128, toI16 : Int a -> I16, toI32 : Int b -> I32, toI64 : Int c -> I64, toI8 : Int d -> I8, toNat : Int e -> Nat, toU128 : Int f -> U128, toU16 : Int g -> U16, toU32 : Int h -> U32, toU64 : Int i -> U64, toU8 : Int j -> U8 }"#,
)
}
@ -5532,7 +5532,7 @@ mod solve_expr {
}
"#
),
r#"{ toF32 : Num * -> F32, toF64 : Num * -> F64 }"#,
r#"{ toF32 : Num * -> F32, toF64 : Num a -> F64 }"#,
)
}

View file

@ -8941,54 +8941,54 @@ All branches in an `if` must have the same type!
go goal new
"#
),
@r#"
TYPE MISMATCH /code/proj/Main.roc
@r###"
TYPE MISMATCH /code/proj/Main.roc
The 1st argument to `remove` is not what I expect:
The 1st argument to `remove` is not what I expect:
10 new = { model & set : Set.remove goal model.set }
^^^^
10 new = { model & set : Set.remove goal model.set }
^^^^
This `goal` value is a:
This `goal` value is a:
a
a
But `remove` needs the 1st argument to be:
But `remove` needs the 1st argument to be:
Set a
Set k
Tip: The type annotation uses the type variable `a` to say that this
definition can produce any type of value. But in the body I see that
it will only produce a `Set` value of a single specific type. Maybe
change the type annotation to be more specific? Maybe change the code
to be more general?
Tip: The type annotation uses the type variable `a` to say that this
definition can produce any type of value. But in the body I see that
it will only produce a `Set` value of a single specific type. Maybe
change the type annotation to be more specific? Maybe change the code
to be more general?
CIRCULAR TYPE /code/proj/Main.roc
CIRCULAR TYPE /code/proj/Main.roc
I'm inferring a weird self-referential type for `new`:
I'm inferring a weird self-referential type for `new`:
10 new = { model & set : Set.remove goal model.set }
^^^
10 new = { model & set : Set.remove goal model.set }
^^^
Here is my best effort at writing down the type. You will see for
parts of the type that repeat something already printed out
infinitely.
Here is my best effort at writing down the type. You will see for
parts of the type that repeat something already printed out
infinitely.
{ set : Set }
{ set : Set }
CIRCULAR TYPE /code/proj/Main.roc
CIRCULAR TYPE /code/proj/Main.roc
I'm inferring a weird self-referential type for `goal`:
I'm inferring a weird self-referential type for `goal`:
6 go = \goal, model ->
^^^^
6 go = \goal, model ->
^^^^
Here is my best effort at writing down the type. You will see for
parts of the type that repeat something already printed out
infinitely.
Here is my best effort at writing down the type. You will see for
parts of the type that repeat something already printed out
infinitely.
Set
"#
Set
"###
);
test_report!(