IrTypeClass::IrTypeClass(ClassDeclaration *cd) : IrTypeAggr(cd), cd(cd), tc(static_cast<TypeClass *>(cd->type)) { std::string vtbl_name(cd->toPrettyChars()); vtbl_name.append(".__vtbl"); vtbl_type = LLStructType::create(gIR->context(), vtbl_name); vtbl_size = cd->vtbl.dim; }
IrTypeClass::IrTypeClass(ClassDeclaration* cd) : IrTypeAggr(cd), cd(cd), tc((TypeClass*)cd->type) { std::string vtbl_name(cd->toPrettyChars()); vtbl_name.append(".__vtbl"); vtbl_type = LLStructType::create(gIR->context(), vtbl_name); vtbl_size = cd->vtbl.dim; num_interface_vtbls = 0; }
void SingleInheritanceVtbls::attach_vtbl( SingleInheritanceClassType* ctype ) { VariableSymbol* vsym = ::create_variable_symbol( _env, NULL, // type: set by vtbl construction vtbl_name( ctype ), false ); SymbolTable* symtab = ctype->get_per_class_symbol_table(); symtab->add_symbol( vsym ); attach_vtbl( ctype, vsym ); }