You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@freemarker.apache.org by dd...@apache.org on 2015/12/15 23:24:01 UTC
[20/23] incubator-freemarker git commit: Decreased guaranteed stack
usage (which is the stack usage you see in exception stack traces) by 1 per
visit(TemplateElement[]).
Decreased guaranteed stack usage (which is the stack usage you see in exception stack traces) by 1 per visit(TemplateElement[]).
Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/a97cf728
Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/a97cf728
Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/a97cf728
Branch: refs/heads/2.3
Commit: a97cf7289d53a69cf74cb3a9aa9f669e99e3949f
Parents: bc303ab
Author: ddekany <dd...@apache.org>
Authored: Tue Dec 15 00:18:10 2015 +0100
Committer: ddekany <dd...@apache.org>
Committed: Tue Dec 15 00:18:10 2015 +0100
----------------------------------------------------------------------
src/main/java/freemarker/core/Environment.java | 27 ++++++++++++++++++---
1 file changed, 24 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/a97cf728/src/main/java/freemarker/core/Environment.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/core/Environment.java b/src/main/java/freemarker/core/Environment.java
index a622e9b..ef7a301 100644
--- a/src/main/java/freemarker/core/Environment.java
+++ b/src/main/java/freemarker/core/Environment.java
@@ -320,6 +320,7 @@ public final class Environment extends Configurable {
* "Visit" the template element.
*/
void visit(TemplateElement element) throws IOException, TemplateException {
+ // ATTENTION: This method body is manually "inlined" into visit(TemplateElement[]); keep them in sync!
pushElement(element);
try {
TemplateElement[] templateElementsToVisit = element.accept(this);
@@ -336,6 +337,7 @@ public final class Environment extends Configurable {
} finally {
popElement();
}
+ // ATTENTION: This method body above is manually "inlined" into visit(TemplateElement[]); keep them in sync!
}
/**
@@ -348,11 +350,30 @@ public final class Environment extends Configurable {
if (elementBuffer == null) {
return;
}
- for (TemplateElement el : elementBuffer) {
- if (el == null) {
+ for (TemplateElement element : elementBuffer) {
+ if (element == null) {
break; // Skip unused trailing buffer capacity
}
- visit(el);
+
+ // ATTENTION: This part is the manually "inlining" of visit(TemplateElement[]); keep them in sync!
+ // We don't just let Hotspot to do it, as we want a hard guarantee regarding maximum stack usage.
+ pushElement(element);
+ try {
+ TemplateElement[] templateElementsToVisit = element.accept(this);
+ if (templateElementsToVisit != null) {
+ for (TemplateElement el : templateElementsToVisit) {
+ if (el == null) {
+ break; // Skip unused trailing buffer capacity
+ }
+ visit(el);
+ }
+ }
+ } catch (TemplateException te) {
+ handleTemplateException(te);
+ } finally {
+ popElement();
+ }
+ // ATTENTION: This part above is the manually "inlining" of visit(TemplateElement[]); keep them in sync!
}
}