This commit is contained in:
Folkert 2020-10-17 14:53:57 +02:00
parent 9ff882751a
commit edfc96628e
7 changed files with 53 additions and 10 deletions

View file

@ -322,8 +322,10 @@ pub fn constrain_expr(
arguments, arguments,
loc_body: boxed, loc_body: boxed,
captured_symbols, captured_symbols,
name,
.. ..
} => { } => {
dbg!(name, &captured_symbols);
let loc_body_expr = &**boxed; let loc_body_expr = &**boxed;
let mut state = PatternState { let mut state = PatternState {
headers: SendMap::default(), headers: SendMap::default(),

View file

@ -1841,6 +1841,7 @@ pub fn build_proc_header<'a, 'ctx, 'env>(
let args = proc.args; let args = proc.args;
let arena = env.arena; let arena = env.arena;
let context = &env.context; let context = &env.context;
let ret_type = basic_type_from_layout(arena, context, &proc.ret_layout, env.ptr_bytes); let ret_type = basic_type_from_layout(arena, context, &proc.ret_layout, env.ptr_bytes);
let mut arg_basic_types = Vec::with_capacity_in(args.len(), arena); let mut arg_basic_types = Vec::with_capacity_in(args.len(), arena);
let mut arg_symbols = Vec::new_in(arena); let mut arg_symbols = Vec::new_in(arena);

View file

@ -972,4 +972,34 @@ mod gen_primitives {
i64 i64
); );
} }
#[test]
fn io_poc() {
use roc_std::RocStr;
assert_evals_to!(
indoc!(
r#"
app Test provides [ main ] imports []
Effect a : [ @Effect ({} -> a) ]
succeed : a -> Effect a
succeed = \x -> @Effect \{} -> x
foo : Effect Float
foo =
succeed 3.14
runEffect : Effect a -> a
runEffect = \@Effect thunk -> thunk {}
main =
runEffect foo
"#
),
RocStr::from_slice(&"Foo".as_bytes()),
RocStr
);
}
} }

View file

@ -191,6 +191,7 @@ pub fn helper<'a>(
// because their bodies may reference each other. // because their bodies may reference each other.
let mut scope = Scope::default(); let mut scope = Scope::default();
for ((symbol, layout), proc) in procedures.drain() { for ((symbol, layout), proc) in procedures.drain() {
dbg!(&symbol, &layout);
let fn_val = build_proc_header(&env, &mut layout_ids, symbol, &layout, &proc); let fn_val = build_proc_header(&env, &mut layout_ids, symbol, &layout, &proc);
if proc.args.is_empty() { if proc.args.is_empty() {
@ -229,7 +230,8 @@ pub fn helper<'a>(
mode, mode,
); );
fn_val.print_to_stderr(); // fn_val.print_to_stderr();
module.print_to_stderr();
panic!( panic!(
"The preceding code was from {:?}, which failed LLVM verification in {} build.", "The preceding code was from {:?}, which failed LLVM verification in {} build.",
@ -347,7 +349,7 @@ macro_rules! assert_evals_to {
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); // assert_opt_evals_to!($src, $expected, $ty, $transform, $leak);
} }
}; };
} }

View file

@ -1440,7 +1440,7 @@ fn update<'a>(
{ {
// state.timings.insert(module_id, module_timing); // state.timings.insert(module_id, module_timing);
Proc::insert_refcount_operations(arena, &mut state.procedures); // Proc::insert_refcount_operations(arena, &mut state.procedures);
msg_tx msg_tx
.send(Msg::FinishedAllSpecialization { .send(Msg::FinishedAllSpecialization {

View file

@ -2350,6 +2350,8 @@ pub fn with_hole<'a>(
Located::at_zero(roc_can::pattern::Pattern::Identifier(record_symbol)), Located::at_zero(roc_can::pattern::Pattern::Identifier(record_symbol)),
)]; )];
dbg!("aaaa");
match procs.insert_anonymous( match procs.insert_anonymous(
env, env,
name, name,
@ -2491,6 +2493,7 @@ pub fn with_hole<'a>(
} => { } => {
let loc_body = *boxed_body; let loc_body = *boxed_body;
dbg!("bbb");
match procs.insert_anonymous( match procs.insert_anonymous(
env, env,
name, name,

View file

@ -1155,13 +1155,18 @@ fn adjust_rank_content(
Func(arg_vars, closure_var, ret_var) => { Func(arg_vars, closure_var, ret_var) => {
let mut rank = adjust_rank(subs, young_mark, visit_mark, group_rank, ret_var); let mut rank = adjust_rank(subs, young_mark, visit_mark, group_rank, ret_var);
rank = rank.max(adjust_rank( // TODO investigate further.
subs, //
young_mark, // My theory is that because the closure_var contains variables already
visit_mark, // contained in the signature only, it does not need to be part of the rank
group_rank, // calculuation
closure_var, // rank = rank.max(adjust_rank(
)); // subs,
// young_mark,
// visit_mark,
// group_rank,
// closure_var,
// ));
for var in arg_vars { for var in arg_vars {
rank = rank.max(adjust_rank(subs, young_mark, visit_mark, group_rank, var)); rank = rank.max(adjust_rank(subs, young_mark, visit_mark, group_rank, var));