void createSubs()
    {
      int toDo = subs.size();

      while (done<toDo)
      {
        for (int i=done;i<toDo;i++)
        {
          Expr expr = subs.elementAt(i);
          procName = expr.name;
          out.box(procName + " = " + Convert.toComment(expr.asString()));
          out.line("private boolean " + procName + "()");
          out.indent();
          out.line("{");
          out.indent();

          if (memo | test)
          {
            out.line("if (savedInner(" + procName + ")) return "
                      + (isPred(expr)? "reusePred();" : "reuseInner();"));
            if (test) cache = procName;
          }

          else if (isPred(expr))
            out.line("begin(\"\",\"" + Convert.toStringLit(diagPred(expr)) + "\");");

          else
            out.line("begin(\"\");");

          expr.accept(procVisitor);
          out.undent();
          out.line("}");
          out.undent();
          out.line("");
        }
        done = toDo;
        toDo = subs.size(); // We probably added subexprs of subexprs!
      }
    }