| OLD | NEW | 
|---|
| 1 // Copyright 2017 the V8 project authors. All rights reserved. | 1 // Copyright 2017 the V8 project authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 // Flags: --harmony-regexp-named-captures --harmony-regexp-lookbehind | 5 // Flags: --harmony-regexp-named-captures --harmony-regexp-lookbehind | 
| 6 | 6 | 
| 7 // Malformed named captures. | 7 // Malformed named captures. | 
| 8 assertThrows("/(?<>a)/u", SyntaxError);  // Empty name. | 8 assertThrows("/(?<>a)/u", SyntaxError);  // Empty name. | 
| 9 assertThrows("/(?<aa)/u", SyntaxError);  // Unterminated name. | 9 assertThrows("/(?<aa)/u", SyntaxError);  // Unterminated name. | 
| 10 assertThrows("/(?<42a>a)/u", SyntaxError);  // Name starting with digits. | 10 assertThrows("/(?<42a>a)/u", SyntaxError);  // Name starting with digits. | 
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 140 assertEquals("a", /(?<$𐒤>a)/u.exec("bab").groups.$𐒤); | 140 assertEquals("a", /(?<$𐒤>a)/u.exec("bab").groups.$𐒤); | 
| 141 assertEquals("a", /(?<_\u200C>a)/u.exec("bab").groups._\u200C); | 141 assertEquals("a", /(?<_\u200C>a)/u.exec("bab").groups._\u200C); | 
| 142 assertEquals("a", /(?<_\u200D>a)/u.exec("bab").groups._\u200D); | 142 assertEquals("a", /(?<_\u200D>a)/u.exec("bab").groups._\u200D); | 
| 143 assertEquals("a", /(?<ಠ_ಠ>a)/u.exec("bab").groups.ಠ_ಠ); | 143 assertEquals("a", /(?<ಠ_ಠ>a)/u.exec("bab").groups.ಠ_ಠ); | 
| 144 assertThrows('/(?<❤>a)/u', SyntaxError); | 144 assertThrows('/(?<❤>a)/u', SyntaxError); | 
| 145 assertThrows('/(?<𐒤>a)/u', SyntaxError);  // ID_Continue but not ID_Start. | 145 assertThrows('/(?<𐒤>a)/u', SyntaxError);  // ID_Continue but not ID_Start. | 
| 146 | 146 | 
| 147 assertEquals("a", /(?<π>a)/.exec("bab").groups.π); | 147 assertEquals("a", /(?<π>a)/.exec("bab").groups.π); | 
| 148 assertEquals("a", /(?<$>a)/.exec("bab").groups.$); | 148 assertEquals("a", /(?<$>a)/.exec("bab").groups.$); | 
| 149 assertEquals("a", /(?<_>a)/.exec("bab").groups._); | 149 assertEquals("a", /(?<_>a)/.exec("bab").groups._); | 
| 150 assertEquals("a", /(?<$𐒤>a)/.exec("bab").groups.$𐒤); | 150 assertThrows("/(?<$𐒤>a)/", SyntaxError); | 
| 151 assertEquals("a", /(?<ಠ_ಠ>a)/.exec("bab").groups.ಠ_ಠ); | 151 assertEquals("a", /(?<ಠ_ಠ>a)/.exec("bab").groups.ಠ_ಠ); | 
| 152 assertThrows('/(?<❤>a)/', SyntaxError); | 152 assertThrows('/(?<❤>a)/', SyntaxError); | 
| 153 assertThrows('/(?<𐒤>a)/', SyntaxError);  // ID_Continue but not ID_Start. | 153 assertThrows('/(?<𐒤>a)/', SyntaxError);  // ID_Continue but not ID_Start. | 
| 154 | 154 | 
| 155 // Interaction with lookbehind assertions. | 155 // Interaction with lookbehind assertions. | 
| 156 assertEquals(["f", "c"], "abcdef".match(/(?<=(?<a>\w){3})f/u)); | 156 assertEquals(["f", "c"], "abcdef".match(/(?<=(?<a>\w){3})f/u)); | 
| 157 assertEquals({a: "c"}, "abcdef".match(/(?<=(?<a>\w){3})f/u).groups); | 157 assertEquals({a: "c"}, "abcdef".match(/(?<=(?<a>\w){3})f/u).groups); | 
| 158 assertEquals({a: "b"}, "abcdef".match(/(?<=(?<a>\w){4})f/u).groups); | 158 assertEquals({a: "b"}, "abcdef".match(/(?<=(?<a>\w){4})f/u).groups); | 
| 159 assertEquals({a: "a"}, "abcdef".match(/(?<=(?<a>\w)+)f/u).groups); | 159 assertEquals({a: "a"}, "abcdef".match(/(?<=(?<a>\w)+)f/u).groups); | 
| 160 assertNull("abcdef".match(/(?<=(?<a>\w){6})f/u)); | 160 assertNull("abcdef".match(/(?<=(?<a>\w){6})f/u)); | 
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 212 assertThrows("/(?<\\u{0041}>.)/", SyntaxError); | 212 assertThrows("/(?<\\u{0041}>.)/", SyntaxError); | 
| 213 assertThrows("/(?<a\\u{104A4}>.)/", SyntaxError); | 213 assertThrows("/(?<a\\u{104A4}>.)/", SyntaxError); | 
| 214 assertThrows("/(?<a\\u{10FFFF}>.)/", SyntaxError); | 214 assertThrows("/(?<a\\u{10FFFF}>.)/", SyntaxError); | 
| 215 assertThrows("/(?<a\\uD801>.)/", SyntaxError);  // Lead | 215 assertThrows("/(?<a\\uD801>.)/", SyntaxError);  // Lead | 
| 216 assertThrows("/(?<a\\uDCA4>.)/", SyntaxError);  // Trail; | 216 assertThrows("/(?<a\\uDCA4>.)/", SyntaxError);  // Trail; | 
| 217 assertThrows("/(?<a\uD801>.)/", SyntaxError);  // Lead | 217 assertThrows("/(?<a\uD801>.)/", SyntaxError);  // Lead | 
| 218 assertThrows("/(?<a\uDCA4>.)/", SyntaxError);  // Trail | 218 assertThrows("/(?<a\uDCA4>.)/", SyntaxError);  // Trail | 
| 219 assertThrows("/(?<\\u{0041}>.)/", SyntaxError);  // Non-surrogate | 219 assertThrows("/(?<\\u{0041}>.)/", SyntaxError);  // Non-surrogate | 
| 220 assertThrows("/(?<a\\u{104A4}>.)/", SyntaxError);  // Surrogate, ID_Continue | 220 assertThrows("/(?<a\\u{104A4}>.)/", SyntaxError);  // Surrogate, ID_Continue | 
| 221 assertTrue(RegExp("(?<\u{0041}>.)").test("a"));  // Non-surrogate | 221 assertTrue(RegExp("(?<\u{0041}>.)").test("a"));  // Non-surrogate | 
| 222 assertTrue(RegExp("(?<a\u{104A4}>.)").test("a"));  // Surrogate, ID_Continue | 222 assertThrows("(?<a\u{104A4}>.)", SyntaxError);  // Surrogate, ID_Continue | 
| 223 assertTrue(RegExp("(?<\\u0041>.)").test("a"));  // Non-surrogate | 223 assertTrue(RegExp("(?<\\u0041>.)").test("a"));  // Non-surrogate | 
| 224 | 224 | 
| 225 // @@replace with a callable replacement argument (no named captures). | 225 // @@replace with a callable replacement argument (no named captures). | 
| 226 { | 226 { | 
| 227   let result = "abcd".replace(/(.)(.)/u, (match, fst, snd, offset, str) => { | 227   let result = "abcd".replace(/(.)(.)/u, (match, fst, snd, offset, str) => { | 
| 228     assertEquals("ab", match); | 228     assertEquals("ab", match); | 
| 229     assertEquals("a", fst); | 229     assertEquals("a", fst); | 
| 230     assertEquals("b", snd); | 230     assertEquals("b", snd); | 
| 231     assertEquals(0, offset); | 231     assertEquals(0, offset); | 
| 232     assertEquals("abcd", str); | 232     assertEquals("abcd", str); | 
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 406 { | 406 { | 
| 407   let re = toSlowMode(/(?<fst>.)(?<snd>.)|(?<thd>x)/u); | 407   let re = toSlowMode(/(?<fst>.)(?<snd>.)|(?<thd>x)/u); | 
| 408   assertEquals("bacd", "abcd".replace(re, "$<snd>$<fst>")); | 408   assertEquals("bacd", "abcd".replace(re, "$<snd>$<fst>")); | 
| 409   assertEquals("bacd", "abcd".replace(re, "$2$1")); | 409   assertEquals("bacd", "abcd".replace(re, "$2$1")); | 
| 410   assertEquals("cd", "abcd".replace(re, "$<thd>")); | 410   assertEquals("cd", "abcd".replace(re, "$<thd>")); | 
| 411   assertThrows(() => "abcd".replace(re, "$<snd"), SyntaxError); | 411   assertThrows(() => "abcd".replace(re, "$<snd"), SyntaxError); | 
| 412   assertThrows(() => "abcd".replace(re, "$<42$1>"), SyntaxError); | 412   assertThrows(() => "abcd".replace(re, "$<42$1>"), SyntaxError); | 
| 413   assertThrows(() => "abcd".replace(re, "$<fth>"), SyntaxError); | 413   assertThrows(() => "abcd".replace(re, "$<fth>"), SyntaxError); | 
| 414   assertThrows(() => "abcd".replace(re, "$<$1>"), SyntaxError); | 414   assertThrows(() => "abcd".replace(re, "$<$1>"), SyntaxError); | 
| 415 } | 415 } | 
| OLD | NEW | 
|---|