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.delegatize

Compiler implementation of the D programming language.
Authors:

Source: delegatize.d

Expression toDelegate(Expression e, Type t, Scope* sc);
Convert expression into a delegate.
Used to convert the argument to a lazy parameter.
Parameters:
Expression e argument to convert to a delegate
Type t the type to be returned by the delegate
Scope* sc context
Returns:
A delegate literal
bool lambdaCheckForNestedRef(Expression e, Scope* sc);
Look for references to variables in a scope enclosing the new function literal.
Essentially just calls checkNestedReference() for each variable reference in e`.
Parameters:
Scope* sc context
Expression e expression to check
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