本文整理汇总了C++中DtBuilder::xoffpatch方法的典型用法代码示例。如果您正苦于以下问题:C++ DtBuilder::xoffpatch方法的具体用法?C++ DtBuilder::xoffpatch怎么用?C++ DtBuilder::xoffpatch使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DtBuilder
的用法示例。
在下文中一共展示了DtBuilder::xoffpatch方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: visit
void visit(InterfaceDeclaration *id)
{
//printf("InterfaceDeclaration::toObjFile('%s')\n", id->toChars());
if (id->type->ty == Terror)
{
id->error("had semantic errors when compiling");
return;
}
if (!id->members)
return;
if (global.params.symdebug)
toDebug(id);
enum_SC scclass = SCcomdat;
// Put out the members
for (size_t i = 0; i < id->members->dim; i++)
{
Dsymbol *member = (*id->members)[i];
visitNoMultiObj(member);
}
// Generate C symbols
toSymbol(id);
//////////////////////////////////////////////
// Put out the TypeInfo
genTypeInfo(id->type, NULL);
id->type->vtinfo->accept(this);
//////////////////////////////////////////////
// Put out the ClassInfo
id->csym->Sclass = scclass;
id->csym->Sfl = FLdata;
/* The layout is:
{
void **vptr;
monitor_t monitor;
byte[] m_init; // static initialization data
string name; // class name
void*[] vtbl;
Interface[] interfaces;
ClassInfo base; // base class
void* destructor;
void function(Object) classInvariant; // class invariant
ClassFlags m_flags;
void* deallocator;
OffsetTypeInfo[] offTi;
void function(Object) defaultConstructor;
//const(MemberInfo[]) function(string) xgetMembers; // module getMembers() function
immutable(void)* m_RTInfo;
//TypeInfo typeinfo;
}
*/
DtBuilder dtb;
if (Type::typeinfoclass)
dtb.xoff(toVtblSymbol(Type::typeinfoclass), 0, TYnptr); // vtbl for ClassInfo
else
dtb.size(0); // BUG: should be an assert()
dtb.size(0); // monitor
// m_init[]
dtb.size(0); // size
dtb.size(0); // initializer
// name[]
const char *name = id->toPrettyChars();
size_t namelen = strlen(name);
dtb.size(namelen);
dt_t *pdtname = dtb.xoffpatch(id->csym, 0, TYnptr);
// vtbl[]
dtb.size(0);
dtb.size(0);
// interfaces[]
unsigned offset = Target::classinfosize;
dtb.size(id->vtblInterfaces->dim);
if (id->vtblInterfaces->dim)
{
if (Type::typeinfoclass)
{
if (Type::typeinfoclass->structsize != offset)
{
id->error("mismatch between dmd and object.d or object.di found. Check installation and import paths with -v compiler switch.");
fatal();
}
}
dtb.xoff(id->csym, offset, TYnptr); // (*)
}
else
{
dtb.size(0);
//.........这里部分代码省略.........