This commit is contained in:
Richard Feldman 2020-04-25 08:39:51 -04:00
parent d0c9c433a6
commit afbe871e6d
5 changed files with 28 additions and 12 deletions

View file

@ -26,7 +26,7 @@ use roc_types::subs::{VarStore, Variable};
/// lookup (if the bounds check passed). That internal function is hardcoded in code gen,
/// which works fine because it doesn't involve any open tag unions.
pub fn builtin_defs(var_store: &VarStore) -> Vec<Def> {
vec![list_get(var_store), list_first(var_store)]
vec![/*list_get(var_store),*/ list_first(var_store)]
}
/// List.get : List elem, Int -> Result elem [ OutOfBounds ]*
@ -208,7 +208,7 @@ fn no_region<T>(value: T) -> Located<T> {
fn tag(name: &'static str, args: Vec<Expr>, var_store: &VarStore) -> Expr {
Expr::Tag {
variant_var: var_store.fresh(),
ext_var: var_store.fresh(), // TODO Variable::EMPTY_TAG_UNION should work here
ext_var: var_store.fresh(),
name: TagName::Global(name.into()),
arguments: args
.into_iter()

View file

@ -301,16 +301,21 @@ mod gen_builtins {
assert_evals_to!("List.isEmpty []", true, bool);
}
#[test]
fn get_0_int_list() {
assert_evals_to!("List.get [ 12, 9, 6, 3 ] 0", (1, 12), (u64, i64));
}
// #[test]
// fn get_0_int_list() {
// assert_evals_to!("List.get [ 12, 9, 6, 3 ] 0", (1, 12), (u64, i64));
// }
#[test]
fn head_int_list() {
assert_evals_to!("List.first [ 12, 9, 6, 3 ]", (1, 12), (u64, i64));
}
#[test]
fn head_empty_list() {
assert_evals_to!("List.first []", (0, 0), (u64, i64));
}
#[test]
fn get_int_list() {
assert_evals_to!("List.getUnsafe [ 12, 9, 6 ] 1", 9, i64);
@ -402,4 +407,9 @@ mod gen_builtins {
f64
);
}
#[test]
fn err_with_payload() {
assert_evals_to!("if True then Err 42 else Ok False", (0, 42), (u64, i64));
}
}

View file

@ -105,7 +105,7 @@ macro_rules! assert_llvm_evals_to {
builder.build_return(Some(&ret));
// Uncomment this to see the module's un-optimized LLVM instruction output:
// env.module.print_to_stderr();
env.module.print_to_stderr();
if main_fn.verify(true) {
fpm.run_on(&main_fn);
@ -419,7 +419,7 @@ macro_rules! assert_evals_to {
assert_llvm_evals_to!($src, $expected, $ty, (|val| val));
}
{
assert_opt_evals_to!($src, $expected, $ty, (|val| val));
// assert_opt_evals_to!($src, $expected, $ty, (|val| val));
}
};
($src:expr, $expected:expr, $ty:ty, $transform:expr) => {
@ -428,7 +428,7 @@ macro_rules! assert_evals_to {
assert_llvm_evals_to!($src, $expected, $ty, $transform);
}
{
assert_opt_evals_to!($src, $expected, $ty, $transform);
// assert_opt_evals_to!($src, $expected, $ty, $transform);
}
};
}

View file

@ -642,7 +642,7 @@ define_builtins! {
10 LIST_LEN: "len"
11 LIST_FOLDL: "foldl"
12 LIST_FOLDR: "foldr"
13 LIST_GET_UNSAFE: "#getUnsafe"
13 LIST_GET_UNSAFE: "getUnsafe"
14 LIST_CONCAT: "concat"
15 LIST_FIRST: "first"
16 LIST_FIRST_ARG: "first#list"

View file

@ -60,7 +60,10 @@ impl<'a> Layout<'a> {
match content {
var @ FlexVar(_) | var @ RigidVar(_) => {
panic!("Layout::from_content encountered an unresolved {:?}", var);
panic!(
"Layout::from_content encountered an unresolved {:?} - subs was {:?}",
var, subs
);
}
Structure(flat_type) => layout_from_flat_type(arena, flat_type, subs, pointer_size),
@ -501,7 +504,10 @@ fn layout_from_num_content<'a>(content: Content) -> Result<Layout<'a>, ()> {
match content {
var @ FlexVar(_) | var @ RigidVar(_) => {
panic!("Layout::from_content encountered an unresolved {:?}", var);
panic!(
"Layout::from_num_content encountered an unresolved {:?}",
var
);
}
Structure(Apply(symbol, args)) => match symbol {
Symbol::INT_INTEGER => Ok(Layout::Builtin(Builtin::Int64)),