private Object getWithProperty(Object ctx) {
    assert debug("\n  ** ENTER -> {with}");

    if (first) {
      assert debug("ALOAD 1");
      mv.visitVarInsn(ALOAD, 1);
      first = false;
    }

    String root = new String(expr, 0, cursor - 1).trim();

    int start = cursor + 1;
    cursor = balancedCaptureWithLineAccounting(expr, cursor, end, '{', pCtx);
    this.returnType = ctx != null ? ctx.getClass() : null;

    for (WithNode.ParmValuePair aPvp : WithNode.compileWithExpressions(expr, start, cursor++ - start, root, ingressType, pCtx)) {
      assert debug("DUP");
      mv.visitInsn(DUP);

      assert debug("ASTORE " + (5 + compileDepth) + " (withctx)");
      mv.visitVarInsn(ASTORE, 5 + compileDepth);

      aPvp.eval(ctx, variableFactory);

      if (aPvp.getSetExpression() == null) {
        addSubstatement(aPvp.getStatement());
      }
      else {
        compiledInputs.add((ExecutableStatement) aPvp.getSetExpression());

        // load set expression
        assert debug("ALOAD 0");
        mv.visitVarInsn(ALOAD, 0);

        assert debug("GETFIELD p" + (compiledInputs.size() - 1));
        mv.visitFieldInsn(GETFIELD, className, "p" + (compiledInputs.size() - 1), "L" + NAMESPACE
            + "compiler/ExecutableStatement;");

        // ctx
        assert debug("ALOAD " + (5 + compileDepth) + "(withctx)");
        mv.visitVarInsn(ALOAD, (5 + compileDepth));

        // elCtx
        assert debug("ALOAD 2");
        mv.visitVarInsn(ALOAD, 2);

        // variable factory
        assert debug("ALOAD 3");
        mv.visitVarInsn(ALOAD, 3);

        // the value to set.
        addSubstatement(aPvp.getStatement());

        assert debug("INVOKEINTERFACE Accessor.setValue");
        mv.visitMethodInsn(INVOKEINTERFACE, NAMESPACE + "compiler/ExecutableStatement",
            "setValue",
            "(Ljava/lang/Object;Ljava/lang/Object;L"
                + NAMESPACE + "integration/VariableResolverFactory;Ljava/lang/Object;)Ljava/lang/Object;");

        assert debug("POP");
        mv.visitInsn(POP);
      }
    }