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.


Compiler implementation of the D programming language.

Source: e2ir.d

elem* useOPstrpar(elem* e);
If argument to a function should use OPstrpar, fix it so it does and return it.
elem* callfunc(Loc loc, IRState* irs, int directcall, Type tret, elem* ec, Type ectype, FuncDeclaration fd, Type t, elem* ehidden, Expressions* arguments, elem* esel = null);
Call a function.
elem* addressElem(elem* e, Type t, bool alwaysCopy = false);
Take address of an elem.
elem* array_toPtr(Type t, elem* e);
Convert array to a pointer to the data.
elem* array_toDarray(Type t, elem* e);
Convert array to a dynamic array.
elem* sarray_toDarray(Loc loc, Type tfrom, Type tto, elem* e);
elem* getTypeInfo(Type t, IRState* irs);
StructDeclaration needsPostblit(Type t);
Determine if t is a struct that has postblit.
StructDeclaration needsDtor(Type t);
Determine if t is a struct that has destructor.
elem* setArray(elem* eptr, elem* edim, Type tb, elem* evalue, IRState* irs, int op);
Set an array pointed to by eptr to evalue: eptr[0..edim] = evalue;

Input: eptr where to write the data to evalue value to write edim number of times to write evalue to eptr[] tb type of evalue

void clearStringTab();
Reset stringTab[] between object files being emitted, because the symbols are local.
elem* fillHole(Symbol* stmp, size_t* poffset, size_t offset2, size_t maxoff);
Generate elem to zero fill contents of Symbol stmp from *poffset..offset2. May store anywhere from 0..maxoff, as this function tries to use aligned int stores whereever possible. Update *poffset to end of initialized hole; *poffset will be >= offset2.
elem* appendDtors(IRState* irs, elem* er, size_t starti, size_t endi);
Add destructors
elem* toElemDtor(Expression e, IRState* irs);
Evaluate Expression, then call destructors on any temporaries in it.
Symbol* toStringSymbol(const(char)* str, size_t len, size_t sz);
Write read-only string to object file, create a local symbol for it. Makes a copy of str's contents, does not keep a reference to it.
const(char)* str string
size_t len number of code units in string
size_t sz number of bytes per code unit
comdat emit string in its own comdat (default is read-only segment). Comdats are useful when linker does not coalesce redundant strings.
Symbol* toStringSymbol(StringExp se);
Turn StringExp into Symbol.
elem* filelinefunction(IRState* irs, Loc* loc);
Return an elem that is the file, line, and function suitable for insertion into the parameter list.
elem* buildArrayBoundsError(IRState* irs, ref const Loc loc);
Construct elem to run when an array bounds check fails.
elem generated
void toTraceGC(IRState* irs, elem* e, Loc* loc);
Replace call to GC allocator with call to tracing GC allocator.
IRState* irs to get function from
elem* e elem to modify
eloc to get file/line from