Fix RegExp white-space character class to match BOMs.

R=rossberg@chromium.org
TEST=test262/S15.10.2.12_A?_T1,mjsunit/regexp

Review URL: https://chromiumcodereview.appspot.com/9426032

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@10770 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 85069cd1
...@@ -3597,22 +3597,20 @@ void RegExpEngine::DotPrint(const char* label, ...@@ -3597,22 +3597,20 @@ void RegExpEngine::DotPrint(const char* label,
// ------------------------------------------------------------------- // -------------------------------------------------------------------
// Tree to graph conversion // Tree to graph conversion
static const int kSpaceRangeCount = 20; static const uc16 kSpaceRanges[] = { 0x0009, 0x000D, 0x0020, 0x0020, 0x00A0,
static const int kSpaceRangeAsciiCount = 4; 0x00A0, 0x1680, 0x1680, 0x180E, 0x180E, 0x2000, 0x200A, 0x2028, 0x2029,
static const uc16 kSpaceRanges[kSpaceRangeCount] = { 0x0009, 0x000D, 0x0020, 0x202F, 0x202F, 0x205F, 0x205F, 0x3000, 0x3000, 0xFEFF, 0xFEFF };
0x0020, 0x00A0, 0x00A0, 0x1680, 0x1680, 0x180E, 0x180E, 0x2000, 0x200A, static const int kSpaceRangeCount = ARRAY_SIZE(kSpaceRanges);
0x2028, 0x2029, 0x202F, 0x202F, 0x205F, 0x205F, 0x3000, 0x3000 };
static const uc16 kWordRanges[] = { '0', '9', 'A', 'Z', '_', '_', 'a', 'z' };
static const int kWordRangeCount = 8; static const int kWordRangeCount = ARRAY_SIZE(kWordRanges);
static const uc16 kWordRanges[kWordRangeCount] = { '0', '9', 'A', 'Z', '_',
'_', 'a', 'z' }; static const uc16 kDigitRanges[] = { '0', '9' };
static const int kDigitRangeCount = ARRAY_SIZE(kDigitRanges);
static const int kDigitRangeCount = 2;
static const uc16 kDigitRanges[kDigitRangeCount] = { '0', '9' }; static const uc16 kLineTerminatorRanges[] = { 0x000A, 0x000A, 0x000D, 0x000D,
0x2028, 0x2029 };
static const int kLineTerminatorRangeCount = 6; static const int kLineTerminatorRangeCount = ARRAY_SIZE(kLineTerminatorRanges);
static const uc16 kLineTerminatorRanges[kLineTerminatorRangeCount] = { 0x000A,
0x000A, 0x000D, 0x000D, 0x2028, 0x2029 };
RegExpNode* RegExpAtom::ToNode(RegExpCompiler* compiler, RegExpNode* RegExpAtom::ToNode(RegExpCompiler* compiler,
RegExpNode* on_success) { RegExpNode* on_success) {
......
...@@ -127,6 +127,17 @@ assertTrue(re.test("$")); ...@@ -127,6 +127,17 @@ assertTrue(re.test("$"));
assertTrue(/^[Z-\c-e]*$/.test("Z[\\cde")); assertTrue(/^[Z-\c-e]*$/.test("Z[\\cde"));
// Test that we handle \s and \S correctly on special Unicode characters.
re = /\s/;
assertTrue(re.test("\u2028"));
assertTrue(re.test("\u2029"));
assertTrue(re.test("\uFEFF"));
re = /\S/;
assertFalse(re.test("\u2028"));
assertFalse(re.test("\u2029"));
assertFalse(re.test("\uFEFF"));
// Test that we handle \s and \S correctly inside some bizarre // Test that we handle \s and \S correctly inside some bizarre
// character classes. // character classes.
re = /[\s-:]/; re = /[\s-:]/;
......
...@@ -125,11 +125,13 @@ S15.5.2_D2: PASS || FAIL_OK ...@@ -125,11 +125,13 @@ S15.5.2_D2: PASS || FAIL_OK
S15.5.4.11_D1.1_T1: PASS || FAIL_OK S15.5.4.11_D1.1_T1: PASS || FAIL_OK
S15.5.4.11_D1.1_T3: PASS || FAIL_OK S15.5.4.11_D1.1_T3: PASS || FAIL_OK
S12.6.4_D1: PASS || FAIL_OK S12.6.4_D1: PASS || FAIL_OK
S15.5.4.14_A1_T6: PASS || FAIL_OK S15.5.4.14_A1_T6: FAIL_OK
S15.5.4.14_A1_T7: PASS || FAIL_OK S15.5.4.14_A1_T7: FAIL_OK
S15.5.4.14_A1_T8: PASS || FAIL_OK S15.5.4.14_A1_T8: FAIL_OK
S15.5.4.14_A1_T9: PASS || FAIL_OK S15.5.4.14_A1_T9: FAIL_OK
S15.5.4.14_A2_T7: PASS || FAIL_OK S15.5.4.14_A2_T7: FAIL_OK
S15.10.2.12_A1_T1: FAIL_OK
S15.10.2.12_A2_T1: FAIL_OK
# We allow function declarations within statements # We allow function declarations within statements
S12.6.2_A13_T1: FAIL_OK S12.6.2_A13_T1: FAIL_OK
......
...@@ -56,10 +56,6 @@ S10.4.2.1_A1: FAIL ...@@ -56,10 +56,6 @@ S10.4.2.1_A1: FAIL
15.2.3.7-6-a-284: FAIL 15.2.3.7-6-a-284: FAIL
15.2.3.7-6-a-285: FAIL 15.2.3.7-6-a-285: FAIL
# Unanalyzed failures:
S15.10.2.12_A1_T1: FAIL
S15.10.2.12_A2_T1: FAIL
##################### DELIBERATE INCOMPATIBILITIES ##################### ##################### DELIBERATE INCOMPATIBILITIES #####################
# We deliberately treat arguments to parseInt() with a leading zero as # We deliberately treat arguments to parseInt() with a leading zero as
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment