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.
dmd.toir
Compiler implementation of the
D programming language.
Authors:
License:
Source: toir.d
Documentation:
https: //dlang.org/phobos/dmd_toir.html
Coverage:
https:
//codecov.io/gh/dlang/dmd/src/master/src/dmd/toir
.d
- elem*
incUsageElem
(IRState*irs
, ref const Locloc
); - Produce elem which increments the usage count for a particular line. Sets corresponding bit in bitmap m.covb[linnum]. Used to implement -cov switch (coverage analysis).Parameters:
IRState* irs
context Loc loc
line and file of what line to show usage for Returns:elem that increments the line countReferences:
https: //dlang.org/dmd-windows.html#switch-cov
- elem*
getEthis
(Locloc
, IRState*irs
, Dsymbolfd
); - Return elem that evaluates to the static frame pointer for function
fd
. Iffd
is a member function, the returned expression will compute the value offd
's 'this' variable. This routine is critical for implementing nested functions. - elem*
setEthis
(Locloc
, IRState*irs
, elem*ey
, AggregateDeclarationad
); - Initialize the hidden aggregate member, vthis, with the context pointer.Returns:*(
ey
+ad
.vthis.offset) = this; - int
intrinsic_op
(FuncDeclarationfd
); - Convert intrinsic function to operator. Returns that operator, -1 if not an intrinsic function.
- elem*
resolveLengthVar
(VarDeclarationlengthVar
, elem**pe
, Typet1
); - Given an expression e that is an array, determine and set the 'length' variable.
Input:
lengthVar
Symbol of 'length' variable &e expression that is the arrayt1
Type of the arrayOutput: e is rewritten to avoid side effects
Returns:expression that initializes 'length' - void
setClosureVarOffset
(FuncDeclarationfd
); - Go through the variables in function
fd
that are to be allocated in a closure, and set the .offset fields for those variables to their positions relative to the start of the closure instance. Also turns off nrvo for closure variables.Parameters:FuncDeclaration fd
function - void
buildClosure
(FuncDeclarationfd
, IRState*irs
); - Closures are implemented by taking the local variables that need to survive the scope of the function, and copying them into a gc allocated chuck of memory. That chunk, called the closure here, is inserted into the linked list of stack frames instead of the usual stack frame.
buildClosure
() inserts code just after the function prolog is complete. It allocates memory for the closure, allocates a local variable (sclosure) to point to it, inserts into it the link to the enclosing frame, and copies into it the parameters that are referred to in nested functions. In VarExp::toElem and SymOffExp::toElem, when referring to a variable that is in a closure, takes the offset from sclosure rather than from the frame pointer. getEthis() and NewExp::toElem need to use sclosure, if set, rather than the current frame pointer. - RET
retStyle
(TypeFunctiontf
); - Determine return style of function - whether in registers or through a hidden pointer to the caller's stack.
Copyright © 1999-2018 by the D Language Foundation | Page generated by
Ddoc on (no date time)