From 52e7ef3ae89fa4965cdd01eeb7bd0f4b9755a06a Mon Sep 17 00:00:00 2001 From: Ronald Brill Date: Sat, 9 Dec 2023 20:15:55 +0100 Subject: [PATCH 1/2] limit the length of the string to be used for indentation use a cache of precalculated strings instead of generating new ones over and over again --- src/org/mozilla/javascript/ast/AstNode.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/org/mozilla/javascript/ast/AstNode.java b/src/org/mozilla/javascript/ast/AstNode.java index d17ad8e63b..9d534fff89 100644 --- a/src/org/mozilla/javascript/ast/AstNode.java +++ b/src/org/mozilla/javascript/ast/AstNode.java @@ -71,6 +71,9 @@ public abstract class AstNode extends Node implements Comparable { protected AstNode inlineComment; private static Map operatorNames = new HashMap<>(); + private static final int MAX_INDENT = 42; + private static final String[] INDENTATIONS = new String[MAX_INDENT + 1]; + static { operatorNames.put(Token.IN, "in"); operatorNames.put(Token.TYPEOF, "typeof"); @@ -120,6 +123,12 @@ public abstract class AstNode extends Node implements Comparable { operatorNames.put(Token.ASSIGN_BITXOR, "^="); operatorNames.put(Token.ASSIGN_EXP, "**="); operatorNames.put(Token.VOID, "void"); + + StringBuilder sb = new StringBuilder(); + for (int i = 0; i <= MAX_INDENT; i++) { + sb.append(" "); + INDENTATIONS[i] = sb.toString(); + } } public static class PositionComparator implements Comparator, Serializable { @@ -299,11 +308,7 @@ public String toSource() { * @param indent the number of indentation steps */ public String makeIndent(int indent) { - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < indent; i++) { - sb.append(" "); - } - return sb.toString(); + return INDENTATIONS[Math.min(MAX_INDENT, indent)]; } /** Returns a short, descriptive name for the node, such as "ArrayComprehension". */ From 4679df04d004f1552c0269f9e1d7021724e44b08 Mon Sep 17 00:00:00 2001 From: Ronald Brill Date: Sun, 10 Dec 2023 09:41:16 +0100 Subject: [PATCH 2/2] ups --- src/org/mozilla/javascript/ast/AstNode.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/org/mozilla/javascript/ast/AstNode.java b/src/org/mozilla/javascript/ast/AstNode.java index 9d534fff89..fa9cdfc04f 100644 --- a/src/org/mozilla/javascript/ast/AstNode.java +++ b/src/org/mozilla/javascript/ast/AstNode.java @@ -125,7 +125,8 @@ public abstract class AstNode extends Node implements Comparable { operatorNames.put(Token.VOID, "void"); StringBuilder sb = new StringBuilder(); - for (int i = 0; i <= MAX_INDENT; i++) { + INDENTATIONS[0] = sb.toString(); + for (int i = 1; i <= MAX_INDENT; i++) { sb.append(" "); INDENTATIONS[i] = sb.toString(); } @@ -308,7 +309,8 @@ public String toSource() { * @param indent the number of indentation steps */ public String makeIndent(int indent) { - return INDENTATIONS[Math.min(MAX_INDENT, indent)]; + indent = Math.min(MAX_INDENT, Math.max(0, indent)); + return INDENTATIONS[indent]; } /** Returns a short, descriptive name for the node, such as "ArrayComprehension". */