mirror of
https://github.com/roc-lang/roc.git
synced 2024-09-21 07:49:17 +03:00
research bug with linked list and uniqueness
This commit is contained in:
parent
f6106166f1
commit
2da2c25d32
@ -534,18 +534,21 @@ mod gen_primitives {
|
||||
assert_evals_to!(
|
||||
indoc!(
|
||||
r#"
|
||||
LinkedList a : [ Nil, Cons a (LinkedList a) ]
|
||||
app LinkedListLen0 provides [ main ] imports []
|
||||
|
||||
nil : LinkedList Int
|
||||
nil = Nil
|
||||
LinkedList a : [ Nil, Cons a (LinkedList a) ]
|
||||
|
||||
length : LinkedList a -> Int
|
||||
length = \list ->
|
||||
when list is
|
||||
Nil -> 0
|
||||
Cons _ rest -> 1 + length rest
|
||||
nil : LinkedList Int
|
||||
nil = Nil
|
||||
|
||||
length : LinkedList a -> Int
|
||||
length = \list ->
|
||||
when list is
|
||||
Nil -> 0
|
||||
Cons _ rest -> 1 + length rest
|
||||
|
||||
|
||||
main =
|
||||
length nil
|
||||
"#
|
||||
),
|
||||
|
@ -1,7 +1,7 @@
|
||||
use roc_collections::all::{MutMap, MutSet};
|
||||
|
||||
fn promote_expr_to_module(src: &str) -> String {
|
||||
let mut buffer = String::from("app Quicksort provides [ main ] imports []\n\nmain =\n");
|
||||
let mut buffer = String::from("app Test provides [ main ] imports []\n\nmain =\n");
|
||||
|
||||
for line in src.lines() {
|
||||
// indent the body!
|
||||
@ -282,7 +282,7 @@ macro_rules! assert_evals_to {
|
||||
// parsing the source, so that there's no chance their passing
|
||||
// or failing depends on leftover state from the previous one.
|
||||
{
|
||||
assert_llvm_evals_to!($src, $expected, $ty, $transform, $leak);
|
||||
//assert_llvm_evals_to!($src, $expected, $ty, $transform, $leak);
|
||||
}
|
||||
{
|
||||
assert_opt_evals_to!($src, $expected, $ty, $transform, $leak);
|
||||
|
@ -3,7 +3,7 @@ use crate::exhaustive::{Ctor, Guard, RenderAs, TagId};
|
||||
use crate::layout::{Builtin, Layout, LayoutCache, LayoutProblem};
|
||||
use bumpalo::collections::Vec;
|
||||
use bumpalo::Bump;
|
||||
use roc_collections::all::{default_hasher, MutMap, MutSet, SendMap};
|
||||
use roc_collections::all::{default_hasher, MutMap, MutSet};
|
||||
use roc_module::ident::{Ident, Lowercase, TagName};
|
||||
use roc_module::low_level::LowLevel;
|
||||
use roc_module::symbol::{IdentIds, ModuleId, Symbol};
|
||||
|
@ -469,21 +469,35 @@ fn solve(
|
||||
let visit_mark = young_mark.next();
|
||||
let final_mark = visit_mark.next();
|
||||
|
||||
debug_assert!({
|
||||
next_pools
|
||||
.get(next_rank)
|
||||
.iter()
|
||||
.filter(|var| {
|
||||
subs.get_without_compacting(roc_types::subs::Variable::clone(
|
||||
var,
|
||||
))
|
||||
.rank
|
||||
.into_usize()
|
||||
> next_rank.into_usize()
|
||||
})
|
||||
.count()
|
||||
== 0
|
||||
});
|
||||
debug_assert_eq!(
|
||||
{
|
||||
let offenders = next_pools
|
||||
.get(next_rank)
|
||||
.iter()
|
||||
.filter(|var| {
|
||||
let current = subs.get_without_compacting(
|
||||
roc_types::subs::Variable::clone(var),
|
||||
);
|
||||
|
||||
current.rank.into_usize() > next_rank.into_usize()
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
let result = offenders.len();
|
||||
|
||||
if result > 0 {
|
||||
dbg!(
|
||||
&subs,
|
||||
&offenders,
|
||||
&let_con.def_types,
|
||||
&let_con.def_aliases
|
||||
);
|
||||
}
|
||||
|
||||
result
|
||||
},
|
||||
0
|
||||
);
|
||||
|
||||
// pop pool
|
||||
generalize(subs, young_mark, visit_mark, next_rank, next_pools);
|
||||
|
Loading…
Reference in New Issue
Block a user