Annotate low-level usages

This commit is contained in:
Richard Feldman 2020-06-21 21:05:57 -04:00
parent 52dfb75dc0
commit cad0a1421e
3 changed files with 75 additions and 89 deletions

View file

@ -1044,22 +1044,6 @@ fn call_with_args<'a, 'ctx, 'env>(
BasicValueEnum::IntValue(int_val)
}
Symbol::LIST_LEN => {
debug_assert!(args.len() == 1);
BasicValueEnum::IntValue(load_list_len(env.builder, args[0].0.into_struct_value()))
}
Symbol::LIST_IS_EMPTY => {
debug_assert!(args.len() == 1);
let list_struct = args[0].0.into_struct_value();
let builder = env.builder;
let list_len = load_list_len(builder, list_struct);
let zero = env.ptr_int().const_zero();
let answer = builder.build_int_compare(IntPredicate::EQ, list_len, zero, "is_zero");
BasicValueEnum::IntValue(answer)
}
Symbol::INT_REM_UNSAFE => {
debug_assert!(args.len() == 2);
@ -1446,12 +1430,24 @@ fn run_low_level<'a, 'ctx, 'env>(
match op {
ListLen => {
debug_assert!(args.len() == 1);
debug_assert_eq!(args.len(), 1);
let arg = build_expr(env, layout_ids, scope, parent, &args[0].0);
BasicValueEnum::IntValue(load_list_len(env.builder, arg.into_struct_value()))
}
ListIsEmpty => {
debug_assert_eq!(args.len(), 1);
let arg = build_expr(env, layout_ids, scope, parent, &args[0].0);
let list_struct = arg.into_struct_value();
let builder = env.builder;
let list_len = load_list_len(builder, list_struct);
let zero = env.ptr_int().const_zero();
let answer = builder.build_int_compare(IntPredicate::EQ, list_len, zero, "is_zero");
BasicValueEnum::IntValue(answer)
}
NumAdd | NumSub | NumMul | NumLt | NumLte | NumGt | NumGte => {
debug_assert_eq!(args.len(), 2);