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.

ddmd.delegatize

Compiler implementation of the D programming language.
Authors:

Source: delegatize.d

void lambdaSetParent(Expression e, Scope* sc);
Patch the parent of declarations to be the new function literal.
bool lambdaCheckForNestedRef(Expression e, Scope* sc);
Look for references to variables in a scope enclosing the new function literal. Returns true if error occurs.
bool ensureStaticLinkTo(Dsymbol s, Dsymbol p);
See if context s is nested within context p, meaning it p is reachable at runtime by walking the static links. If any of the intervening contexts are function literals, make sure they are delegates.
Parameters:
Dsymbol s inner context
Dsymbol p outer context
Returns:
true means it is accessible by walking the context pointers at runtime

References: for static links see https://en.wikipedia.org/wiki/Call_stack#Functions_of_the_call_stack