Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using a local clone.


Convert a D symbol to a symbol the linker understands (with mangled name).

Source tocsym.d

Symbol* toSymbolX(Dsymbol ds, const(char)* prefix, SC sclass, type* t, const(char)* suffix);
Symbol* toSymbol(Dsymbol s);
Symbol* toImport(Dsymbol ds);
Generate import symbol from symbol.
Symbol* toThunkSymbol(FuncDeclaration fd, int offset);
Thunks adjust the incoming 'this' pointer by 'offset'.
Classsym* fake_classsym(Identifier id);
Fake a struct symbol.
Symbol* toVtblSymbol(ClassDeclaration cd, bool genCsymbol = true);
This is accessible via the ClassData, but since it is frequently needed directly (like for rtti comparisons), make it directly accessible.
Symbol* toInitializer(AggregateDeclaration ad);
Create the static initializer for the struct/class.
Symbol* toSymbol(StructLiteralExp sle);
Symbol* toSymbolCpp(ClassDeclaration cd);
For C++ class cd, generate an instance of _cpp_type_info_ptr and populate it with a pointer to the C++ type info.
ClassDeclaration cd C++ class
symbol of instance of _cpp_type_info_ptr
Symbol* toSymbolCppTypeInfo(ClassDeclaration cd);
Generate Symbol of C++ type info for C++ class cd.
ClassDeclaration cd C++ class
Symbol of cd's rtti type info
Symbol* toSymbol(Type t);
Turn a class type into a C Symbol.
Type t class type
corresponding Symbol
Srcpos toSrcpos(Loc loc);
Converts a Loc to backend Srcpos
Loc loc Source code location
Srcpos backend struct corresponding to the given location