\b escapes inside character classes should be valid in Unicode patterns
authorshvaikalesh@gmail.com <shvaikalesh@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 25 Mar 2020 11:11:47 +0000 (11:11 +0000)
committershvaikalesh@gmail.com <shvaikalesh@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 25 Mar 2020 11:11:47 +0000 (11:11 +0000)
https://bugs.webkit.org/show_bug.cgi?id=209528

Reviewed by Darin Adler.

JSTests:

* test262/expectations.yaml: Mark 2 test cases as passing.

Source/JavaScriptCore:

This change removes isIdentityEscapeAnError('b') check, allowing \b escapes
inside character classes in Unicode patterns match U+0008 (BACKSPACE) characters,
aligning JSC with V8 and SpiderMonkey.

Grammar: https://tc39.es/ecma262/#prod-ClassEscape
('b' comes before CharacterEscape :: IdentityEscape)

* yarr/YarrParser.h:
(JSC::Yarr::Parser::parseEscape):

LayoutTests:

* js/regexp-unicode-expected.txt:
* js/script-tests/regexp-unicode.js:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@258976 268f45cc-cd09-0410-ab3c-d52691b4dbfc

JSTests/ChangeLog
JSTests/test262/expectations.yaml
LayoutTests/ChangeLog
LayoutTests/js/regexp-unicode-expected.txt
LayoutTests/js/script-tests/regexp-unicode.js
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/yarr/YarrParser.h

index 9486a32..06bd3fe 100644 (file)
@@ -1,3 +1,12 @@
+2020-03-25  Alexey Shvayka  <shvaikalesh@gmail.com>
+
+        \b escapes inside character classes should be valid in Unicode patterns
+        https://bugs.webkit.org/show_bug.cgi?id=209528
+
+        Reviewed by Darin Adler.
+
+        * test262/expectations.yaml: Mark 2 test cases as passing.
+
 2020-03-24  Tadeu Zagallo  <tzagallo@apple.com>
 
         LLIntGenerator must link switch jumps to otherwise redundant labels
index 89bacc5..4e49e6b 100644 (file)
@@ -1711,9 +1711,6 @@ test/built-ins/RegExp/prototype/unicode/cross-realm.js:
 test/built-ins/RegExp/quantifier-integer-limit.js:
   default: 'SyntaxError: Invalid regular expression: number too large in {} quantifier'
   strict mode: 'SyntaxError: Invalid regular expression: number too large in {} quantifier'
-test/built-ins/RegExp/unicode_character_class_backspace_escape.js:
-  default: 'SyntaxError: Invalid regular expression: invalid escaped character for Unicode pattern'
-  strict mode: 'SyntaxError: Invalid regular expression: invalid escaped character for Unicode pattern'
 test/built-ins/RegExp/unicode_restricted_identity_escape_alpha.js:
   default: "Test262Error: IdentityEscape in AtomEscape: 'k' Expected a SyntaxError to be thrown but no exception was thrown at all"
   strict mode: "Test262Error: IdentityEscape in AtomEscape: 'k' Expected a SyntaxError to be thrown but no exception was thrown at all"
index 0c038fd..d3430a5 100644 (file)
@@ -1,3 +1,13 @@
+2020-03-25  Alexey Shvayka  <shvaikalesh@gmail.com>
+
+        \b escapes inside character classes should be valid in Unicode patterns
+        https://bugs.webkit.org/show_bug.cgi?id=209528
+
+        Reviewed by Darin Adler.
+
+        * js/regexp-unicode-expected.txt:
+        * js/script-tests/regexp-unicode.js:
+
 2020-03-24  Zalan Bujtas  <zalan@apple.com>
 
         [MultiColumn] Infinite recursion in RenderBlockFlow::relayoutToAvoidWidows
index 64aca0a..f1d1a39 100644 (file)
@@ -187,7 +187,6 @@ PASS /\c9/u threw exception SyntaxError: Invalid regular expression: invalid \c
 PASS r = new RegExp("\\-", "u") threw exception SyntaxError: Invalid regular expression: invalid escaped character for Unicode pattern.
 PASS r = new RegExp("\\a", "u") threw exception SyntaxError: Invalid regular expression: invalid escaped character for Unicode pattern.
 PASS r = new RegExp("[\\a]", "u") threw exception SyntaxError: Invalid regular expression: invalid escaped character for Unicode pattern.
-PASS r = new RegExp("[\\b]", "u") threw exception SyntaxError: Invalid regular expression: invalid escaped character for Unicode pattern.
 PASS r = new RegExp("[\\B]", "u") threw exception SyntaxError: Invalid regular expression: invalid escaped character for Unicode pattern.
 PASS r = new RegExp("\\x", "u") threw exception SyntaxError: Invalid regular expression: invalid escaped character for Unicode pattern.
 PASS r = new RegExp("[\\x]", "u") threw exception SyntaxError: Invalid regular expression: invalid escaped character for Unicode pattern.
index 8fe7b7b..7223a4f 100644 (file)
@@ -247,7 +247,6 @@ function shouldThrowInvalidEscape(pattern, error='invalidEscapeException')
 shouldThrowInvalidEscape("\\\\-");
 shouldThrowInvalidEscape("\\\\a");
 shouldThrowInvalidEscape("[\\\\a]");
-shouldThrowInvalidEscape("[\\\\b]");
 shouldThrowInvalidEscape("[\\\\B]");
 shouldThrowInvalidEscape("\\\\x");
 shouldThrowInvalidEscape("[\\\\x]");
index c292b9f..529dda6 100644 (file)
@@ -1,3 +1,20 @@
+2020-03-25  Alexey Shvayka  <shvaikalesh@gmail.com>
+
+        \b escapes inside character classes should be valid in Unicode patterns
+        https://bugs.webkit.org/show_bug.cgi?id=209528
+
+        Reviewed by Darin Adler.
+
+        This change removes isIdentityEscapeAnError('b') check, allowing \b escapes
+        inside character classes in Unicode patterns match U+0008 (BACKSPACE) characters,
+        aligning JSC with V8 and SpiderMonkey.
+
+        Grammar: https://tc39.es/ecma262/#prod-ClassEscape
+        ('b' comes before CharacterEscape :: IdentityEscape)
+
+        * yarr/YarrParser.h:
+        (JSC::Yarr::Parser::parseEscape):
+
 2020-03-24  Ross Kirsling  <ross.kirsling@sony.com>
 
         Introduce @tryGetByIdWithWellKnownSymbol instead of repurposing @tryGetById itself
index d655091..c28bfeb 100644 (file)
@@ -275,12 +275,9 @@ private:
         // Assertions
         case 'b':
             consume();
-            if (inCharacterClass) {
-                if (isIdentityEscapeAnError('b'))
-                    break;
-
+            if (inCharacterClass)
                 delegate.atomPatternCharacter('\b');
-            else {
+            else {
                 delegate.assertionWordBoundary(false);
                 return false;
             }