changeset 2516:0a00f1ccd7e9 jdk8u262-b01

Merge
author andrew
date Fri, 24 Apr 2020 03:58:56 +0100
parents 5d64c42ac763 (current diff) 13db9dac5175 (diff)
children 60239ecaefa2
files .hgtags
diffstat 4 files changed, 22 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags	Mon Dec 16 11:28:28 2019 -0500
+++ b/.hgtags	Fri Apr 24 03:58:56 2020 +0100
@@ -1070,3 +1070,5 @@
 b988f627520c45015f0b91d2ee35e69531300770 jdk8u252-b06
 0666ec7fe2b45353dc0e09c1f6f386bdf763eeb4 jdk8u252-b07
 95d61d0f326bbfaddc2cbd29e67b12c00041caaa jdk8u252-b08
+2f5ad880fd3372eb5c2e5ac5ee82c705a1b6ac07 jdk8u252-b09
+2f5ad880fd3372eb5c2e5ac5ee82c705a1b6ac07 jdk8u252-ga
--- a/src/jdk/nashorn/internal/runtime/regexp/RegExpScanner.java	Mon Dec 16 11:28:28 2019 -0500
+++ b/src/jdk/nashorn/internal/runtime/regexp/RegExpScanner.java	Fri Apr 24 03:58:56 2020 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -141,14 +141,14 @@
             throw new PatternSyntaxException(e.getMessage(), string, scanner.position);
         }
 
-        scanner.processForwardReferences();
-
         // Throw syntax error unless we parsed the entire JavaScript regexp without syntax errors
         if (scanner.position != string.length()) {
             final String p = scanner.getStringBuilder().toString();
             throw new PatternSyntaxException(string, p, p.length() + 1);
         }
 
+        scanner.processForwardReferences();
+
         return scanner;
     }
 
--- a/src/jdk/nashorn/internal/runtime/regexp/joni/Parser.java	Mon Dec 16 11:28:28 2019 -0500
+++ b/src/jdk/nashorn/internal/runtime/regexp/joni/Parser.java	Fri Apr 24 03:58:56 2020 +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
             }
--- a/src/jdk/nashorn/internal/runtime/regexp/joni/ast/StringNode.java	Mon Dec 16 11:28:28 2019 -0500
+++ b/src/jdk/nashorn/internal/runtime/regexp/joni/ast/StringNode.java	Fri Apr 24 03:58:56 2020 +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)
      */