give more context in runtime errors

This commit is contained in:
Folkert 2020-10-25 22:06:27 +01:00
parent b4a9ffdccd
commit 646f04ef7b

View file

@ -2991,7 +2991,11 @@ pub fn with_hole<'a>(
.zip(arg_symbols.iter().rev()); .zip(arg_symbols.iter().rev());
assign_to_symbols(env, procs, layout_cache, iter, result) assign_to_symbols(env, procs, layout_cache, iter, result)
} }
RuntimeError(e) => Stmt::RuntimeError(env.arena.alloc(format!("{:?}", e))), RuntimeError(e) => {
eprintln!("emitted runtime error {:?}", &e);
Stmt::RuntimeError(env.arena.alloc(format!("{:?}", e)))
}
} }
} }
@ -4496,9 +4500,9 @@ fn call_by_name<'a>(
None => { None => {
// This must have been a runtime error. // This must have been a runtime error.
match procs.runtime_errors.get(&proc_name) { match procs.runtime_errors.get(&proc_name) {
Some(error) => { Some(error) => Stmt::RuntimeError(
Stmt::RuntimeError(env.arena.alloc(format!("{:?}", error))) env.arena.alloc(format!("runtime error {:?}", error)),
} ),
None => unreachable!("Proc name {:?} is invalid", proc_name), None => unreachable!("Proc name {:?} is invalid", proc_name),
} }
} }
@ -4507,10 +4511,19 @@ fn call_by_name<'a>(
} }
} }
} }
Err(e) => { Err(LayoutProblem::UnresolvedTypeVar(var)) => {
// This function code gens to a runtime error, let msg = format!(
// so attempting to call it will immediately crash. "Hit an unresolved type variable {:?} when creating a layout for {:?}",
Stmt::RuntimeError(env.arena.alloc(format!("{:?}", e))) var, proc_name
);
Stmt::RuntimeError(env.arena.alloc(msg))
}
Err(LayoutProblem::Erroneous) => {
let msg = format!(
"Hit an erroneous type when creating a layout for {:?}",
proc_name
);
Stmt::RuntimeError(env.arena.alloc(msg))
} }
} }
} }