Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
Archivo: gentype.c Proyecto: nunb/ponyc
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);
}