ASTVisitor.dynamicDispatch

void dynamicDispatch(const ExpressionNode n)

Looks at the runtime type of n, then calls the appropriate visit method at runtime.

Rule of thumb: when the type is an abstract class, use dynamicDispatch, otherwise use visit.

For templated calls:

static if (__traits(isAbstractClass, typeof(node)))
  visitor.dynamicDispatch(node);
else
  visitor.visit(node);

void dynamicDispatch(const InterpolatedStringPart n)

ditto