nac3core: codegen fix empty list llvm type #158
|
@ -657,7 +657,15 @@ pub fn gen_expr<'ctx, 'a, G: CodeGenerator>(
|
||||||
.iter()
|
.iter()
|
||||||
.map(|x| generator.gen_expr(ctx, x).unwrap().to_basic_value_enum(ctx, generator))
|
.map(|x| generator.gen_expr(ctx, x).unwrap().to_basic_value_enum(ctx, generator))
|
||||||
.collect_vec();
|
.collect_vec();
|
||||||
let ty = if elements.is_empty() { int32.into() } else { elements[0].get_type() };
|
let ty = if elements.is_empty() {
|
||||||
|
if let TypeEnum::TList { ty } = &*ctx.unifier.get_ty(expr.custom.unwrap()) {
|
||||||
|
ctx.get_llvm_type(generator, *ty)
|
||||||
|
} else {
|
||||||
|
unreachable!()
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
elements[0].get_type()
|
||||||
|
};
|
||||||
let length = generator.get_size_type(ctx.ctx).const_int(elements.len() as u64, false);
|
let length = generator.get_size_type(ctx.ctx).const_int(elements.len() as u64, false);
|
||||||
let arr_str_ptr = allocate_list(generator, ctx, ty, length);
|
let arr_str_ptr = allocate_list(generator, ctx, ty, length);
|
||||||
let arr_ptr = ctx.build_gep_and_load(arr_str_ptr, &[zero, zero]).into_pointer_value();
|
let arr_ptr = ctx.build_gep_and_load(arr_str_ptr, &[zero, zero]).into_pointer_value();
|
||||||
|
|
Loading…
Reference in New Issue