You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ki...@apache.org on 2001/10/19 03:42:36 UTC
cvs commit: jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler Parser.java ServletWriter.java TagBeginGenerator.java TagEndGenerator.java
kinman 01/10/18 18:42:36
Modified: jasper/src/share/org/apache/jasper/compiler Parser.java
ServletWriter.java TagBeginGenerator.java
TagEndGenerator.java
Log:
PR: Bugzilla 2622
- For tag handlers with empty body, generate simpler codes.
- Don't call doInitBody() when doStartTag doesn't return EVAL_BODY_BUFFERED
- Cleanup format of generated Java codes.
Revision Changes Path
1.16 +2 -2 jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/Parser.java
Index: Parser.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/Parser.java,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- Parser.java 2001/10/03 19:29:28 1.15
+++ Parser.java 2001/10/19 01:42:36 1.16
@@ -838,9 +838,9 @@
reader.advance(CLOSE_1.length());
listener.setTemplateInfo(parser.tmplStart, parser.tmplStop);
listener.handleTagBegin(start, reader.mark(), attrs, prefix,
- shortTagName, tli, ti, true);
+ shortTagName, tli, ti, false);
listener.handleTagEnd(start, reader.mark(), prefix,
- shortTagName, attrs, tli, ti, true);
+ shortTagName, attrs, tli, ti, false);
} else {
// Body can be either
// - empty
1.3 +12 -9 jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/ServletWriter.java
Index: ServletWriter.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/ServletWriter.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ServletWriter.java 2001/07/12 21:40:51 1.2
+++ ServletWriter.java 2001/10/19 01:42:36 1.3
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/ServletWriter.java,v 1.2 2001/07/12 21:40:51 horwat Exp $
- * $Revision: 1.2 $
- * $Date: 2001/07/12 21:40:51 $
+ * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/ServletWriter.java,v 1.3 2001/10/19 01:42:36 kinman Exp $
+ * $Revision: 1.3 $
+ * $Date: 2001/10/19 01:42:36 $
*
* ====================================================================
*
@@ -71,11 +71,12 @@
* @author Anil K. Vijendran
*/
public class ServletWriter {
- public static int TAB_WIDTH = 4;
+ public static int TAB_WIDTH = 2;
public static String SPACES = " ";
// Current indent level:
- int indent = 0;
+ private int indent = 0;
+ private int virtual_indent = 0;
// The sink writer:
PrintWriter writer;
@@ -110,13 +111,15 @@
// -------------------- Formatting --------------------
public void pushIndent() {
- if ((indent += TAB_WIDTH) > SPACES.length())
- indent = SPACES.length();
+ virtual_indent += TAB_WIDTH;
+ if (virtual_indent >= 0 && virtual_indent <= SPACES.length())
+ indent = virtual_indent;
}
public void popIndent() {
- if ((indent -= TAB_WIDTH) <= 0 )
- indent = 0;
+ virtual_indent -= TAB_WIDTH;
+ if (virtual_indent >= 0 && virtual_indent <= SPACES.length())
+ indent = virtual_indent;
}
/**
1.17 +12 -4 jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/TagBeginGenerator.java
Index: TagBeginGenerator.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/TagBeginGenerator.java,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- TagBeginGenerator.java 2001/09/26 02:37:13 1.16
+++ TagBeginGenerator.java 2001/10/19 01:42:36 1.17
@@ -68,6 +68,7 @@
import javax.servlet.jsp.tagext.TagData;
import javax.servlet.jsp.tagext.Tag;
import javax.servlet.jsp.tagext.BodyTag;
+import javax.servlet.jsp.tagext.IterationTag;
import org.apache.jasper.JasperException;
import org.apache.jasper.JspCompilationContext;
@@ -347,6 +348,10 @@
// Need to update AT_BEGIN variables here
declareVariables(writer, vi, tvi, tagData, false, true, VariableInfo.AT_BEGIN);
+/* The following check is unnecssary, becuase tag handlers that do not
+ * implement BodyTag can be assumed to return EVAL_BODY_INCLUDE when
+ * doStartTag returns anything other than SKIP_BODY, without bad side-effect.
+
// FIXME: I'm not too sure if this is the right approach. I don't like
// throwing English language strings into the generated servlet.
// Perhaps, I'll just define an inner classes as necessary for these
@@ -359,6 +364,7 @@
" does not implement BodyTag, it can't return BodyTag.EVAL_BODY_TAG\");");
writer.popIndent();
}
+*/
if (hasBody) {
writer.println("if ("+evalVar+" != javax.servlet.jsp.tagext.Tag.SKIP_BODY) {");
@@ -369,19 +375,21 @@
writer.pushIndent();
writer.println("if ("+evalVar+" != javax.servlet.jsp.tagext.Tag.EVAL_BODY_INCLUDE) {");
+ // Assumes that equals EVAL_BODY_BUFFERED
writer.pushIndent();
writer.println("out = pageContext.pushBody();");
writer.println(thVarName+".setBodyContent((javax.servlet.jsp.tagext.BodyContent) out);");
+ writer.println(thVarName+".doInitBody();");
writer.popIndent();
writer.println("}");
-
- writer.println(thVarName+".doInitBody();");
}
- writer.println("do {");
- writer.pushIndent();
+ if (IterationTag.class.isAssignableFrom(tc.getTagHandlerClass())) {
+ writer.println("do {");
+ writer.pushIndent();
+ }
}
// Need to declare and update NESTED variables here
declareVariables(writer, vi, tvi, tagData, true, true, VariableInfo.NESTED);
1.10 +3 -4 jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/TagEndGenerator.java
Index: TagEndGenerator.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/TagEndGenerator.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- TagEndGenerator.java 2001/07/23 19:57:32 1.9
+++ TagEndGenerator.java 2001/10/19 01:42:36 1.10
@@ -123,13 +123,12 @@
boolean implementsTryCatchFinally =
TryCatchFinally.class.isAssignableFrom(tagHandlerClass);
- writer.popIndent();
if (hasBody) {
- if (implementsIterationTag)
+ if (implementsIterationTag) {
+ writer.popIndent();
writer.println("} while ("+thVarName+".doAfterBody() == javax.servlet.jsp.tagext.BodyTag.EVAL_BODY_AGAIN);");
- else
- writer.println("} while (false);");
+ }
}
declareVariables(writer, vi, tvi, tagData, false, true, VariableInfo.AT_BEGIN);