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]>