code: @Override
    protected Statement visitCallDelegateNode(CallDelegateNode node) {
      Label reattachPoint = new Label();
      Expression variantExpr;
      if (node.getDelCalleeVariantExpr() == null) {
        variantExpr = constant("");
      } else {
        variantExpr =
            exprCompiler.compile(node.getDelCalleeVariantExpr(), reattachPoint).coerceToString();
      }
      Expression calleeExpression =
          parameterLookup
              .getRenderContext()
              .getDeltemplate(
                  node.getDelCalleeName(),
                  variantExpr,
                  node.allowEmptyDefault(),
                  prepareParamsHelper(node, reattachPoint),
                  parameterLookup.getIjRecord());
      return renderCallNode(reattachPoint, node, calleeExpression);
    }
docs: Given this delcall: {@code {delcall foo.bar variant="$expr" allowemptydefault="true"}}
  
  <p>Generate code that looks like:
  
  <pre>{@code
  renderContext.getDeltemplate("foo.bar", <variant-expression>, true)
  .create(<prepareParameters>, ijParams)
  .render(appendable, renderContext)
  
  }</pre>
  
  <p>We share logic with {@link #visitCallBasicNode(CallBasicNode)} around the actual calling
  convention (setting up detaches, storing the template in a field). As well as the logic for
  preparing the data record. The only interesting part of delcalls is calculating the {@code
  variant} and the fact that we have to invoke the {@link RenderContext} runtime to do the
  deltemplate lookup.