remm        2002/06/09 18:35:19

  Modified:    jasper2/src/share/org/apache/jasper/compiler Generator.java
  Log:
  - Add buffer reuse, as was described some time ago, using the state object.
  - Existing test suites and the administration webapp appear to be working ok,
    so I am committing it to see if it causes problems.
  
  Revision  Changes    Path
  1.20      +29 -15    
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java
  
  Index: Generator.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- Generator.java    9 Jun 2002 06:17:31 -0000       1.19
  +++ Generator.java    10 Jun 2002 01:35:19 -0000      1.20
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java,v
 1.19 2002/06/09 06:17:31 remm Exp $
  - * $Revision: 1.19 $
  - * $Date: 2002/06/09 06:17:31 $
  + * $Header: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java,v
 1.20 2002/06/10 01:35:19 remm Exp $
  + * $Revision: 1.20 $
  + * $Date: 2002/06/10 01:35:19 $
    *
    * ====================================================================
    * 
  @@ -358,7 +358,7 @@
   
        // Local variable declarations
        out.printil("JspFactory _jspxFactory = null;");
  -     out.printil("PageContext pageContext = null;");
  +     out.printil("org.apache.jasper.runtime.PageContextImpl pageContext = null;");
        if (pageInfo.isSession())
            out.printil("HttpSession session = null;");
   
  @@ -386,8 +386,8 @@
        out.print  (quote(pageInfo.getContentType()));
        out.println(");");
   
  -     out.printil("pageContext = _jspxFactory.getPageContext(" +
  -                 "this, request, response,");
  +     out.printil("pageContext = (org.apache.jasper.runtime.PageContextImpl)"
  +                    + " _jspxFactory.getPageContext(this, request, response,");
        out.printin("\t\t\t");
        out.print  (quote(pageInfo.getErrorPage()));
        out.print  (", " + pageInfo.isSession());
  @@ -401,6 +401,9 @@
        if (pageInfo.isSession())
            out.printil("session = pageContext.getSession();");
        out.printil("out = pageContext.getOut();");
  +        if (maxTagNesting > 0) {
  +            out.printil("_jspxState.outs[0] = out;");
  +        }
        out.println();
       }
   
  @@ -429,9 +432,15 @@
        out.pushIndent();
        out.printil("public int tagCount;");
        out.println();
  +     out.printil("public int tagDepth;");
  +     out.println();
  +     out.printil("public JspWriter[] outs;");
  +     out.println();
        out.printil("public JspxState() {");
        out.pushIndent();
        out.printil("tagCount = 0;");
  +     out.printil("tagDepth = 0;");
  +     out.printil("outs = new JspWriter[" + (maxTagNesting + 1) + "];");
        out.popIndent();
        out.printil("}");
        out.popIndent();
  @@ -1034,12 +1043,12 @@
                    out.print(parent);
                    out.print(", ");
                }
  -             out.println("PageContext pageContext, JspxState _jspxState)");
  +             out.println("org.apache.jasper.runtime.PageContextImpl pageContext, 
JspxState _jspxState)");
                out.printil("        throws java.io.IOException, 
javax.servlet.jsp.JspException {");
                out.pushIndent();
   
                // Initilaize local variables used in this method.
  -             out.printil("JspWriter out = pageContext.getOut();");
  +             out.printil("JspWriter out = _jspxState.outs[_jspxState.tagDepth];");
                if (n.isHasUsebean()) {
                    out.println("HttpSession session = pageContext.getSession();");
                    out.println("ServletContext application = 
pageContext.getServletContext();");
  @@ -1242,10 +1251,15 @@
                    // Assume EVAL_BODY_BUFFERED
                    out.pushIndent();
                    
  -                 out.printil("out = pageContext.pushBody();");
                       if (!implementsTryCatchFinally) {
                           out.printil("_jspxState.tagCount++;");
                    }
  +                    out.printil("_jspxState.tagDepth++;");
  +
  +                    out.printil("out = 
pageContext.allocateBody(_jspxState.outs[_jspxState.tagDepth], out);");
  +                    out.printil("_jspxState.outs[_jspxState.tagDepth] = out;");
  +                 out.printil("pageContext.setOut(out);");
  +
                    out.printin(tagHandlerVar);
                    
out.println(".setBodyContent((javax.servlet.jsp.tagext.BodyContent) out);");
                    out.printin(tagHandlerVar);
  @@ -1302,10 +1316,13 @@
                    out.print(tagEvalVar);
                    out.println(" != javax.servlet.jsp.tagext.Tag.EVAL_BODY_INCLUDE)");
                    out.pushIndent();
  +                 out.printil("_jspxState.outs[_jspxState.tagDepth].clear();");
                       if (!implementsTryCatchFinally) {
                           out.printil("_jspxState.tagCount--;");
                    }
  -                 out.printil("out = pageContext.popBody();");
  +                    out.printil("_jspxState.tagDepth--;");
  +                 out.printil("out = _jspxState.outs[_jspxState.tagDepth];");
  +                    out.printil("pageContext.setOut(out);");
                    out.popIndent();
                }
   
  @@ -1561,11 +1578,8 @@
   
        // Cleanup the tags on the stack
           if (maxTagNesting > 0) {
  -            out.printil("while (_jspxState.tagCount-- > 0) {");
  -            out.pushIndent();
  -            out.printil("out = pageContext.popBody();");
  -            out.popIndent();
  -            out.printil("}");
  +            out.printil("out = _jspxState.outs[0];");
  +            out.printil("pageContext.setOut(out);");
           }
   
           out.printil("if (_jspxFactory != null) 
_jspxFactory.releasePageContext(pageContext);");
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to