8223904: Improve Nashorn matching

Reviewed-by: jlaskey, sundar, mschoene, rhalade
This commit is contained in:
Hannes Wallnöfer 2019-11-15 19:10:43 +01:00
parent 3bbc499f06
commit 3dd1fd2964
2 changed files with 17 additions and 5 deletions

View File

@ -452,7 +452,7 @@ class Parser extends Lexer {
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 @@ class Parser extends Lexer {
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 @@ class Parser extends Lexer {
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
}

View File

@ -27,7 +27,6 @@ public final class StringNode extends Node implements StringType {
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 final class StringNode extends Node implements StringType {
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 @@ public final class StringNode extends Node implements StringType {
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)
*/