dmd.delegatize

Implements conversion from expressions to delegates for lazy parameters.

Specification: Lazy Parameters

Authors

Walter Bright

Source: delegatize.d

  • Declaration

    Expression toDelegate(Expression e, Type t, Scope* sc);

    Convert expression into a delegate.

    Discussion

    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

    Return Value

    A delegate literal

  • Declaration

    bool lambdaCheckForNestedRef(Expression e, Scope* sc);

    Look for references to variables in a scope enclosing the new function literal.

    Discussion

    Essentially just calls checkNestedReference() for each variable reference in e`.

    Parameters

    Scope* sc

    context

    Expression e

    expression to check

    Return Value

    true if error occurs.

  • Declaration

    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

    Return Value

    true means it is accessible by walking the context pointers at runtime