static void make_box_type(compile_t* c, reach_type_t* t) { if(t->primitive == NULL) return; const char* box_name = genname_box(t->name); t->structure = LLVMStructCreateNamed(c->context, box_name); LLVMTypeRef elements[2]; elements[0] = LLVMPointerType(t->desc_type, 0); elements[1] = t->primitive; LLVMStructSetBody(t->structure, elements, 2, false); t->structure_ptr = LLVMPointerType(t->structure, 0); }
static void make_box_type(compile_t* c, gentype_t* g) { if(g->primitive == NULL) return; if(g->structure == NULL) { const char* box_name = genname_box(g->type_name); g->structure = LLVMGetTypeByName(c->module, box_name); if(g->structure == NULL) g->structure = LLVMStructCreateNamed(c->context, box_name); } if(LLVMIsOpaqueStruct(g->structure)) { LLVMTypeRef elements[2]; elements[0] = LLVMPointerType(g->desc_type, 0); elements[1] = g->primitive; LLVMStructSetBody(g->structure, elements, 2, false); } g->structure_ptr = LLVMPointerType(g->structure, 0); }