# HG changeset patch # User hannesw # Date 1573841443 -3600 # Node ID 2f5ad880fd3372eb5c2e5ac5ee82c705a1b6ac07 # Parent 2e03a91e04b91a8cf0d34c67151581926b930660 8223904: Improve Nashorn matching Reviewed-by: jlaskey, sundar, mschoene, rhalade diff -r 2e03a91e04b9 -r 2f5ad880fd33 src/jdk/nashorn/internal/runtime/regexp/joni/Parser.java --- a/src/jdk/nashorn/internal/runtime/regexp/joni/Parser.java Wed Nov 06 17:13:21 2019 +0100 +++ b/src/jdk/nashorn/internal/runtime/regexp/joni/Parser.java Fri Nov 15 19:10:43 2019 +0100 @@ -452,7 +452,7 @@ private Node parseExp(final TokenType term) { if (token.type == term) { - return StringNode.EMPTY; // goto end_of_token + return StringNode.createEmpty(); // goto end_of_token } Node node = null; @@ -461,7 +461,7 @@ switch(token.type) { case ALT: case EOT: - return StringNode.EMPTY; // end_of_token:, node_new_empty + return StringNode.createEmpty(); // end_of_token:, node_new_empty case SUBEXP_OPEN: node = parseEnclose(TokenType.SUBEXP_CLOSE); @@ -569,7 +569,7 @@ if (syntax.contextInvalidRepeatOps()) { throw new SyntaxException(ERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED); } - node = StringNode.EMPTY; // node_new_empty + node = StringNode.createEmpty(); // node_new_empty } else { return parseExpTkByte(group); // goto tk_byte } diff -r 2e03a91e04b9 -r 2f5ad880fd33 src/jdk/nashorn/internal/runtime/regexp/joni/ast/StringNode.java --- a/src/jdk/nashorn/internal/runtime/regexp/joni/ast/StringNode.java Wed Nov 06 17:13:21 2019 +0100 +++ b/src/jdk/nashorn/internal/runtime/regexp/joni/ast/StringNode.java Fri Nov 15 19:10:43 2019 +0100 @@ -27,7 +27,6 @@ private static final int NODE_STR_MARGIN = 16; private static final int NODE_STR_BUF_SIZE = 24; - public static final StringNode EMPTY = new StringNode(null, Integer.MAX_VALUE, Integer.MAX_VALUE); public char[] chars; public int p; @@ -36,7 +35,13 @@ public int flag; public StringNode() { - this.chars = new char[NODE_STR_BUF_SIZE]; + this(NODE_STR_BUF_SIZE); + } + + private StringNode(int size) { + this.chars = new char[size]; + this.p = 0; + this.end = 0; } public StringNode(final char[] chars, final int p, final int end) { @@ -51,6 +56,13 @@ chars[end++] = c; } + /** + * Create a new empty StringNode. + */ + public static StringNode createEmpty() { + return new StringNode(0); + } + /* Ensure there is ahead bytes available in node's buffer * (assumes that the node is not shared) */